在这个模块中,我们将编写一个最小的Windows程序。它所做的只是创建并显示一个空白窗口。这第一个程序包含约50行代码,不包括空行和注释。这将是我们的出发点;稍后我们将添加图形,文本,用户输入和其他功能。
示例程序的屏幕截图
以下是程序的完整代码:
#ifndef UNICODE
#define UNICODE
#endif
#include
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE,PWSTR pCmdLine,int nCmdShow){
// Register the window class.
const wchar_t CLASS_NAME[]=L"Sample Window Class";
WNDCLASS wc={};
wc.lpfnWndProc=WindowProc;
wc.hInstance=hInstance;
wc.lpszClassName=CLASS_NAME;
RegisterClass(&wc);
// Create the window.
HWND hwnd=CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if(hwnd==NULL)
return 0;
ShowWindow(hwnd,nCmdShow);
// Run the message loop.
MSG msg={};
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
switch(uMsg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hwnd,&ps);
FillRect(hdc,&ps.rcPaint,(HBRUSH)(COLOR_WINDOW+1));
EndPaint(hwnd,&ps);
}
return 0;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
您可以从Windows Hello World Sample下载完整的Visual Studio项目。
简单介绍一下这段代码的作用可能是有用的。稍后的主题将详细检查代码。
请注意,程序并没有显式调用WindowProc函数,即使我们说这是大多数应用程序逻辑定义的地方。Windows通过传递一系列消息来与程序通信。while循环内的代码驱动这个过程。每次程序调用DispatchMessage函数时,间接地导致Windows调用WindowProc函数,每个消息一次。
在这个部分
相关话题
学习用C++编写Windows程序
Windows Hello World示例
原文链接:Module 1. Your First Windows Program