Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: GeorgeIV (28.11.2008 в 09:41) Если хотитет "типовому" окну добавить какие то нестандартные свойства или поведение, лучше использовать сабклассинг. Но без обработки WM_PAINT все равно не обойтись, по моему. Можно еще попробовать получить DC едита и использовать ф-цию Set BkColor, но я не пробовал ни разу использовать ее вне обработчика WM_PAINT, поэтому не уверен. вот кусок кода, который красит едит в красный цвет
WNDPROC old_proc; BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } hEdit = CreateWindow(_T("EDIT"), _T("Edit"), WS_CHILD | WS_VISIBLE, 10,10, 120, 20, hWnd, NULL, hInstance, NULL); old_proc = (WNDPROC)SetWindowLong(hEdit, GWL_WNDPROC, (LONG) WndProc); // сохраним указатель на себя SetWindowLong(hEdit,GWL_USERDATA,(LONG) hEdit); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; BOOL IsEdit = FALSE; COLORREF m_BackColor = RGB(255, 255, 255); RECT rect; HBRUSH brh; HWND hEWnd = (HWND) GetWindowLong(hWnd,GWL_USERDATA); if (hWnd == hEWnd) { IsEdit = TRUE; m_BackColor = RGB(255, 0,0); } switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rect); brh = CreateSolidBrush(m_BackColor);// фон заливки окна FillRect(hdc, &ps.rcPaint, brh); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: