首先创建一个win32项目中的空项目
#include <windows.h> //窗口过程函数 LRESULT CALLBACK DealMessage(HWND hWnd, //窗口句柄,消息所属的窗口 UINT uMsg, //消息标志 WPARAM wParam, //附加信息 LPARAM lParam ) { switch(uMsg) { case WM_LBUTTONDOWN: //鼠标左键按下 MessageBox(hWnd,TEXT("ABC"), TEXT("鼠标左键按下"),MB_OK); break; case WM_PAINT: { PAINTSTRUCT ps; //绘图结构体 HDC dc = BeginPaint(hWnd,&ps); //开始 char * p = "aaaaaaaa"; TextOut(dc,30,30,p,strlen(p)); EndPaint(hWnd,&ps); //结束 break; } case WM_DESTROY: PostQuitMessage(2); //WM_QUIT 给主函数 return msg.wParam break; default: return DefWindowProc(hWnd,uMsg,wParam,lParam); } return 0; } //WINAPI:修饰函数,规定函数参数入栈从右往左,函数调用完毕,自动清理堆栈 //CALLBACK //搜索winmain int WINAPI WinMain( HINSTANCE hInstance, //应用程序实例 HINSTANCE hPrevInstance, //上一个应用程序实例 LPWSTR lpCmdLine, //long painter string 放的是char* int nShowCmd //窗口显示的样式,最大化,最小化 ) { /* 1.定义入口函数WinMain() 2.创建一个窗口 a)设计窗口类WNDCLASS(给成员变量赋值) b)注册窗口类 c)创建窗口类 d)显示和更新窗口 3.消息循环 4.窗口过程函数 */ HWND hWnd; MSG msg; //a)设计窗口类WNDCLASS(给成员变量赋值) WNDCLASS wc; wc.cbClsExtra = 0; //类的附加信息 wc.cbWndExtra = 0; //窗口附件信息 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH) ; //背景色,必须写 //wc.hCursor = NULL; //使用默认 wc.hCursor = LoadCursor(NULL,IDC_HELP); //加载系统默认光标 //wc.hIcon = NULL; //可以默认 wc.hIcon = LoadIcon(NULL,IDI_WARNING); // 加载系统默认图标 wc.hInstance = hInstance; //应用程序实例 wc.lpfnWndProc = DealMessage; //窗口过程函数名字,消息处理函数 wc.lpszClassName = TEXT("MJJ"); //类的名字 wc.lpszMenuName = NULL; //菜单名字 wc.style = nShowCmd; //显示风格 //b)注册窗口类 告诉系统窗口过程函数的入口地址 RegisterClass(&wc); //c)创建窗口类 hWnd = CreateWindow(TEXT("MJJ"),TEXT("hello,windows"),WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, //x,y高宽 NULL,NULL,hInstance,NULL); //d)显示和更新窗口 ShowWindow(hWnd,SW_SHOWNORMAL); UpdateWindow(hWnd); //3.消息循环 //MSG msg; //如果接收到WM_QUIT,返回0,退出 //如果出错,返回-1,不退出 while(GetMessage(&msg,NULL,0,0)) { //翻译工作 //虚拟按键转为标准字符WM__CHAR TranslateMessage(&msg); //给操作系统分发消息 DispatchMessage(&msg); } return msg.wParam; }
基本概念与过程图: