![]() |
[включить плавающее окно] Вверх #1 |
![]() Автор темы Регистрация: 31.07.2011
|
проблемы с WM_CTLCOLOREDIT
вторые сутки чужу одно большое .... хочу понять как сделать. люди (если такие есть), помогите. попытался через char переслать код RGB, и ничего не получилось. такое вообще возможно ли? устал маяться.
Код:
#include "stdafx.h" #include <windows.h> #include <string.h> #include <conio.h> #include <string.h> #define ID_EDIT 1 #define ID_BUTTON 2 #define TXT_COLOR1 RGB(255,0,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]; char rcl[]="RGB(255,0,0)"; 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); char rlc[]="TXT_COLOR1"; 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); } case WM_CTLCOLOREDIT: if(hwndEdit2 == (HWND)lParam) // меняем цвета для конкретного эдита { HDC hdcEdit2 = (HDC) wParam; ::SetTextColor(hdcEdit2, *rcl); //0 255 0 - зелёный.. 255 0 0 return 0; } else if (LOWORD(wParam) == 7) { PostQuitMessage(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; } Код:
#include "stdafx.h" #include <windows.h> #include <string.h> #include <conio.h> #include <string.h> #define ID_EDIT 1 #define ID_BUTTON 2 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]; static R=0; static G=0; static B=0; 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); R=255; G=0; B=0; } else if (LOWORD(wParam) == 5) { R=0; G=255; B=0; 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); } case WM_CTLCOLOREDIT: if(hwndEdit2 == (HWND)lParam) // меняем цвета для конкретного эдита { HDC hdcEdit2 = (HDC) wParam; ::SetTextColor(hdcEdit2, RGB(R,G,B)); //0 255 0 - зелёный.. 255 0 0 return 0; } else if (LOWORD(wParam) == 7) { PostQuitMessage(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; } |
![]() |
![]() |
![]() |
[включить плавающее окно] Вверх #2 |
![]() Регистрация: 05.03.2010
Адрес: Vinnitsa, UA
|
что у Вас case WM_CTLCOLOREDIT: делает по среди обработки case WM_COMMAND: ? Я вижу что case WM_CTLCOLOREDIT: с телом тупо вставлено в середину case WM_COMMAND: какраз после закрытия очередного else-if и началом очередного else так что Вам повезло что оно компилируется вообще.
(Оформи Вы нормально switch-case - Вам бы сразу же компилятор выдал бы что Вы сделали что-то не то. Да и магические числа 3, 7 и пр. Вам шлют привет, ибо если бы вместо них вставили бы именованные константы - сразу же увидели бы свои глюки) кстати, нужно проверять что возвращает CreateWindow всегда. |
![]() |
![]() |