您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 创建Win32应用程序(C++)
创建Win32应用程序(C++)创建新的Win32项目1.在“文件”菜单上,单击“新建”,然后单击“项目...”。2.在“项目类型”窗格中,选择“VisualC++”节点中的“Win32”,然后在“模板”窗格中选择“Win32项目”。键入项目的名称,如win32app。您可以接受默认位置、键入一个位置或者导航到要保存项目的目录。3.在“Win32应用程序向导”中,选择“下一步”。4.在“Win32应用程序向导”中,在“应用程序类型”下选择“Windows应用程序”。在“附加选项”下选择“空项目”。原样保留剩余的选项。单击“完成”创建项目。5.在“项目”菜单中选择“添加新项...”,将C++文件添加到项目中。在“添加新项”对话框中选择“C++文件(.cpp)”。为文件键入一个名称,如GT_HelloWorldWin32.cpp,并单击“添加”。启动Win32应用程序1.正如您所了解的,每个C和C++应用程序必须具有一个main函数。此函数是应用程序的起始点。类似地,在Win32应用程序中,每个应用程序必须具有一个WinMain函数。WinMain的语法如下所示:复制intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow);有关此函数的参数和返回值的解释,请参见WinMain函数。2.因为应用程序代码必须使用现有的定义,所以应将include语句添加到文件中以使用它们。例如:复制#includewindows.h#includestdlib.h#includestring.h#includetchar.h3.除WinMain外,每个Win32应用程序还必须具有第二个函数(通常称为WndProc),它代表窗口过程。WndProc的语法如下所示:复制LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);此函数的用途是处理应用程序从操作系统接收的任何消息。应用程序何时从操作系统接收消息?始终接收!例如,假设我们创建了包含“确定”按钮的对话框。当用户单击该按钮时,操作系统向应用程序发送消息,使我们知道某位用户按下了此按钮。WndProc函数负责响应该事件。在本示例中,适当的响应可能是关闭对话框。有关更多信息,请参见窗口过程。向WinMain添加功能1.首先,在WinMain函数内部创建WNDCLASSEX类型的窗口类结构。此结构包含有关窗口的信息,如应用程序图标、窗口的背景色、在标题栏中显示的名称、窗口过程函数的名称等等。典型的WNDCLASSEX结构如下:复制WNDCLASSEXwcex;wcex.cbSize=sizeof(WNDCLASSEX);wcex.style=CS_HREDRAW|CS_VREDRAW;wcex.lpfnWndProc=WndProc;wcex.cbClsExtra=0;wcex.cbWndExtra=0;wcex.hInstance=hInstance;wcex.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_APPLICATION));wcex.hCursor=LoadCursor(NULL,IDC_ARROW);wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName=NULL;wcex.lpszClassName=szWindowClass;wcex.hIconSm=LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_APPLICATION));有关此结构的字段解释,请参见WNDCLASSEX。2.现在已经创建了窗口类,接下来您必须注册它。使用RegisterClassEx函数,并将窗口类结构作为参数传递:复制if(!RegisterClassEx(&wcex)){MessageBox(NULL,_T(CalltoRegisterClassExfailed!),_T(Win32GuidedTour),NULL);return1;}3.现在已经注册了您自己的类,接下来创建窗口。使用CreateWindow函数,如下所示:复制staticTCHARszWindowClass[]=_T(win32app);staticTCHARszTitle[]=_T(Win32GuidedTourApplication);//TheparameterstoCreateWindowexplained://szWindowClass:thenameoftheapplication//szTitle:thetextthatappearsinthetitlebar//WS_OVERLAPPEDWINDOW:thetypeofwindowtocreate//CW_USEDEFAULT,CW_USEDEFAULT:initialposition(x,y)//500,100:initialsize(width,length)//NULL:theparentofthiswindow//NULL:thisapplicationdowsnothaveamenubar//hInstance:thefirstparameterfromWinMain//NULL:notusedinthisapplicationHWNDhWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,100,NULL,NULL,hInstance,NULL);if(!hWnd){MessageBox(NULL,_T(CalltoCreateWindowfailed!),_T(Win32GuidedTour),NULL);return1;}此函数返回HWND,它是某个窗口的句柄。有关更多信息,请参见Windows数据类型。4.创建了窗口后,我们可以使用以下代码将其显示在屏幕上:复制//TheparameterstoShowWindowexplained://hWnd:thevaluereturnedfromCreateWindow//nCmdShow:thefourthparameterfromWinMainShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);到目前为止,此窗口还不会显示,因为我们尚未实现WndProc函数。5.WinMain的最后一步是消息循环。此循环的用途是侦听操作系统发送的消息。应用程序收到消息后,将该消息调度到WndProc函数,以便进行处理。消息循环类似于:复制MSGmsg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return(int)msg.wParam;有关消息循环中使用的结构和函数的更多信息,请参见MSG、GetMessage、TranslateMessage和DispatchMessage。您刚才完成的步骤为大多数Win32应用程序所共用。有关此应用程序所需要的include指令和全局变量声明,请参见本主题末尾的完整代码示例。此时,WinMain函数应该与下面的内容类似:复制intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){WNDCLASSEXwcex;wcex.cbSize=sizeof(WNDCLASSEX);wcex.style=CS_HREDRAW|CS_VREDRAW;wcex.lpfnWndProc=WndProc;wcex.cbClsExtra=0;wcex.cbWndExtra=0;wcex.hInstance=hInstance;wcex.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_APPLICATION));wcex.hCursor=LoadCursor(NULL,IDC_ARROW);wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName=NULL;wcex.lpszClassName=szWindowClass;wcex.hIconSm=LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_APPLICATION));if(!RegisterClassEx(&wcex)){MessageBox(NULL,_T(CalltoRegisterClassExfailed!),_T(Win32GuidedTour),NULL);return1;}hInst=hInstance;//Storeinstancehandleinourglobalvariable//TheparameterstoCreateWindowexplained://szWindowClass:thenameoftheapplication//szTitle:thetextthatappearsinthetitlebar//WS_OVERLAPPEDWINDOW:thetypeofwindowtocreate//CW_USEDEFAULT,CW_USEDEFAULT:initialposition(x,y)//500,100:initialsize(width,length)//NULL:theparentofthiswindow//NULL:thisapplicationdowsnothaveamenubar//hInstance:thefirstparameterfromWinMain//NULL:notusedinthisapplicationHWNDhWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,100,NULL,NULL,hInstance,NULL);if(!hWnd){MessageBox(NULL,_T(CalltoCreateWindowfailed!),_T(Win32GuidedTour),NULL);return1;}//TheparameterstoShowWindowexplained://hWnd:thevaluereturnedfromCreateWindow//nCmdShow:thefourthparameterfromWinMainShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);//Mainmessageloop:MSGmsg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return(int)msg.wParam;}向WndProc添加功能1.WndProc函数的用途是处理应用程序接收的消息。通常使用Switch函数实现此操作。我们将处理的第一个消息是WM_PAINT消息。当必须更新应用程序窗口的一部分时,应用程序会收到此消息。首次创建窗口时,必须更新整个窗口,并传递此消息以指示此操作。当处理WM_PAINT消息时,首先应做的是调用BeginPaint,最后应做的是调用EndPaint。在这两个函数调用之间,您可以处理所有的逻辑,以在窗口中排列文本、按钮和其他控件。对于此应用程序,我们在窗口中显示字符串“Hello,World!”。若要显示文本,请使用Text
本文标题:创建Win32应用程序(C++)
链接地址:https://www.777doc.com/doc-3582605 .html