C++之MFC入门1

    xiaoxiao2026-09-25  11

    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 );
    转载请注明原文地址: https://ju.6miu.com/read-1312326.html
    最新回复(0)