C++之MFC入门1

本文介绍了C++中MFC入门的基本知识,重点讲解了SDC窗口产生的过程,包括WinMain函数、WNDCLASS结构体的定义、窗口类的注册、窗口创建、显示与更新以及消息循环的工作原理。通过对每个步骤的详细阐述,帮助读者理解C++ MFC应用程序窗口创建的完整流程。
摘要由CSDN通过智能技术生成

SDC窗口产生过程:
(1)进入WinMain(hInstance,hPrevInstance,lpCmdLine,nCmdShow) 参数为系统传递给应用程序的
(2)设计窗口:_WNDCLASS{ 结构体
UNIT style; 窗口样式 重绘 CS开头
WNDPROC lpfnWndProc; 窗口过程函数的地址 回调函数 lpfnWndProc=WinSunProc;
int cbClsExtra; 一般为0
int cbWndExtra; 附加内存空间一般为0
HANDLE hInstance; 当前应用实例句柄
HICON hIcon; 窗口图标句柄 定义窗口图标 一般:LoadIcon(NULL,—)系统默认
HCURSOR hCursor; 窗口光标 调用:LoadCursor(NULL,—)系统默认
HBRUSH hbrBackground; 背景画刷句柄 (HBRUSH)GetStockObject(BLACK_BRUSH) 窗口重绘时会使用该画刷填充窗口背景
LPCTSTR lpszMenuName; 指定菜单资源的名字
LPCTSTR lpszClassName; 窗口类名字
}
a.设计窗口只是定义一个窗口类,并对窗口结构体成员赋值,相当于开辟一定的内存空间。
b.一个应用程序可以包含多个窗口过程函数,但一个窗口过程总与某个特定的窗口相关联。
c.窗口过程函数被调用的过程:1.设计窗口类时将函数地址赋给lpfnWndProc
2.调用RegisterClass(&wndClass),将函数地址传递给系统
3.应用程序收到消息时调用DispatchMessage(&msg),将消息回传给系统,系统在调用窗口过程函数对消息进行处理
(3)注册窗口:RegisterClass(&wndcls) 窗口定义完后只有注册后才能将窗口信息传递给系统
(4)创建窗口:HWND CreatWindow( 系统函数
LPCTSTR lpClassName, 跟设计窗口时的窗口名字一样 在创建时系统可以根据该名字产生已经设计过的相应类型的窗口
LPCTSTR lpWindowName, 显示在标题栏中的窗口的名字
DWORD dwStyle, 指本次创建的窗口的类型 WS开头 常用:WS_OVERLAPPEWINDOW
int x,
int y, 窗口左上角x,y坐标 如果x设为CW_USREDEFAULT 则为默认 y忽略
int nWidth,
int nHeight, 窗口高度和宽度 如果nWidth设为CW_USREDEFAULT 则为默认 nHeight忽略
HWND hWndParent, 父窗口句柄
HMENU hMenu, 窗口菜单句柄
HANDLE hInstance, 窗口所属应用程序示例句柄 WINMAIN 参数
LPVOID lpParm 作为WM_CREATE消息的附加参数lParm传入的数据指针
);
窗口创建成功 该函数返回系统为新创建窗口的句柄 否则返回NULL
(5)显示和更新窗口:BOOL ShowWindow(
HWND hWnd, 要显示的窗口的句柄
int nCmdShow 指定窗口显示的状态 SW开头
);
BOOL UpdateWindow(
HWND hWnd, 创建成功后的窗口句柄
);
更新窗口通过发送一个WM_PAINT消息来刷新窗口,此消息直接发送给窗口过程函数,并未进入消息队列
(6)消息循环;
消息结构体:tagMSG{
HWND hwnd 产生消息的窗口的句柄
UINT message 消息的类型
WPARM wParam
LPARM lParm 附加消息
DWORD time 发送消息的时间
POINT point 产生消息时鼠标的位置(struct POINT{LOMNG x;LONG y;})
};
当窗口中有消息产生时,系统会首先感知到这一事件,然后将这一事件包装成一个消息投递到消息队列中,然后应用程序从消息队列中取出消息进行响应。

BOOL GetMessage(
        LPMSG lpMsg, 指向消息结构体的指针 函数从线程中取出的消息信息将保存在该结构体中
        HWND hWnd,   窗口句柄 指定接收那一窗口的消息 通常设置为NULL 将接收线程中所有消息
        UINT wMsgFilterMin, 获取消息的最小值 通常为0
        UINT wMsgFilterMax 获取消息的最大值 如果也为0 则获取所有消息
        ); 
该函数接收除了WM_QUIT消息外 均返回0 如果出现错误返回-1 
消息处理过程:  1.操作系统首先接收到应用程序的窗口消息,将消息投递到消息队列中。
        2.应用程序利用GetMessage函数从消息队列中取出消息,对消息进行预处理。
        3.应用程序调用DispatchMessage函数将消息回传给操作系统。
        4.操作系统利用注册过的窗口类中的窗口过程函数地址,对消息进行处理。
窗口过程函数:LRESULT CALLBACK WindowProc(
                    HWND hWnd, 消息的窗口句柄
                    UINT uMsg, 消息内容
                    WPARM wParm, 附加参数
                    LPARM lParm
                    );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值