您的位置:首页 > 其它

Win32创建一个简单的窗口

2017-11-12 21:42 639 查看
Win32创建一个简单的窗口

环境:Win10专业版   VS2017  桌面应用程序

在该环境下创建一个Hello World!的桌面应用程序:

直接贴上代码:里面包含有代码的具体解释,无论多么大,多么复杂的窗口软件,都是在这个基础上面增加的。

#include "stdafx.h"

#pragma comment(lib, "winmm")   //使用了该函数PlaySound,在winmm.lib

LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);  //声明窗口过程函数

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR     lpCmdline,
int       nCmdShow)
{
//声明一个窗口类
WNDCLASS wc = { 0 };
wc.hbrBackground = (HBRUSH)GetStockObject(COLOR_WINDOW + 1);   //该窗口类的背景
wc.hCursor = LoadCursor(NULL, IDC_ARROW);                      //光标
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);                    //图标
wc.hInstance = hInstance;                                      //实例化的句柄
wc.lpfnWndProc = WndProc;                                      //窗口过程函数
wc.lpszClassName = "HelloWin";                                 //窗口类名
wc.lpszMenuName = NULL;                                        //菜单栏的名称
wc.style = CS_HREDRAW | CS_VREDRAW;                            //窗口类的风格设置

//注册窗口类
if (!RegisterClass(&wc))         //注册窗口类
{
MessageBox(NULL,             //注册失败就弹出消息警告框
TEXT("注册窗口类失败"),
TEXT("HelloWin"),
MB_ICONEXCLAMATION
);

return 0;
}

//创建窗口类
HWND hWnd = CreateWindow("HelloWin",            //该窗口使用的窗口类的名称
"FirstWindows",        //窗口标题名
WS_OVERLAPPEDWINDOW,   //窗口风格
CW_USEDEFAULT,         //窗口左上角的横坐标(这里使用默认值)
CW_USEDEFAULT,         //窗口左上角的纵坐标(这里使用默认值)
CW_USEDEFAULT,			//窗口的宽度
CW_USEDEFAULT,			//窗口的高度
NULL,					//父窗口的句柄
NULL,                  //菜单的句柄
hInstance,				//窗口实例化的句柄
NULL	  //将WM_CREATE消息中通过的lParam传递给窗口的回调函数
);

//显示窗口
ShowWindow(hWnd, SW_SHOW);

//刷新窗口
UpdateWindow(hWnd);

//消息循环处理
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))  //获取消息
{
TranslateMessage(&msg);    //将虚拟键消息转换为字符消息。字符消息被发送到调用线程的消息队列,在下一次线程调用GetMessage或PeekMessage函数时读取
DispatchMessage(&msg);     //将消息分派给窗口过程。它通常用于分派由GetMessage函数检索的消息。
}

return msg.wParam;
}

LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)   //窗口过程函数的定义
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch (uMsg)
{
case WM_CREATE:           //创建时刻的消息
PlaySound(TEXT("Hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC);
break;
case WM_PAINT:            //描绘时刻的消息
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rect);
DrawText(hdc, TEXT("Hellow    愿意百年挽朝夕,    2017.11.12"), -1, &rect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:          //销毁窗口时刻的消息
PostQuitMessage(0);    //销毁的动作
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);    //当不是以上这些消息的时候,就会默认调用该函数处理
}

return 0;

}

再来一个运行成功的截图:


最后附上完整代码的项目:

链接:http://pan.baidu.com/s/1hs0908G 密码:74ne
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息