win32如何为button设置图片(button自定义图标)

win32创建的按钮默认是没有图片的,也就是默认的系统风格,如图:

自定义按钮图标的大致步骤

第一步:创建按钮时style添加BS_BITMAP或BS_ICON。

第二步:发送BM_SETIMAGE消息指定图标。

自定义图标支持的图标格式

  • icon图标
  • bitmap位图

设置ICON为图标的代码和演示

HWND hbutton = ::CreateWindow(WC_BUTTON, L"按 钮", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_ICON,
  100, 100, 100, 30, hWnd, (HMENU)99, (HINSTANCE)::GetWindowLong(hWnd, GWL_HINSTANCE), nullptr);
if (hbutton) {
  HICON hicon = (HICON)::LoadImage(
    hInst,
    MAKEINTRESOURCE(IDI_SMALL),
    IMAGE_ICON,
    GetSystemMetrics(SM_CXSMICON),
    GetSystemMetrics(SM_CYSMICON),
    LR_DEFAULTCOLOR);
  if (hicon)
    ::SendMessage(hbutton, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hicon);
}

设置BITMAP为图标的代码和演示

HWND hbutton = ::CreateWindow(WC_BUTTON, L"按 钮", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_BITMAP,
  100, 100, 100, 30, hWnd, (HMENU)99, (HINSTANCE)::GetWindowLong(hWnd, GWL_HINSTANCE), nullptr);
if (hbutton) {
  HBITMAP hbitmap = (HBITMAP)::LoadImage(
    hInst,
    MAKEINTRESOURCE(IDI_SMALL),
    IMAGE_ICON,
    0,
    0,
    LR_DEFAULTCOLOR);
  if (hbitmap)
    ::SendMessage(hbutton, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbitmap);
}