WIN API创建了一个文本框,用WM_CTLCOLOREDIT给它设置了背景色。但把编辑框加上ES_READONLY,即设为只读后,背景色变白,怎么解决
时间: 2024-02-18 11:06:22
浏览: 269
设置CEdit的文本框背景色和文字颜色
当编辑框被设为只读后,[[window](https://wenku.csdn.net/doc/6412b47ebe7fbd1778d3fc75?spm=1055.2569.3001.10083)s](https://wenku.csdn.net/doc/6j74cbotba?spm=1055.2569.3001.10083)系统会默认将其背景色设置为白色。为了解决这个问题,你可以在WM_CTL[color](https://wenku.csdn.net/doc/6401acf5cce7214c316edc4e?spm=1055.2569.3001.10083)EDIT消息的处理函数中添加一些额外的代码,用于判断当前编辑框是否为只读状态,如果是的话,就将背景色设置为你所需要的颜色。
下面是一个示例代码:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch(uMsg)
case WM_CTLCOLOREDIT:
HDC hdc = (HDC)wParam;
HWND hwndEdit = (HWND)lParam;
// 判断当前编辑框是否为只读状态
if(GetWindowLong(hwndEdit, GWL_STYLE) & ES_READONLY)
// 设置背景色为你所需要的颜色
SetBkColor(hdc, RGB(255, 0, 0)); // 这里以红色为例
return (LRESULT)[create](https://wenku.csdn.net/doc/6412b66fbe7fbd1778d46b60?spm=1055.2569.3001.10083)[solid](https://wenku.csdn.net/doc/6401abebcce7214c316e9f9d?spm=1055.2569.3001.10083)Brush(RGB(255, 0, 0));
// 如果编辑框不是只读状态,则不做任何处理,返回0
return 0;
break;
// 其他消息处理代码...
return DefWindowProc(hwnd, uMsg, wParam, lParam);
在这个示例代码中,我们首先获取了当前编辑框的句柄,然后使用GetWindowLong函数获取它的样式,判断它是否为只读状态。如果是的话,我们就使用SetBkColor函数设置背景色为红色,并使用CreateSolidBrush函数创建一个红色的画刷对象,最后将该画刷对象作为返回值返回即可。
需要注意的是,在使用CreateSolidBrush函数创建画刷对象时,需要注意在程序退出前将其销毁,否则可能会造成内存泄漏。
阅读全文