版权声明:本文为博主原创文章,转载请注明原文链接 https://blog.csdn.net/qq_36922927/article/details/82964655
此文仅仅记录mfc学习的第一个窗口
先上
代码
#include "stdafx.h"
#include "window001.h"
#include <windows.h>
#define MAX_LOADSTRING 100
//过程函数
LRESULT CALLBACK myProc(HWND hWnd,UINT msg, WPARAM wParam, LPARAM lParam);
//WinMain相当于是main函数,c中的main,java中的main
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow) {
//窗口的一些属性配置
/*typedef struct tagWNDCLASSW {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCWSTR lpszMenuName;
LPCWSTR lpszClassName;
} WNDCLASSW
//执行顺序,以下通过数字标识
// 配置窗口的一些属性
WNDCLASS wc = { CS_HREDRAW | CS_VREDRAW,
myProc,//指定过程函数
0,0,hinstance,
LoadIcon(NULL,IDI_APPLICATION),LoadIcon(NULL,IDC_CROSS),
(HBRUSH)GetStockObject(WHITE_BRUSH),NULL,
"wlcss" } ;//特别注意这个字符串,相当于wc的id,以后如果需要用到此wc去createWindow,需要注意这个字符串,如果不一致,将不能创建创建窗口
//注册窗口 1
RegisterClass(&wc);
//创建窗口 2 //注意第一个参数
HWND hWnd = CreateWindow("wlcss", "第一个手敲的窗口",
WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, NULL, NULL, NULL, NULL);
//显示窗口 4
ShowWindow(hWnd, SW_NORMAL);
//更新窗口 5
UpdateWindow(hWnd);
//消息循环 7
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
// 3 6 8
LRESULT CALLBACK myProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
//交由默认的过程函数处理
return DefWindowProc(hWnd, msg, wParam, lParam);
}
窗口创建流程:
1,配置窗口类--WindClass wc={配置},其中包含"窗口类 id"
2,注册窗口类--RegisterClass(&wc);//传入的是指针,应该不是引用
3,创建窗口--Hwnd hwnd=CreateWindow("窗口类id",,,,,,)
4,显示窗口--ShowWindow(hWnd, SW_NORMAL);//第二个参数是显示窗口的命令常量,比如最大化显示,最小化显示,正常显示
5,更新窗口--UpdateWindow(hWnd);//窗口缩放时,会在这个函数处理缩放消息,重绘窗口
6,消息处理---消息循环,翻译消息,分发消息
LRESULT
WINAPI
DispatchMessageA(
_In_ CONST MSG *lpMsg);//是接收一个MSG的结构体指针,这个结构体是啥样的呢?
/*
* Message structure
*/
typedef struct tagMSG {
HWND hwnd;//窗口句柄,表示这个消息被哪一个窗口接收
UINT message;//Specifies the message number,一个消息标识号 ,这个的理解,暂时还不明白
WPARAM wParam;// 消息的附加信息
LPARAM lParam;//消息的附加信息
DWORD time;//时间戳,也就是消息被发送的时间
POINT pt;//光标
#ifdef _MAC
DWORD lPrivate;
#endif
} MSG
7,过程函数---贯穿于以上几个过程
注意的地方:
1,字符集选择未设置,否则那个字符串处会出现问题 "onst char *" 类型的实参与 "LPCWSTR"类型形参 不兼容,
扫描二维码关注公众号,回复:
3520433 查看本文章
vs默认是 “使用unicode字符集”
点击调试-》属性
更改为 "未设置" ,点击应用即可
运行效果: