用C++生成一个windows(win32)的窗口程序
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2016-08-17 15:53:06
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
使用vs开发程序的时候用mfc已经把windows下面的窗口程序实现过程封装的很厉害,下面直接用c++代码调用vc++封装好的类库实现一个win32的窗口程序,了解下windows下面窗口程序的消息循环和处理过程
本例中使用vs2015纯c++代码调用window sdk API生成windows中的一个窗口程序 不用mfc 看代码:
打开vs2015新建项目vc++ win32项目
然后选择 window应用程序和空项目
点击完成,项目就创建完成啦,然后在项目上右键属性 设置项目的字符集为多字节,如图:
然后开始创建源代码文件 main.cpp
保存为main.cpp文件
打开main.cpp输入以下代码然后运行
#include <windows.h>; //声明一个窗口消息回调函数 LRESULT CALLBACK MAINWNDPROC(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { static char str[2] = { 0 }; // 消息处理 switch (msg) { case WM_KEYDOWN: str[0] = char(wparam); if (msg == MK_SHIFT&&wparam) InvalidateRect(hwnd, NULL, 1); return 0; case WM_PAINT: PAINTSTRUCT ps; BeginPaint(hwnd, &ps); TextOut(ps.hdc, 0, 0, str, strlen(str)); EndPaint(hwnd, &ps); return 0; case WM_DESTROY: //发送 WM_QUIT 退出消息到消息队列 PostQuitMessage(0); break; case WM_CLOSE: PostMessage(hwnd, WM_QUIT, 0, 0); return 0; default: // 对没有处理的消息进行默认的处理 return DefWindowProc(hwnd, msg, wparam, lparam); } return DefWindowProc(hwnd, msg, wparam, lparam); } class CFrameWindow { public: LRESULT CreateShowWindow(HINSTANCE hinstance, HINSTANCE Phinstance, LPSTR lpstr, int showcmd) { WNDCLASS MYWND; MYWND.cbClsExtra = 0; MYWND.cbWndExtra = 0; MYWND.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); MYWND.hInstance = hinstance; MYWND.lpszClassName = "应用程序"; MYWND.lpszMenuName = NULL;//没有菜单 MYWND.style = CS_BYTEALIGNCLIENT; MYWND.hIcon = LoadIcon(NULL, IDI_APPLICATION);//窗口默认的图标和鼠标 MYWND.hCursor = LoadCursor(NULL, IDC_ARROW); MYWND.lpszMenuName = NULL; //没有菜单 MYWND.cbClsExtra = 0; //窗口类扩展 MYWND.cbWndExtra = 0; //结构或窗口实例 MYWND.lpfnWndProc = MAINWNDPROC; //窗口回调函数 //MYWND.hbrBackground = (HBRUSH) COLOR_BACKGROUND; MYWND.hbrBackground = CreateSolidBrush(RGB(255, 0, 0));//窗口的默认颜色和背景色 //注册失败就退出 if (!RegisterClass(&MYWND)) { return 0; } //类注册成功,就可以用这个类来创建一个窗口 HWND hwnd = CreateWindowEx( 0, // 扩展,为空 MYWND.lpszClassName, // 类名 "Windows 32 App", // 标题 WS_OVERLAPPEDWINDOW, // 默认窗口类型 CW_USEDEFAULT, // 窗口在屏幕上的开始位置 CW_USEDEFAULT, // 窗口在屏幕上的结束位置 544, // 宽 375, // 高 以像素计算 HWND_DESKTOP, // 父窗口为桌面 NULL, // 没有菜单 hinstance, // 程序实例句柄 NULL // 数据为空 ); ShowWindow(hwnd, showcmd); UpdateWindow(hwnd); MSG msg; // 运行消息循环直到 GetMessage() 返回 0 while (GetMessage(&msg, NULL, 0, 0) != 0) { //该函数将虚拟键消息转换为字符消息 TranslateMessage(&msg); // 发送消息到窗口循环函数 MAINWNDPROC DispatchMessage(&msg); } return 0; } }; int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE Phinstance, LPSTR lpstr, int showcmd) { CFrameWindow* wnd = new CFrameWindow(); if (wnd == NULL)return 0; wnd->CreateShowWindow(hinstance, Phinstance, lpstr, showcmd); return 0; }
效果图如下: