WIN32窗口创建过程:
1、定义窗口类(在MSDN中找到函数原型:WinMain())
2、定义窗口处理函数(在MSDN中找到原型:WindowProc)
3、设计窗口类
4、注册窗口类(RegisterClass/RegisterClassEx)
5、创建窗口(CreateWindow/CreateWindowEx)
6、显示和更新窗口(ShowWindow、UpdateWindow)
7、消息循环
示例代码(自己手敲的):
//窗口创建过程:
//1.定义WinMain函数
//2.定义窗口处理函数
//3.设计窗口类
//4.注册窗口
//5.显示和更新窗口
//6.消息循环
#include <Windows.h>
HINSTANCE g_Instance;
LRESULT CALLBACK MyWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
void CreateWin()
{
//设计窗口类
WNDCLASSEX wc = { 0 };
wc.cbClsExtra = 0;
wc.cbSize = sizeof(wc);
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.hCursor = NULL;
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hInstance = g_Instance;
wc.lpfnWndProc = MyWinProc;
wc.lpszClassName = __TEXT("MyWin");
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
//注册窗口类
ATOM at = RegisterClassEx(&wc);
if (0 == at)
return;
//创建窗口
HWND hWnd = CreateWindowEx(0, __TEXT("MyWin"), __TEXT("哈喽"), WS_OVERLAPPEDWINDOW, 20, 20, 200, 300, NULL, NULL, g_Instance, NULL);
if (NULL == hWnd)
return;
//显示窗口
if (ShowWindow(hWnd, SW_SHOW))
return;
UpdateWindow(hWnd);
//消息循环
MSG ms = { 0 };
while (GetMessage(&ms, NULL, 0, 0))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
}
//利用系统窗口类创建一个button
void MySysWin()
{
//系统窗口类不需要设计、注册,直接创建
HWND hWnd = CreateWindowEx(0, __TEXT("button"), __TEXT("哈喽"), WS_OVERLAPPEDWINDOW, 30, 40, 300, 400, NULL, NULL, g_Instance, 0);
if (NULL == hWnd)
return;
if (ShowWindow(hWnd, SW_SHOW))
return;
UpdateWindow(hWnd);
MSG ms = { 0 };
while (GetMessage(&ms, NULL, 0, 0))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
g_Instance = hInstance;
//CreateWin();
MySysWin();
return 0;
}