Windows学习心得【对话框】

#include 
#include "resource.h"

LRESULT CALLBACK WndProc      (HWND, UINT, WPARAM, LPARAM) ;//回调函数的声明
BOOL    CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, //应用程序当前实例的句柄 
					HINSTANCE hPrevInstance,//应用程序先前的实例句柄
                    PSTR szCmdLine, //指向应用程序命令行的字符串的指针
					int iCmdShow)//指明窗口如何显示
{
     static TCHAR szAppName[] = TEXT ("About1") ;
     MSG          msg ;//消息
     HWND         hwnd ;//定义句柄 
     WNDCLASS     wndclass ;//窗口类名
     
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;//窗口的显示方式,此处为水平重画和竖直重画
     wndclass.lpfnWndProc   = WndProc ;//窗口回调函数
     wndclass.cbClsExtra    = 0 ;//窗口扩展,此处为0 
     wndclass.cbWndExtra    = 0 ;//窗口实例扩展,此处为0
     wndclass.hInstance     = hInstance ;//窗口的实例句柄
     wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE(ABOUT1)) ;//使用自定义的图标
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;//鼠标的显示方式,此处设置为标准型 
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//窗口背景颜色的设置,此处设置为白色
     wndclass.lpszMenuName  = MAKEINTRESOURCE(ABOUT1) ;//窗口菜单
     wndclass.lpszClassName = szAppName ;//窗口类名
     
     if (!RegisterClass (&wndclass))//注册窗口,若注册失败,产生如下的信息
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     

	 //创建窗口,如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL
     hwnd = CreateWindow (szAppName, 
						TEXT ("About Box Demo Program"),//窗口的名字
                          WS_OVERLAPPEDWINDOW,//指定创建窗口的风格
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,//以上四个参数分别为窗口的x坐标和y坐标宽度和高度
                          NULL, //指向被创建窗口的父窗口或所有者窗口的句柄,此处为NULL
						  NULL, //菜单句柄,或依据窗口风格指明一个子窗口标识,此处为NULL
						  hInstance,//与窗口相关联的模块实例的句柄 
						  NULL) ;//指向一个值的指针,该值传递给窗口WM_CREATE消息
     
     ShowWindow (hwnd, iCmdShow) ;//显示窗口,hWnd:指窗口句柄。iCmdShow:指定窗口如何显示
     UpdateWindow (hwnd) ; //更新窗口,hWnd:指窗口句柄
     
     while (GetMessage (&msg, NULL, 0, 0))//消息循环 
     {
          TranslateMessage (&msg) ;//该函数将虚拟键消息转换为字符消息
          DispatchMessage (&msg) ;//该函数分发一个消息给窗口程序
     }
     return msg.wParam ;//wParam是消息携带的参数,可以是个值,也可以是个地址
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static HINSTANCE hInstance ;
     
     switch (message)
     {
     case WM_CREATE :
          hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;//获取程序当前的句柄
          return 0 ;
          
     case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDM_APP_ABOUT :
               DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
			   //DialogBox作用为创建一个模态对话框
               break ;
          }
          return 0 ;
          
     case WM_DESTROY :
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message, 
                            WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
     case WM_INITDIALOG ://WM_INITDIALOG消息是对话框才能收到的消息,表明对话框及其所有子控件都创建完毕了
          return TRUE ;
          
     case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDOK :
          case IDCANCEL :
               EndDialog (hDlg, 0) ;//该函数清除一个模态对话框,并使系统中止对对话框的任何处理
               return TRUE ;
          }
          break ;
     }
     return FALSE ;
}
Windows学习心得【对话框】_第1张图片

你可能感兴趣的:(Windows学习日记)