使用C与原始Win32设置按钮图标

时间:2015-03-12 13:01:32

标签: c windows winapi win32gui

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

我准备了一个尺寸合适的.ico文件(16x16像素),我按照以下步骤准备:

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

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

    ICON_FOLDER ICON "folder.ico"
    
  • 我在相应的对话框资源中定义了我的按钮,指定了BS_ICON样式(MODEL_SEARCH也是资源头中定义的资源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资源的图标是正确显示。

1 个答案:

答案 0 :(得分:2)

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