Друзья! У Айзелиона что-то я не нашёл. ...А вообще вот код из его третьего туториала, переделанный на Си. Создаёт простое окно (кстати, почему-то в редакторе сообщений нет тэга для кода, как так?) Спойлер: тут код на Си #include <windows.h> LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); char ClassName []= "SimpleWinClass"; char AppName []= "Our First Window"; //У айзелиона это есть, а тут оказалось ненужным //Но по идее не нужны, но оставлю уж HINSTANCE hInstance; LPSTR CommandLine; //+++++++++++++++++++++++++++++++++ int WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR CmdLine, int CmdShow) { hInstance= hInst; CommandLine= CmdLine; //структуры WNDCLASSEX wc; MSG msg; HWND hwnd; //инициализация; wc.cbSize= sizeof (WNDCLASSEX); wc.style= CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc= WndProc; wc.cbClsExtra= 0; wc.cbWndExtra= 0; wc.hInstance= hInst; wc.hbrBackground= (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName= 0; wc.lpszClassName= ClassName; wc.hIcon= LoadIcon (NULL,IDI_APPLICATION); wc.hIconSm= 0; //здесь тоже правильно всё wc.hCursor= LoadCursor (NULL,IDC_ARROW); RegisterClassEx (&wc); hwnd= CreateWindowEx (0, ClassName,AppName,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\ hInst,NULL); ShowWindow (hwnd,SW_SHOWNORMAL); UpdateWindow (hwnd); while (true) { if (!GetMessage (&msg,NULL,0,0)) break; TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } //+++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++ //hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg==WM_DESTROY) PostQuitMessage (0); else return DefWindowProc (hWnd,uMsg,wParam,lParam ); return 0; } Так, и вот там простая такая строчка есть с комментариями: wc.hIcon= LoadIcon (NULL,IDI_APPLICATION); hIcon: Хэндл иконки. Получите его функцией LoadIcon. Что, я собствено и делаю. Я создаю иконку она в файле kas.ico. Файл kas.ico лежит в той же диектории, что и исходный файл win_i.cpp. ПОтом всё это дело компилю (mingw). Спойлер: вот так я всё это дело компилю windres -o MENU.o MENU.rc g++ win_i.cpp MENU.o -o win_i.exe -mwindows -static del MENU.o В результате у меня получается экзешник win_i.exe с заявленной иконкой (видно в проводнике). Но когда я его запускаю, появляется окно БЕЗ ИКОНКИ, а надо, чтобы было с иконкой ЧЯДНТ? На всякий случай прикрепляю kas.ico. http://fayloobmennik.cloud/7102429 (по-другому не прикрепляется) Спасибо, кто откликнется.
amvoz, Значит загрузка иконки прошла с ошибкой и это должен сообщить результат выполнения апи, конечно же необходимо проверять как завершается любая апи.
Да, надо было сперва посмотреть,загрузилась иконка с ошибкой или без! В общем, решилось пока так: 1) Инициализируем структуру по простому, без изысков: wc.hIcon= LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm= wc.hIcon; 2) Так, а потом при создании окна делаем так: if (uMsg==WM_CREATE) { HICON hicon= LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE (MAIN_ICON)); SendMessage (hWnd, WM_SETICON, 1, (LPARAM)hicon); } (Это я посмотрел здесь) ++++++++++++++++++++++++++++++++++++++++++++++++ Теперь ещё необходимо определить макрос MAIN_ICON в двух местах. В файле MENU.rc пишем: #define MAIN_ICON 11111 MAIN_ICON ICON "kas.ico" Ну и в файле win_i.cpp то же самое: MAIN_ICON ICON "kas.ico" ...Всё ж таки, есть тут тэги оформления кода или нет?
А можно, оказывается, при создании окна ничего не не делать, а структуру заполнить так: wc.hIcon= LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE (MAIN_ICON)); wc.hIconSm= wc.hIcon; (ну и макрос MAIN_ICON определить в в двух местах не забыть!)
Ну надо же. Кто бы мог подумать?.. Тоько в cpp надо не Код (C): MAIN_ICON ICON "kas.ico" а Код (C): #define MAIN_ICON 11111 А еще лучше дефайн объявить в resource.h и в rc и cpp написать Код (C): #include "resource.h"
amvoz, Да просто вываливай километровые листинги как есть, модеры ночью придут и приведут в порядок пост. Им это нравится, ведь как иначе объяснить то, что до сих пор не запилили кнопку, обрамляющую выделение тегами [ code ] [/ code ] при нажатии?..