做了一个ListBox,光标条跟着鼠标点击的位置移动.可是前一个位置的光标条却没有擦除.
OnPaint是通过MouseClick中调用InvalidateRect(hwnd, NULL, true)触发的.
代码如下:
void ImageListBox::OnPaint(HDC hdc)
{
RECT rt, rtText;
int i;
TEXTMETRIC tm;
TCHAR szText[MAX_PATH];
GetTextMetrics(hdc, &tm); LineHeight = tm.tmHeight + tm.tmExternalLeading;
PageSize = Height / LineHeight; GetClientRect(hWnd, &rt); SetBkMode(hdc, BackMode);
SetBkColor(hdc, BackColor);
SetTextColor(hdc, ForeColor); for(i = 0; i < PageSize; i++)
{
memset(szText, 0, sizeof(szText));
lstrcat(szText, TEXT("ListBox Item")); rtText.left = 0;
rtText.top = i * LineHeight;
rtText.right = rtText.left + Width;
rtText.bottom = rtText.top + LineHeight; if(i == SelectedIndex)
{
FillRect(hdc, &rtText, (HBRUSH)FocusedBackColor);
}
DrawText(hdc, szText, -1, &rtText, DT_LEFT | DT_VCENTER);
}
}
OnPaint是通过MouseClick中调用InvalidateRect(hwnd, NULL, true)触发的.
代码如下:
void ImageListBox::OnPaint(HDC hdc)
{
RECT rt, rtText;
int i;
TEXTMETRIC tm;
TCHAR szText[MAX_PATH];
GetTextMetrics(hdc, &tm); LineHeight = tm.tmHeight + tm.tmExternalLeading;
PageSize = Height / LineHeight; GetClientRect(hWnd, &rt); SetBkMode(hdc, BackMode);
SetBkColor(hdc, BackColor);
SetTextColor(hdc, ForeColor); for(i = 0; i < PageSize; i++)
{
memset(szText, 0, sizeof(szText));
lstrcat(szText, TEXT("ListBox Item")); rtText.left = 0;
rtText.top = i * LineHeight;
rtText.right = rtText.left + Width;
rtText.bottom = rtText.top + LineHeight; if(i == SelectedIndex)
{
FillRect(hdc, &rtText, (HBRUSH)FocusedBackColor);
}
DrawText(hdc, szText, -1, &rtText, DT_LEFT | DT_VCENTER);
}
}
解决方案 »
- 求助:WINCE系统 枚举键值
- 50分求BCGCBPro.rc
- 有人知道QQ音乐的软件音乐设置界面是怎么做成的吗?
- 使用installshield制作安装包修改界面的问题
- 几个DLL怎么可以一起进行编译啊,用什么工具啊?
- udp有发送缓冲区吗?
- 怎么在vc中调用动态连接库(急)
- 为什么我的MSDN2002 APRIL装了却用不了?
- 求教各位大神,MFC 对话框 问题
- 我新建了一个MDI程序,不知动哪个地方了现在工具栏不显示了,请问怎么解决?
- IPv9-惊人听闻--挑战美信息霸权 中国将诞生首位世界级富豪
- 如何得到对话框句柄或指针?tab控件每个page对应一个对话框,对话框之间如何通信???在一个对话框上输入信息,在另一个对话框上显示出
{
FillRect(hdc, &rtText, (HBRUSH)FocusedBackColor);
}后面加一个
else
{
FillRect(hdc, &rtText, (HBRUSH)UnfocusedBackColor);
}
if(i == SelectedIndex)
{
FillRect(hdc, &rtText, (HBRUSH)FocusedBackColor);
}
这样写会把刷新过的所有项目变成焦点色。必须有else语句
将SetBkMode设置为透明,或将setbkcolor设置为返回brush的颜色.
在onctlcolor中改