【发布时间】:2020-10-02 17:52:38
【问题描述】:
我正在尝试更改窗口图标,但是 main.cpp (hIcon != 0) 中的断言总是失败,我在项目解决方案的根目录中有一个 Icon.ico (128x128) 文件但仍然收到执行时出错。任何建议
main.cpp:
#include <windows.h>
#include <tchar.h>
#include "resource.h"
#include <crtdbg.h>
LRESULT CALLBACK WndProc (HWND hwnd, unsigned int msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CREATE:
{
HINSTANCE hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
HICON hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON1));
_ASSERTE (hIcon != 0);
SendMessage (hwnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
return 0;
}
case WM_COMMAND:
{
return 0;
}
case WM_DESTROY:
{
PostQuitMessage (0);
return 0;
}
}
return (DefWindowProc (hwnd, msg, wParam, lParam));
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevIns, LPSTR lpszArgument, int iShow)
{
TCHAR szClassName[] = _T("Template");
TCHAR szWindowName[] = _T("Template");
WNDCLASSEX wc = { 0 };
MSG messages;
HWND hWnd;
wc.lpszClassName = szClassName;
wc.lpfnWndProc = WndProc;
wc.cbSize = sizeof (WNDCLASSEX);
wc.hbrBackground = (HBRUSH)COLOR_BTNSHADOW;
wc.hInstance = hInstance;
_ASSERTE(RegisterClassEx (&wc) !=0);
hWnd = CreateWindowEx (0, szClassName, szWindowName, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
HWND_DESKTOP, 0, hInstance, 0);
_ASSERTE(::IsWindow(hWnd));
ShowWindow (hWnd, iShow);
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage (&messages);
DispatchMessage (&messages);
}
return static_cast<int>(messages.wParam);
}
resource.h:
#define IDI_ICON1 101
resource.rc:
#include "resource.h"
IDI_ICON1 ICON "Icon.ico"
【问题讨论】:
-
GetLastError()返回什么? -
@PaulSanders 它返回“端口(null)无法打开”这很奇怪,因为窗口更改了它的图标,但我不确定为什么会显示错误消息。
-
stackoverflow.com/questions/23852864/… 也许这会有所帮助?