Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
1

Что-то не получается с ImageList и LoadImage, поведение курсора и собственнонарисованные окна

06.07.2014, 00:43. Показов 1180. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
1. Нужно установить в таб контрол иконки. Иконки 16 на 16, все в PNG в ресурс-файле с прозрачностью. Пробую
C++
1
2
3
4
#define PNG_TAB0 IDB_PNG1
...
hil = ImageList_Create(16, 16, ILC_COLOR32, 3, 0);
ImageList_Add(hil, (HBITMAP)LoadImage(hinst, MAKEINTRESOURCE(PNG_TAB0), IMAGE_BITMAP, 0, 0, 0), 0);
Проблема в том, что LoadImage возвращает 0, hil не равен 0, а при установки этого самого листа в таб контрол появляются отступы без изображений. Пытался склеить все картинки в одну линейку, склеил, вызвал
C++
1
2
HIMAGELIST hil;
hil = ImageList_LoadImage(hinst, MAKEINTRESOURCE(PNG_TAB0), 16, 0, CLR_DEFAULT, IMAGE_BITMAP, 0);
И она возвращает 0. Создавал ресурс файл, Add resource -> Import, include'ил resource.h. Все битмапы лежат по своим путям, пробовал даже запускать студию от имени администратора. Весь код до создания листа:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#pragma comment(lib, "comctl32.lib")
 
#include <stdio.h>
#include <windows.h>
#include <commctrl.h>
#include "resource.h"
 
#define PNG_TAB0 IDB_PNG1
#define PNG_TAB1 IDB_PNG2
#define PNG_TAB2 IDB_PNG3
 
HFONT hfont;
 
HWND hwnd, hTabControl, hBtnCreate, hListView[3];
HINSTANCE hinst;
HIMAGELIST hil;
HBITMAP hb;
int g;
 
LVITEM lvi;
TCITEM tci;
 
LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp);
void CreateWindows(int &X, int &Y);
void CreateColumns(LVCOLUMN &lvc);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
    WNDCLASSEX wcex;
    RECT srect;
    int X, Y;
    MSG msg;
    LVCOLUMN lvc;
 
    hinst = hInstance;
 
    memset(&lvc, 0, sizeof(LVCOLUMN));
    memset(&lvi, 0, sizeof(LVITEM));
    memset(&tci, 0, sizeof(TCITEM));
 
    hf = CreateFont(14, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_MODERN | FIXED_PITCH, L"Microsoft Sans Serif");
 
    InitCommonControls();
 
    GetWindowRect(GetDesktopWindow(), &srect);
    X = srect.right;
    Y = srect.bottom;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.cbWndExtra = 0;
    wcex.cbClsExtra = 0;
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.hCursor = 0;
    wcex.hIcon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON1));
    wcex.hIconSm = LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON1)); // Их загружает без проблем
    wcex.hInstance = hinst;
    wcex.hbrBackground = (HBRUSH)5;
    wcex.lpfnWndProc = WndProc;
    wcex.lpszMenuName = 0;
    wcex.lpszClassName = L"asdf";
 
    if (!RegisterClassEx(&wcex)){
        MessageBox(0, 0, 0, 0);
        return 1;
    }
 
    hwnd = CreateWindowEx(
        0,
        L"asdf",
        L"TabControl",
        WS_CLIPCHILDREN  | WS_CAPTION | WS_OVERLAPPEDWINDOW,
        X / 2 - 350, Y / 2 - 200,
        700, 400,
        0,
        0,
        hinst,
        0
        );
 
    GetClientRect(hwnd, &srect);
    X = srect.right;
    Y = srect.bottom;
 
    CreateWindows(X, Y);
 
    // IMAGELIST
 
    hil = ImageList_Create(16, 16, ILC_COLOR32, 3, 0);
    ImageList_Add(hil, (HBITMAP)LoadImage(hinst, MAKEINTRESOURCE(PNG_TAB0), IMAGE_BITMAP, 0, 0, 0), 0);
    ImageList_Add(hil, (HBITMAP)LoadImage(hinst, MAKEINTRESOURCE(PNG_TAB1), IMAGE_BITMAP, 0, 0, 0), 0);
    ImageList_Add(hil, (HBITMAP)LoadImage(hinst, MAKEINTRESOURCE(PNG_TAB2), IMAGE_BITMAP, 0, 0, 0), 0);
    wchar_t buf[16];
    int p;
    _itow(ImageList_GetImageCount(hil), buf, 10);
    MessageBox(0, buf, 0, 0); // Говорит 0
    if (!LoadImage(hinst, MAKEINTRESOURCE(PNG_TAB0), IMAGE_BITMAP, 0, 0, 0)) MessageBox(0, 0, 0, 0);
    if (!hil) MessageBox(0, 0, L"hil = 0", 0);


