2013-03-12 126 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)); (HDC)wParam,RGB(255,255,255));以及其中, \t \t \t SetBkMode((HDC)wParam,TRANSPARENT); \t \t return(LRESULT)GetStockObject(WHITE_BRUSH);' – suti 2013-03-13 00:00:37

0

按HerrJoebob的解決方案,但你需要靜態的和編輯的區分:(未經測試的代碼,但這個想法是有)

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;