MFC-第一个窗口

版权声明:本文为博主原创文章,转载请注明原文链接 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字符集”

点击调试-》属性

更改为  "未设置" ,点击应用即可

运行效果:

猜你喜欢

转载自blog.csdn.net/qq_36922927/article/details/82964655