Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: 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]

Сообщение:

Прикрепить: