win32:第一个窗口程序-初始化实例(part.5)

在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 表示成功。

相关推荐

  1. win32:第一窗口程序-初始化实例(part.5)

    2024-07-14 12:14:02       28 阅读
  2. win32 窗口过程学习1

    2024-07-14 12:14:02       45 阅读
  3. 第一Rust程序

    2024-07-14 12:14:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 12:14:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 12:14:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 12:14:02       62 阅读
  4. Python语言-面向对象

    2024-07-14 12:14:02       72 阅读

热门阅读

  1. Flask与Celery实现Python调度服务

    2024-07-14 12:14:02       25 阅读
  2. `speech_recognition` 是一个流行的库

    2024-07-14 12:14:02       23 阅读
  3. 致十年后的自己

    2024-07-14 12:14:02       14 阅读
  4. 25秋招面试算法题 (Go版本)

    2024-07-14 12:14:02       25 阅读
  5. yii2 AssetBundle使用

    2024-07-14 12:14:02       25 阅读
  6. 如何使用IPython的并行计算能力处理大数据

    2024-07-14 12:14:02       24 阅读
  7. 如何定义版本号--语义化版本

    2024-07-14 12:14:02       22 阅读
  8. IOS热门面试题(一)

    2024-07-14 12:14:02       17 阅读
  9. Set和Map的用法

    2024-07-14 12:14:02       25 阅读
  10. 一阶低通滤波(IIR)

    2024-07-14 12:14:02       21 阅读
  11. 12_Shell流程控制

    2024-07-14 12:14:02       27 阅读