C Win32:小图标不';不显示

C Win32:小图标不';不显示,c,winapi,loadimage,C,Winapi,Loadimage,我正在学习Win32编程 我使用LoadImage(…)设置窗口的小图标,但它似乎不起作用,我无法确定问题所在 void AddIcons(HWND hw) { HICON hi = LoadImage(NULL, "ICON.bmp", IMAGE_BITMAP, 16, 16, LR_LOADFROMFILE); printf("Icon initialized\n"); if(hi) { printf("%x\n", hi);

我正在学习Win32编程 我使用LoadImage(…)设置窗口的小图标,但它似乎不起作用,我无法确定问题所在

void AddIcons(HWND hw)
{
    HICON hi = LoadImage(NULL, "ICON.bmp", IMAGE_BITMAP, 16, 16, LR_LOADFROMFILE);

    printf("Icon initialized\n");

    if(hi)
    {
        printf("%x\n", hi);
        SendMessage(hw, WM_SETICON, ICON_SMALL, (LPARAM)hi);
    }

}
和windows程序:

LRESULT CALLBACK WndProc(HWND handle, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_SETICON: printf("REQUEST RECEIVED\n");
    }
.
.  // AddIcons() is called here
.  // DefWindowProc() handles the message at the end
}
我收到了所有三条打印语句,包括收到的
请求

但是,图标仍然是默认设置。问题出在哪里

我知道我可以使用保留资源文件和使用LoadIcon(..),但我更喜欢用编程的方式做每件事。这引出了第二个问题:

使用资源(.rc)文件可以完成的所有事情都可以通过编程方式完成吗?
如果是这样,一种方法是否天生优于另一种方法?

WM\u SETICON
仅接受图标格式,当
使用
图像位图加载图像时,仅创建位图。所以,一定是错误。我也尝试过使用“.ico”文件和“IMAGE_ICON”。即使你在这里描述的很好,它也不起作用。@DavidHeffernan它并不不幸我在问题中添加了一个图像