2. Курсор ведет себя странно (см.вложение) Что с ним может быть?
3.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
case WM_DRAWITEM:
        DRAWITEMSTRUCT dis;
        dis = *(DRAWITEMSTRUCT *)lp;
        HBRUSH hbr;
        RECT rt;
 
        switch (dis.CtlType){
        case ODT_BUTTON:
            if (LOWORD(wp) == BTN_ADD){
                wchar_t txt[64];
                int l;
                SetTextColor(dis.hDC, RGB(255, 255, 0));
                SetBkColor(dis.hDC, RGB(255, 0, 0));
                l = SendMessage(dis.hwndItem, WM_GETTEXT, 63 * 2, (LPARAM)txt);
                hbr = CreateSolidBrush(RGB(255, 0, 0));
                FillRect(dis.hDC, &dis.rcItem, hbr);
                TextOut(dis.hDC, dis.rcItem.right / 2, 0, txt, l);
            }
            break;
 
        default:
            break;
        }
        break;
3.1. Как автоматически расположить текст посередине длины и ширины?
3.2. Как рисовать кнопку по-другому в зависимости от ее состояния (hover, disabled, pressed)?
Изображения
 
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2014, 00:43
Ответы с готовыми решениями:

Не получается использовать свойство TreeView.ImageList
Пытаюсь использовать пример от Microsoft для создания TreeView с иконками и чекбоксами...

Как сделать анимацию прозрачности окна при наведении курсора мыши и его ухода с окна
Я сделал так (из класса убрал всё лишнее, только по теме оставил): using System; using...

Поведение курсора опережает мысль....
Уважаемые пользователи ноутбуков! Как Вы решили проблему - стоит только курсор навести на...

Поведение курсора во время паузы
Доброе время суток. столкнулся с проблемой - мне не нравится поведение курсора, конкретнее - как он...

1
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
09.07.2014, 18:53  [ТС] 2
Насчет 3.1 пункта разобрался, надо использовать DrawText(), а вот насчет 3.2 - не полностью. Макросы itemState почему-то не соответствуют действительности, пришлось в ветке default выводить их значения и подставлять в caseы. Получил состояния pressed, default и focus. Остальные вообще не приходят.
0
09.07.2014, 18:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2014, 18:53
Помогаю со студенческими работами здесь

Странное поведение курсора мыши в играх
При запуске любой игры на Windows 7, курсор начинает как бы прилипать к камере и перемещать её...

Странное поведение курсора при расвертывании ComboBox
делаю выпадающий список, но странное поведение заметил когда я его раскрываю ComboBox1-&gt;DroppedDown...

Особое поведение курсора при взаимодействии объекта с мышкой
Добрый вечер. Хочу создать событие курсора hover(это как в css). В AS есть событие Over, но это...

Не получается убрать белую рамку и вид окна в дизайнере не соответсвует реальному виду окна после запуска программы
Делал свой простенький Splash Screen с прогресс баром. В 2012-ой студии под Windows 8 все было ок....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru