Я создал базовое приложение с Windows API. Это просто отображает небольшое окно. Я начинаю с основной функции, получаю экземпляр, создаю свой класс Windows и т. Д. Все работает нормально. Однако проблема, с которой я столкнулся, заключается в том, что мой пользовательский значок не будет отображаться в верхнем левом углу окна или на панели задач, он просто показывает изображение окна по умолчанию. Тем не менее, он отображается как значок для моего exe-файла, который можно щелкнуть мышью. Я использовал resedit для создания своих ресурсов и создал все 4 размера иконок, чтобы у них был один доступный размер. Я получил ручку с
HICON hMyIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
Затем я использовал WNDCLASSEX и дал дескриптор hIcon и hIconsm.
Если что-то может привести к тому, что оно не появится в углу или на панели задач, помогите.
#include <Windows.h>
#include <iostream>
#include "resource.h"
//globals
MSG msg;
HWND hwndwnd;
HICON hMyIcon;
//Windows Procedure
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam )
{
switch ( message )
{
case WM_CLOSE:
exit( 0 );
break;
case WM_CREATE:
SendMessage(hwndwnd,WM_SETICON,ICON_SMALL,(LPARAM)hMyIcon);
break;
}
return DefWindowProc( hwnd, message, wparam, lparam );
}
int main(int ArgumentNum, char *arg[])
{
//get instance
char title[500];
GetConsoleTitleA( title, 500 );
HWND hwndConsole = FindWindowA( NULL, title );
HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hwndConsole, GWLP_HINSTANCE);
//get icon handle
hMyIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
if (hMyIcon == NULL)
{
std::cout<< "NULL\n";
}
//create & register class
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_DROPSHADOW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = hMyIcon;
wc.hCursor = LoadCursor(hInstance, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
wc.lpszMenuName = 0;
wc.lpszClassName = "Jacob";
wc.hIconSm = hMyIcon;
RegisterClassEx(&wc);
//create window
hwndwnd = CreateWindow("Jacob", "My Window",
WS_OVERLAPPEDWINDOW, 520, 20, 300, 300, NULL, NULL, hInstance, NULL);
//Tried sendmessage here as well
//SendMessage(hwndwnd,WM_SETICON,ICON_SMALL,(LPARAM)hMyIcon);
ShowWindow( hwndwnd, SW_SHOWNORMAL);
UpdateWindow( hwndwnd );
//hide console, not using to see if icon is null
//ShowWindow( hwndConsole, 0 );
//message loop
while(GetMessage( &msg, hwndwnd, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
Это мой исходный код. Что я начинаю удивляться, так это то, что моя проблема связана с моими ресурсами. Когда я использовал resedit, я помешал икону любого возможного размера. Надеюсь, что это помогает, и спасибо за терпение.