Регистрация: 12.11.2009
Сообщений: 4
|
проблемы с WM_CTLCOLOREDIT
есть окошко с полями ввода и кнопками. при нажатии трёх из 5 кнопок текст из первого edit`a должен копироваться во второй edit, но с изменениями. через WM_CTLCOLOREDIT мне удаётся изменить только один обработчик, дальше ничего не получатся. хотел вызов сообщения каждый раз устроить, но компилятор послал меня. если кто-то будет так добр - объясните где-как разобраться с цветами. мне просто бы добавить ещё один цвет. в смысле для одной кнопки один, для другой второй.
Код:
#include "stdafx.h"
#include <windows.h>
#include <string.h>
#include <conio.h>
#define ID_EDIT 1
#define ID_BUTTON 2
#define TXT_COLOR1 RGB(255,255,0)
#define TXT_COLOR2 RGB(0,255,0)
#define TXT_COLOR3 RGB(255,0,0)
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hwndEdit1; // инициализация
static HWND hwndEdit2;
static HWND hwndButton1;
static HWND hwndButton2;
static HWND hwndButton3;
static HWND hwndButton4;
static HWND hwndButton5;
static len;
static TCHAR text[60];
static TCHAR str[60];
switch(msg)
{
case WM_CREATE:
hwndEdit1 = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, // создание двух полей edit
30, 50, 440, 30, hwnd, (HMENU) 1,
NULL, NULL);
hwndEdit2 = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
30, 100, 440, 50, hwnd, (HMENU) 2,
NULL, NULL);
hwndButton1 = CreateWindow( // создание кнопок
TEXT("button"), TEXT("Title"),
WS_VISIBLE | WS_CHILD,
30, 170, 80, 25,
hwnd, (HMENU) 3, NULL, NULL);
hwndButton2 = CreateWindow(
TEXT("button"), TEXT("Yelow"),
WS_VISIBLE | WS_CHILD,
120, 170, 80, 25,
hwnd, (HMENU) 4, NULL, NULL);
hwndButton3 = CreateWindow(
TEXT("button"), TEXT("Red"),
WS_VISIBLE | WS_CHILD,
210, 170, 80, 25,
hwnd, (HMENU) 5, NULL, NULL);
hwndButton4 = CreateWindow(
TEXT("button"), TEXT("Font"),
WS_VISIBLE | WS_CHILD,
300, 170, 80, 25,
hwnd, (HMENU) 6, NULL, NULL);
hwndButton5 = CreateWindow(
TEXT("button"), TEXT("Quit"),
WS_VISIBLE | WS_CHILD,
390, 170, 80, 25,
hwnd, (HMENU) 7, NULL, NULL);
break;
case WM_COMMAND:
if (LOWORD(wParam) == 3) {
len = GetWindowTextLength(hwndEdit1) + 1;
GetWindowText(hwndEdit1, text, len);
SetWindowText(hwnd, text); // изменение заголовка
}
if (LOWORD(wParam) == 4) {
len = GetWindowTextLength(hwndEdit1) + 1;
GetWindowText(hwndEdit1, str, len);
SetWindowText(hwndEdit2, str);
}
else if (LOWORD(wParam) == 5) {
len = GetWindowTextLength(hwndEdit1) + 1;
GetWindowText(hwndEdit1, text, len);
SetWindowText(hwndEdit2, text);
}
else if (LOWORD(wParam) == 6) {
len = GetWindowTextLength(hwndEdit1) + 1;
GetWindowText(hwndEdit1, text, len);
SetWindowText(hwndEdit2, text);
}
else if (LOWORD(wParam) == 7) {
PostQuitMessage(0);
}
case WM_CTLCOLOREDIT:
if(hwndEdit2 == (HWND)lParam) // меняем цвета для конкретного эдита
{
HDC hdcEdit2 = (HDC) wParam;
::SetTextColor(hdcEdit2, TXT_COLOR1); //0 255 0 - зелёный.. 255 0 0
return 0;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
MSG msg ;
WNDCLASS wc = {0};
wc.lpszClassName = TEXT( "Task" );
wc.hInstance = hInstance ;
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpfnWndProc = WndProc ;
wc.hCursor = LoadCursor(0,IDC_ARROW);
RegisterClass(&wc);
CreateWindow( wc.lpszClassName, TEXT("Task"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
220, 220, 510, 310, 0, 0, hInstance, 0);
while( GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
|