在part.5部分我们接着来记录一下这个模板中的初始化实例函数,这个函数主要负责创建主窗口并显示它;废话不多说,代码如下:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 将实例句柄存储在全局变量中
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
函数声明部分
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
从函数声明中可以判断处该函数定义了 InitInstance
,它返回一个布尔值,并接受两个参数:hInstance
:当前实例的句柄,nCmdShow
:控制窗口显示方式的标志。
函数体部分
hInst = hInstance; // 将实例句柄存储在全局变量中
将传入的实例句柄 hInstance
存储在全局变量 hInst
中。这通常用于在其他地方访问该实例句柄,在将实例句柄存储在全局变量后进行主窗口创建:
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
调用 CreateWindowW
函数创建主窗口,szWindowClass
:窗口类名;szTitle
:窗口标题;WS_OVERLAPPEDWINDOW
:窗口样式,表示一个具有标题栏、边框和系统菜单的重叠窗口;CW_USEDEFAULT
:默认的初始水平位置;0
:初始垂直位置;CW_USEDEFAULT
:默认的初始宽度;0
:初始高度。nullptr
:无父窗口或所有者;nullptr
:无菜单,hInstance
:当前实例的句柄,nullptr
:无附加参数。
CreateWindowW
函数是 Windows API 用于创建窗口或控件的函数。其原型定义如下:
HWND CreateWindowW(
LPCWSTR lpClassName, // 窗口类名或注册的窗口类的类名
LPCWSTR lpWindowName, // 窗口名称(窗口标题)
DWORD dwStyle, // 窗口风格
int x, // 窗口初始水平位置
int y, // 窗口初始垂直位置
int nWidth, // 窗口宽度
int nHeight, // 窗口高度
HWND hWndParent, // 父窗口或拥有者窗口的句柄
HMENU hMenu, // 菜单句柄或子窗口的标识符
HINSTANCE hInstance, // 应用程序实例的句柄
LPVOID lpParam // 指向创建窗口的附加参数的指针
);
创建窗口成功则返回新创建窗口的句柄,如果窗口创建失败,返回值为 nullptr
;若创建窗口失败则返回false。
if (!hWnd)
{
return FALSE;
}
创建窗口成功后执行以下代码:
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
调用 ShowWindow
函数显示窗口;hWnd
:窗口的句柄、nCmdShow
:控制窗口显示方式的标志(通常在 WinMain
函数中传递)。
UpdateWindow(hWnd);
:调用 UpdateWindow
函数更新窗口的客户区;最后返回True。
总结
InitInstance
函数的作用是在应用程序启动时初始化实例,创建主窗口,并显示它。如果窗口创建失败,函数返回 FALSE
,否则返回 TRUE
表示成功。