因为要学习MFC,所以先学习了一下windows底层实现的逻辑。
实现一个窗口主要分为六步:
1、设计窗口
2、注册窗口
3、创建窗口
4、显示和更新窗口
5、通过循环取消息
6、处理消息(窗口过程)
下面直接上程序:
#include <windows.h>
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch (uMsg) {
case WM_CLOSE:
DestroyWindow(hwnd);//DestroyWindow发送另一个消息 WM_DESTROY
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN: //鼠标左键按下
{
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam);
char buf[1024];
wsprintf(buf, TEXT("x=%d,y=%d"), xPos, yPos);
MessageBox(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
break;
}
}
//返回值用默认处理方式
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
//程序入口函数
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPreInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursor(NULL,IDC_HAND);
wc.hIcon = LoadIcon(NULL,IDI_ERROR);
wc.hInstance = hInstance;//应用程序的实例 句柄
wc.lpfnWndProc = WindowProc; // 回调函数,窗口过程
wc.lpszClassName = TEXT("WIN");//指定窗口类名称
wc.lpszMenuName = NULL; //菜单名称
wc.style = 0; //显示风格 0代表默认风格
RegisterClass(&wc);
HWND hwnd = CreateWindow(wc.lpszClassName,TEXT("WINDOWS"),WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while (1) {
if (GetMessage(&msg, NULL,0,0) == FALSE) {
break;
}
//翻译消息
TranslateMessage(&msg);
//不为false
//分发消息
DispatchMessage(&msg);
}
//处理窗口过程
return 0;
}
由于时间原因,没有写注释,等有时间再加上。
新建工程的步骤:
文件-新建-项目-Visual C++(Windows桌面向导)(2017版本)-更改文件位置,完成。
程序写好以后需要更改一个地方:
右键点击左侧工程名字-属性-链接器-系统-子系统-选择该项为窗口。
先这样,再完善。