
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.213.42] |
![]() |
|
Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Прикреплённая картинка
Не могу понять, почему самодельные иконки (которые сам нарисовал в фотошопе и сконвертировал в ico через Ico Converter) не прорисовываются в тулбаре на винде 7 и 8, а на десятке всё нормально, посмотрите прикрепленный скриншот (слева на вин-10, справа на вин-7). Хотя те же самые иконки нормально прорисовываются в окне буферов А и В ниже тулбара. Может кто подскажет почему так? Добавлено Почему-то несколько картинок прикрепилось... |
Сообщ.
#2
,
|
|
|
Можешь сделать синтетический пример с одним только тулбаром и выложить сюда?
|
Сообщ.
#3
,
|
|
|
Цитата Timon K @ Не могу понять, почему самодельные иконки (которые сам нарисовал в фотошопе и сконвертировал в ico через Ico Converter) не прорисовываются в тулбаре на винде 7 и 8 InitCommonControls() использовал ? |
Сообщ.
#4
,
|
|
|
Цитата Majestio @ Можешь сделать синтетический пример с одним только тулбаром и выложить сюда? Т.е. оставить часть своего кода без всего остального? Наверное смогу, но только как быстро, вот вопрос... Добавлено Цитата ЫукпШ @ InitCommonControls() использовал ? Нет |
Сообщ.
#5
,
|
|
|
Цитата ЫукпШ @ InitCommonControls() использовал ? Только тогда уж InitCommonControlsEx() |
Сообщ.
#6
,
|
|
|
Цитата Majestio @ Только тогда уж InitCommonControlsEx() Завтра на работе смогу попробовать, т.к. дома нет компьютеров со старой виндой. Но вот вопрос - почему иконка с дискетой (сохранение) работает без проблем? На скриншоте видно, что она полностью прорисована и там и там, да ещё и как в активном, так и выключенном состоянии. |
Сообщ.
#7
,
|
|
|
Какой размер у этих иконок? См. GetSystemMetrics(SM_CXICON / SM_CYICON)
|
Сообщ.
#8
,
|
|
|
Цитата macomics @ Какой размер у этих иконок? 16х16 |
Сообщ.
#9
,
|
|
|
Цитата Timon K @ Но вот вопрос - почему иконка с дискетой (сохранение) работает без проблем? На скриншоте видно, что она полностью прорисована и там и там, да ещё и как в активном, так и выключенном состоянии. Я вспомнил, начинал я когда-то проект на Си, но потом как-то забросил. Осталось на уровне заготовки. Сейчас проверил - у меня под виндой и 7, и 10 - все отрисовывается норм. Выглядит это пока так: Прикреплённая картинка
В общем, прикрепляю проект - полазь, посмотри, может чего интересного найдешь. Обрати внимание на то, как и что я написал в своей функции InitialiseCommonControls(). Прикреплённый файл ![]() Да, этот проект я собирал под MSYS2. А там GNU-шниые компиляторы. Поэтому, если под майкрософтскими компиляторам будет на что-то ругаться - просто удали, ну или найди соответствующее решение-замену. Хотя, там из этого только __attribute__((unused)) вроде. |
Сообщ.
#10
,
|
|
|
Применение InitCommonControlsEx() не помогло от слова совсем. Ничего не изменилось, к сожалению.
Сделал прям как в примере Majestio Попробовал подставить иконку, вытащенную из shell32 dll, она отображается нормально. Такое ощущение, что неправильно отображаются только мои самодельные иконки. Рисую неправильно? Ставлю только цвета, только совместимые с интернетом. |
Сообщ.
#11
,
|
|
|
Ниже мой код по созданию тулбара. Может какой стиль или ещё что-то упущено?
![]() ![]() HWND createToolBar(MY_GL_STR* myGlobData) { INITCOMMONCONTROLSEX icc; icc.dwSize = sizeof(INITCOMMONCONTROLSEX); icc.dwICC = ICC_BAR_CLASSES; InitCommonControlsEx(&icc); const DWORD dwStyle = WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT | TBSTYLE_LIST; const UWORD nBut{ 14 }; // количество кнопок(иконок). Линии тоже считаются HWND hTb; UINT i{ 0 }; static TBBUTTON but[nBut]; WCHAR txtBufA[] = TEXT("A"), txtBufB[] = TEXT("B"); if (myGlobData->hImgList) return 0; myGlobData->hImgList = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, nBut, 0); // Информация о кнопках but[i++].fsStyle = BTNS_SEP; but[i].iBitmap = I_IMAGENONE; but[i].idCommand = 0; but[i].fsState = 0; but[i].fsStyle = BTNS_SHOWTEXT & 0 | BTNS_AUTOSIZE; but[i++].iString = (INT_PTR)&txtBufA; but[i].iBitmap = ImageList_AddIcon((HIMAGELIST)myGlobData->hImgList, (HICON)myGlobData->hImgOp, NULL); but[i].idCommand = CM_FOPENA; but[i].fsState = 0; but[i++].fsStyle = TBSTYLE_BUTTON | BTNS_AUTOSIZE; but[i].iBitmap = ImageList_AddIcon((HIMAGELIST)myGlobData->hImgList, (HICON)myGlobData->hImgSa, NULL); but[i].idCommand = CM_FSAVEA; but[i].fsState = 0; but[i++].fsStyle = TBSTYLE_BUTTON | BTNS_AUTOSIZE; but[i].iBitmap = ImageList_AddIcon((HIMAGELIST)myGlobData->hImgList, (HICON)myGlobData->hImgDe, NULL); but[i].idCommand = CM_FCLEARA; but[i].fsState = 0; but[i++].fsStyle = TBSTYLE_BUTTON | BTNS_AUTOSIZE; but[i++].fsStyle = BTNS_SEP; but[i].iBitmap = I_IMAGENONE; but[i].idCommand = 0; but[i].fsState = 0; but[i].fsStyle = BTNS_SHOWTEXT | BTNS_AUTOSIZE; but[i++].iString = (INT_PTR)&txtBufB; but[i].iBitmap = ImageList_AddIcon((HIMAGELIST)myGlobData->hImgList, (HICON)myGlobData->hImgOp, NULL); but[i].idCommand = CM_FOPENB; but[i].fsState = 0; but[i++].fsStyle = TBSTYLE_BUTTON | BTNS_AUTOSIZE; but[i].iBitmap = ImageList_AddIcon((HIMAGELIST)myGlobData->hImgList, (HICON)myGlobData->hImgSa, NULL); but[i].idCommand = CM_FSAVEB; but[i].fsState = 0; but[i++].fsStyle = TBSTYLE_BUTTON | BTNS_AUTOSIZE; but[i].iBitmap = ImageList_AddIcon((HIMAGELIST)myGlobData->hImgList, (HICON)myGlobData->hImgDe, NULL); but[i].idCommand = CM_FCLEARB; but[i].fsState = TBSTATE_MARKED; but[i++].fsStyle = TBSTYLE_BUTTON | BTNS_AUTOSIZE; but[i++].fsStyle = BTNS_SEP; but[i].iBitmap = ImageList_AddIcon((HIMAGELIST)myGlobData->hImgList, (HICON)myGlobData->hImgSe, NULL); but[i].idCommand = CM_SSETTINGS; but[i].fsState = TBSTATE_ENABLED; but[i++].fsStyle = TBSTYLE_BUTTON | BTNS_AUTOSIZE; but[i++].fsStyle = BTNS_SEP; but[i].iBitmap = ImageList_AddIcon((HIMAGELIST)myGlobData->hImgList, (HICON)myGlobData->hImgHe, NULL); but[i].idCommand = CM_HHELP; but[i].fsState = TBSTATE_ENABLED; but[i].fsStyle = TBSTYLE_BUTTON | BTNS_AUTOSIZE; hTb = CreateToolbarEx(myGlobData->hWndMainW, dwStyle, ID_TOOLBAR, 0, HINST_COMMCTRL, IDB_STD_SMALL_COLOR, but, nBut, 0, 0, 0, 0, sizeof(TBBUTTON)); //IDB_STD_LARGE_COLOR if (!hTb) return 0; SendMessage(hTb, TB_SETIMAGELIST, 0, (LPARAM)myGlobData->hImgList); return hTb; } |
Сообщ.
#12
,
|
|
|
Цитата Timon K @ Такое ощущение, что неправильно отображаются только мои самодельные иконки. Рисую неправильно? Попробуй перерисовать иконки в другом редакторе. Хотя, можешь для теста прислать 2 иконки - которая норм отображается (из shell32 dll) и твою "неправильную" - присоедини их тут. Интересно. |
Сообщ.
#13
,
|
|
|
Открыть и с корзинкой это мои, они искажаются, с дискеткой на помню где взял, наверное готовый был, выглядит отлично везде.
Прикреплённый файл ![]() Прикреплённый файл ![]() Прикреплённый файл ![]() |
Сообщ.
#14
,
|
|
|
![]() ![]() $ hexdump -C Save.ico 00000000 00 00 01 00 01 00 10 10 00 00 01 00 04 00 28 01 |..............(.| 00000010 00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00 |......(....... .| 00000020 00 00 01 00 04 00 00 00 00 00 80 00 00 00 00 00 |................| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 80 00 00 00 00 80 00 00 80 80 00 00 00 00 |................| 00000050 80 00 80 00 80 00 00 80 80 00 c0 c0 c0 00 80 80 |................| 00000060 80 00 ff 00 00 00 00 ff 00 00 ff ff 00 00 00 00 |................| 00000070 ff 00 ff 00 ff 00 00 ff ff 00 ff ff ff 00 00 00 |................| 00000080 00 00 00 00 00 00 00 11 18 88 88 81 11 00 01 99 |................| 00000090 97 11 ff 71 19 10 01 99 9f 11 ff 71 19 10 01 99 |...q.......q....| 000000a0 9f 11 ff 71 19 10 01 99 97 f7 7f 71 19 10 01 99 |...q.......q....| 000000b0 99 99 99 99 99 10 01 99 99 99 99 99 99 10 01 9f |................| 000000c0 ff ff ff ff f9 10 01 9f ff ff ff ff f9 10 01 9f |................| 000000d0 f7 77 77 7f f9 10 01 9f ff ff ff ff f9 10 01 9f |.ww.............| 000000e0 f7 77 77 7f f9 10 01 9f ff ff ff ff f9 10 00 17 |.ww.............| 000000f0 77 77 77 77 71 00 00 00 00 00 00 00 00 00 ff ff |wwwwq...........| 00000100 00 00 c0 03 00 00 80 01 00 00 80 01 00 00 80 01 |................| 00000110 00 00 80 01 00 00 80 01 00 00 80 01 00 00 80 01 |................| * 00000130 00 00 80 01 00 00 c0 03 00 00 ff ff 00 00 |..............| 0000013e $ hexdump -C eraseA.ico 00000000 00 00 01 00 01 00 10 10 00 00 00 00 20 00 c5 00 |............ ...| 00000010 00 00 16 00 00 00 89 50 4e 47 0d 0a 1a 0a 00 00 |.......PNG......| 00000020 00 0d 49 48 44 52 00 00 00 10 00 00 00 10 08 06 |..IHDR..........| 00000030 00 00 00 1f f3 ff 61 00 00 00 01 73 52 47 42 00 |......a....sRGB.| 00000040 ae ce 1c e9 00 00 00 04 67 41 4d 41 00 00 b1 8f |........gAMA....| 00000050 0b fc 61 05 00 00 00 09 70 48 59 73 00 00 0e c3 |..a.....pHYs....| 00000060 00 00 0e c3 01 c7 6f a8 64 00 00 00 5a 49 44 41 |......o.d...ZIDA| 00000070 54 38 4f ad 8d c9 0d c0 30 0c c3 bc 53 f6 9f 2d |T8O.....0...S..-| 00000080 fd a8 ca 01 97 70 01 13 d0 27 a2 9c f8 62 c6 98 |.....p...'...b..| 00000090 7b f4 5c e7 d7 81 5b ae 46 f3 86 03 2d 64 3f 50 |{.\...[.F...-d?P| 000000a0 34 5b 64 12 45 b3 c5 5e dc 12 75 86 24 ea 0c 49 |4[d.E..^..u.$..I| 000000b0 d4 19 92 a8 33 24 51 67 48 a2 ce bc 45 35 9a 9d |....3$QgH...E5..| 000000c0 64 62 16 e9 1d 44 3c 3a 22 1c f2 1d eb d6 40 00 |db...D<:".....@.| 000000d0 00 00 00 49 45 4e 44 ae 42 60 82 |...IEND.B`.| 000000db Скрытый текст Формат ваших иконок отличается от формата используемого в виндовс (до обновления). Ваши иконки это PNG файлы внутри ICO, а винде нужны простые BMP. |
Сообщ.
#15
,
|
|
|
macomics, спасибо за пояснение, никогда бы до такого не додумался. Но опять же вопрос - а почему ровно эти же иконки корректно отображаются вне тулбара? И второй - как тогда сделать иконку по старым "понятиям"? Конвертировать рисунок из bmp? Но в нём нет прозрачности...
|