Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 21.03.2010
Сообщений: 10
1

Цвет клиентской области окна

10.05.2010, 18:49. Показов 2577. Ответов 1
Метки нет (Все метки)

Доброго времени суток.
Вообще я хочу правильно раскрасить окно при нажатии мышки.
Код из главной оконной процедуры:

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
       HBRUSH      hBrush;
        HDC         hdc;
        PAINTSTRUCT ps;
        RECT        rc;
 
// Если писать так, то окно не красится в зеленый цвет при двойном щелчке
case WM_LBUTTONDBLCLK :
{
     hdc = BeginPaint (hWnd, &ps);
     GetClientRect (hWnd, &rc);
     hBrush = CreateSolidBrush (g_Green);    // COLORREF g_Green = RGB(0,255,0);
     FillRect (hdc, &rc, hBrush);
     EndPaint (hWnd, &ps);
     DeleteObject (hBrush);
                
     return 0;
     break;
}
 
// Если писать так, то окно уже зеленое, без кликов
case WM_PAINT:
{
    case WM_LBUTTONDBLCLK :
    {
         hdc = BeginPaint (hWnd, &ps);
         GetClientRect (hWnd, &rc);
         hBrush = CreateSolidBrush (g_Green);    // COLORREF g_Green = RGB(0,255,0);
         FillRect (hdc, &rc, hBrush);
         EndPaint (hWnd, &ps);
         DeleteObject (hBrush);
                
         return 0;
         break;
    }
    return 0;
    break;
}
Не знаю что делать, надо чтоб при нажатии менялся цвет, а не сразу.

Добавлено через 4 часа 39 минут
Может есть другой способ смены цвета окна по щелчку мыши ?
Если он есть, можете поделиться секретом
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2010, 18:49
Ответы с готовыми решениями:

Как получить размеры клиентской области окна-родителя в функции дочернего окна?
задание такое: имеется дочернее окно,которое "убегает" от курсора мыши в пределах родительского...

Как поменять цвет клиентской области?
FillRect почему-то вне WM_PAINT не работает. спасибо

Как установить цвет фона клиентской области без WM_PAINT
а, WM_CTLCOLORSTATIC вызывается только для дочерних элементов

Win32 wm_ncpaint. Глюки в клиентской области окна
Делаю интерфейс нужно сделать как photoshop на VS win32 без NET библиотек. так вот не клинская...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
1
1 / 1 / 1
Регистрация: 27.04.2010
Сообщений: 10
11.05.2010, 16:32 2
Ну вот как-то так.

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
#include <windows.h>
 
 
//объявление функций
BOOL RegClass(WNDPROC,LPCSTR,UINT);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 
//описание глобальных переменных
HINSTANCE hInstance;
char szClassName[]="MenuTool";
 
//описание главной функции
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
    MSG msg;
    HWND hwnd;
    hInstance=hInstance;
    if(!RegClass(WndProc,szClassName,COLOR_WINDOW))
        return FALSE;
    hwnd = CreateWindow(szClassName, "Приложение",WS_OVERLAPPEDWINDOW|WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,640,480,0,0,hInstance,NULL);
    if(!hwnd) return FALSE;
    while(GetMessage(&msg,0,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
    return msg.wParam;
}
 
//описание функции регистрации классов
BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)
{
        WNDCLASS wc;
        wc.style = CS_VREDRAW|CS_DBLCLKS; //значения из табл 1.1
        wc.cbClsExtra=wc.cbWndExtra=0;
        wc.lpfnWndProc = Proc;
        wc.hInstance = hInstance;
        wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(brBackground + 1);
        wc.lpszMenuName = NULL;
        wc.lpszClassName = szName;
        return(RegisterClass(&wc) != 0);
}
 
 
 
 
//описание функции окон
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch(msg)
    {
    case WM_LBUTTONDBLCLK:
        {
            HDC hdc = GetDC(hwnd);
            HBRUSH green = CreateSolidBrush(RGB(0,255,0));
            SelectObject(hdc,green);
            Rectangle(hdc,0,0,640,480);
            ReleaseDC(hwnd, hdc);
            return 0;
        }
    case WM_DESTROY:{PostQuitMessage(0); return 0;}
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2010, 16:32

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

Как помимо сообщения WM_SIZE получить размеры клиентской области окна?
Как помимо сообщения WM_SIZE получить размеры клиенсткой области окна?

Рост и полет мыльного пузыря в клиентской области окна с использованием метафайлов
Привет, форумчане. Срочно нужна помощь по лабораторной на С ++ WinAPI на завтра. Сам сделать никак...

Перетаскивание кнопки по клиентской области
хочу сделать чтобы можно было при зажатии левой кнопки мышки на кнопке я мог бы ее переносить по...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.