我的作法是:1:从CStatic类派生一个类CStaticXX
2:类CStaticXX中定义变量bool m_bMouseDown, 用以指定鼠标是否按下;
3:映射类CStaticXX的WM_PAINT, WM_LBUTTONDOWN, WM_LBUTTONUP消息;
4:映射的消息处理函数中代码如下:void CStaticXX::OnPaint()
{
CPaintDC dc(this);
if (m_bMouseDown) dc.SetTextColor(RGB(255, 0, 0));
else dc.SetTextColor(RGB(0, 0, 255)); CRect rect(0, 0, 100, 20);
dc.DrawText(CString("T"), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}void CStaticXX::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bMouseDown = true;
SendMessage(WM_PAINT);
CStatic::OnLButtonDown(nFlags, point);
}void CStaticXX::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bMouseDown = false;
SendMessage(WM_PAINT);
CStatic::OnLButtonUp(nFlags, point);
}显示效果是:
如果m_bMouseDown初始化为true,则一直显示为红色;
如果m_bMouseDown初始化为true,则一直显示为蓝色:
——也就是说dc.SetTextColor没有起到我预期的效果!!!大家帮忙看看原因何在??
我怀疑是我在某些基本知识上犯了低级错误。
2:类CStaticXX中定义变量bool m_bMouseDown, 用以指定鼠标是否按下;
3:映射类CStaticXX的WM_PAINT, WM_LBUTTONDOWN, WM_LBUTTONUP消息;
4:映射的消息处理函数中代码如下:void CStaticXX::OnPaint()
{
CPaintDC dc(this);
if (m_bMouseDown) dc.SetTextColor(RGB(255, 0, 0));
else dc.SetTextColor(RGB(0, 0, 255)); CRect rect(0, 0, 100, 20);
dc.DrawText(CString("T"), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}void CStaticXX::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bMouseDown = true;
SendMessage(WM_PAINT);
CStatic::OnLButtonDown(nFlags, point);
}void CStaticXX::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bMouseDown = false;
SendMessage(WM_PAINT);
CStatic::OnLButtonUp(nFlags, point);
}显示效果是:
如果m_bMouseDown初始化为true,则一直显示为红色;
如果m_bMouseDown初始化为true,则一直显示为蓝色:
——也就是说dc.SetTextColor没有起到我预期的效果!!!大家帮忙看看原因何在??
我怀疑是我在某些基本知识上犯了低级错误。
解决方案 »
- CloseSocket关闭WSAJoinLeaf返回的套接字导致程序崩溃了,求救啊!
- vs2008的static等控件的caption为什么都要求是Int32的?
- 请问我如何能将控件的不可见风格改为可见
- mfc写ocx如何实现类似MSFlexGrid中COleFont的导出类
- 关于按钮字体颜色求教~
- 生产者和多个消费者的问题
- 现在发现BCG是个好东西,但是从哪里下手呢?!资料、例子哪里有啊?!
- 请问谁有类似于QQ的网络寻呼机的源码?
- 网页控件响应?在线等急!!!!
- 如何检测端口是否打开(比如21,23)(有分)
- 请教一个问题?为什么我的代码会出错~
- 有没有养条插值的算法呢? 要求出2个点中间的所有点.
多谢。
该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。