c - 使用 C 和原始 Win32 设置按钮图标

标签 c windows winapi win32gui

我正在使用纯 C(无 MCF)使用原始 Win32 API 构建一个带有一些简单对话框的 GUI。 在其中一个对话框中,我想显示一个带有图标(一个小文件夹)而不是文本的按钮。

我准备了一个大小合适(16x16 像素)的 .ico 文件,然后进行如下操作:

  • 我已经在资源头文件中定义了图标资源:

     #define ICON_FOLDER 901
    
  • 我已将名为 folder.ico 的图标放在资源脚本的同一文件夹中,并在其中加载了图标资源:

    ICON_FOLDER ICON "folder.ico"
    
  • 我在指定 BS_ICON 样式的相应对话框资源中定义了我的按钮(MODEL_SEARCH 也是在资源 header 中定义的资源 ID):

    CONTROL "", MODEL_SEARCH, "button", BS_PUSHBUTTON | BS_ICON | WS_TABSTOP | WS_VISIBLE | WS_CHILD,   300, 8, 18, 18
    
  • 在 GUI 代码中,当构建包含按钮的对话框时,我尝试在对话框过程的开头加载图标,然后尝试在 WM_INITDIALOG< 的情况下设置图标 分别使用以下两段代码:

    HICON folderico=LoadIcon(NULL,MAKEINTRESOURCE(ICON_FOLDER));
    

    SendMessage(GetDlgItem(hwnd,MODEL_SEARCH),BM_SETIMAGE, (WPARAM)IMAGE_ICON,(LPARAM)folderico);
    

它不起作用,显示了按钮但没有显示图标

我尝试做一些更改,例如,如果我使用最后两行代码来设置默认图标之一,例如 IDI_APPLICATION 一个,对应于 IDI_APPLICATION 的图标 资源已正确显示。

最佳答案

您应该将 GetModuleHandle(NULL) 传递给 LoadIcon 的第一个参数。如果要加载标准 Windows 图标,您只想对第一个参数使用 NULL。

关于c - 使用 C 和原始 Win32 设置按钮图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29010535/

相关文章:

检查输入的号码并询问,直到他输入号码

c - 在 gcc 的内联 asm 中使用 printf 函数

windows - 在您自己的应用程序中直观地包含另一个应用程序

c - win32在移植c代码时alarm,bzero,bcopy有什么替代方案

c# - 适用于 Windows 和 Windows Mobile 的通用 C# 源代码

CORDIC 反正弦实现失败

c++ - 如何填充椭圆形状?

c - 如何找到我用C语言编写的程序所需的最低系统要求?

windows - 如何安排任务在关闭窗口时运行

c - 使用 Win32 API 安全删除 USB 驱动器?