一.入口函数: int WINAPI WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevhInstance,
LPSTR cmdLine, int showCmd)
1.第一个参数 hinstance:实例句柄
2.第二个参数 prevhInstance:先前实例句柄
3.第三个参数 cmdLine:命令行(为远指针)
4.第四个参数 showCmd:指定窗口如何显示
参数 | 值 | 意义 |
---|---|---|
SW_HIDE | 0 | 隐藏此窗口并激活另一个窗口 |
SW_MAXIMIZE | 3 | 最大化指定的窗口 |
SW_MINIMIZE | 6 | 最小化指定的窗口并激活当前次序中顶部的窗口 |
SW_RESTORE | 9 | 激活并显示此窗口,如果窗口已经最小化或最大化,系统会恢复它到原始的尺寸和位置,一个应用程序应该在恢复最小化的窗口时指定此SW_RESTORE标识 |
SW_SHOW | 5 | 以当前的尺寸和位置激活与显示指定窗口 |
SW_SHOWMAXIMIZED | 3 | 最大化激活并显示这个窗口 |
SW_SHOWMINIMIZED | 2 | 最小化激活并显示这个窗口 |
SW_SHOWMINNOACTIVE | 7 | 最小化显示这个窗口,与SW_SHOWMINIMIZED唯一的区别是不会去激活指定的窗口 |
SW_SHOWNA | 8 | 以当前的尺寸和位置激活与显示指定窗口,与SW_SHOW的唯一区别是不会去激活指定的窗口 |
SW_SHOWNOACTIVATE | 4 | 显示一个窗口,若指定的窗口是最小化或者最大化的,系统将恢复其到原始尺寸和位置,与SW_SHOWNORMAL的唯一区别是不会去激活指定的窗口 |
SW_SHOWNORMAL | 1 | 激活并显示一个窗口,若指定的窗口是最小化或者最大化的,系统将恢复其到原始尺寸和位置。一个应用程序应该在第一次显示窗口的时候指定这个标识 |
二.初始化窗口类
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;//窗口风格
wc.lpfnWndProc = MainWndProc;//窗口回调
wc.cbClsExtra = 0;//窗口类附加内存
wc.cbWndExtra = 0;//窗口附加内存
wc.hInstance = m_hAppInst;//实例句柄
wc.hIcon = LoadIcon(0, IDI_APPLICATION);//图标句柄
wc.hCursor = LoadCursor(0, IDC_ARROW);//光标句柄
wc.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);//背景画刷句柄
wc.lpszMenuName = 0;//菜单名字
wc.lpszClassName = L"D3DWndClassName";//窗口类名
1.LoadIcon函数:
2.LoadCursor函数:
3.GetStockObject函数:
三.注册窗口类
if (!RegisterClass(&wc))
{
MessageBox(0, L"RegisterClass Failed.", 0, 0);
return false;
}
四.初始化视口大小
RECT R = { 0, 0, m_ClientWidth, m_ClientHeight };
AdjustWindowRect(&R, WS_OVERLAPPEDWINDOW, false);
int width = R.right - R.left;
int height = R.bottom - R.top;
五.创建窗口
m_hMainWnd = CreateWindow(L"D3DWndClassName", m_MainWndCaption.c_str(),
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, width, height
, 0, 0, m_hAppInst, 0);
if (!m_hMainWnd)
{
MessageBox(0, L"CreateWindow Failed.", 0, 0);
return false;
}
六.显示和更新窗口
ShowWindow(m_hMainWnd, SW_SHOW);
UpdateWindow(m_hMainWnd);