2013-03-12 2 views
1

У меня есть программа winapi (C++) почти полная. Теперь проблема заключается в том, что я хочу установить цвет заливки текстового поля и что текстовое поле является только для чтения. Когда я устанавливаю это текстовое поле только для чтения, я не могу заполнить его белым. И когда я этого не сделаю, он может быть заполнен белым. Это, как создать текстовое поле:WinAPI: установить цвет заливки текстового поля только для чтения

CreateWindow(L"EDIT", text, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_READONLY|ES_RIGHT, left, top, width, height, hWnd, (HMENU)ID, hInst, NULL) 

И этот код в WinProc:

case WM_CTLCOLOREDIT: 
     SetTextColor((HDC)wParam,RGB(0,0,255)); 
     SetBkColor((HDC)wParam,RGB(255,255,255)); 
     SetBkMode((HDC)wParam, TRANSPARENT); 
    return (LRESULT)GetStockObject(WHITE_BRUSH); 

ответ

1

Вы хотите использовать WM_CTLCOLORSTATIC только для чтения текстовых полей; см. документы для WM_CTLCOLOREDIT.

+1

да, я попытался с WM_CTLCOLORSTATIC, текстовое поле белое теперь, но этикетка фон также был белым (фон приложения светло-серый). Я не хочу, чтобы это произошло. 'case WM_CTLCOLORSTATIC: \t \t \t SetTextColor ((HDC) wParam, RGB (0,0,255)); \t \t \t SetBkColor ((HDC) wParam, RGB (255,255,255)); \t \t \t SetBkMode ((HDC) wParam, TRANSPARENT); \t \t return (LRESULT) GetStockObject (WHITE_BRUSH); ' – suti

0

Согласно решению HerrJoebob, но вы должны различать статику и редактировать'S: (непроверенный код, но идея есть)

case WM_CTLCOLORSTATIC: 
{ 
TCHAR senderClass[256] ; 
GetClassName((HWND)lParam, senderClass, 256); 
if (_tscmp(senderClass, WC_EDIT) 
    { 
    //Code to change the colour of edit controls 
    } 
} 
break; 
Смежные вопросы