有一个工作线程,进行串口通信。在整个通讯过程中有7个状态,这7状态需要在对话框中反映出来。对话中有7个EditBox控件或CStatic控件标有状态。
我想每当改变一个状态后线程用PostMessage发送消息到对话框,对话框中根据相应的状态改变EditBox控件或CStatic控件的背景色。有这样两个问题,1、工作线程发送什么样的消息好;2、怎样轮流改变背景色。
谢谢!
我想每当改变一个状态后线程用PostMessage发送消息到对话框,对话框中根据相应的状态改变EditBox控件或CStatic控件的背景色。有这样两个问题,1、工作线程发送什么样的消息好;2、怎样轮流改变背景色。
谢谢!
解决方案 »
- 请教:各位大哥,请帮我看看下面两个问题啊?谢谢!
- 关于输出文本换行?
- 一道笔试题,高手们看看有什么好的解决办法吗
- ADO问题请大家帮忙!
- 遇到怪事搞不定啦~~好心人来看看~
- 请教哪里有深入讲解Windows98下应用程序和动态连接库如何运行的资料
- 如何设计一个停靠式窗口??
- 在C(纯C)中任何将FLOAT型变量输出的时候只输出一位小数,不如成绩这样的数87.5
- 113分送上:请问<<21天学通C++>>这本书怎么样?我有一点点c基础,想深入学C++,看这本书合适吗?或是有什么更好的书?另外,他所带的2CD是什么内容?这本书值吗?发表意见或推荐好书者一定给分!
- 关于友元问题,欢迎进来指导一下。
- 有一个怪问题
- 颜色对话框的问题!
HBRUSH CXXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性
if ( pWnd->GetSafeHwnd()==m_edit2.GetSafeHwnd() )
{
static HBRUSH hbrEdit = ::CreateSolidBrush( RGB(255, 0, 0) );
pDC->SetBkMode ( TRANSPARENT );
return hbrEdit;
} // TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
消息嘛,你自己定一个,什么都好, M$ 建议自定义消息 一般应大于 (WM_USER+100).
2、怎样轮流改变背景色。
A)有几种颜色,请先创建好相对应的画刷.
B)为每个需要改变颜色的控件保丰一个画刷索引.
C)响应WM_CTRLCOLOR. (楼上) 可以通过控件ID号来区别不同的控件:HBRUSH CXXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性
switch( pWnd->GetDlgCtrlID() )
{
case IDC_EDIT1:
pDC->SetBkMode ( TRANSPARENT );
return (HBRUSH)m_arrbs[m_index1].GetSafeHandle(); case IDC_EDIT2:
pDC->SetBkMode ( TRANSPARENT );
return (HBRUSH)m_arrbs[m_index2].GetSafeHandle();
..... } // TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
} d) 响应你的 自定义消息, 根据需要改变 相应的画刷索引,和更新控件:
if(...)
{
m_index1 = 4;
GetDlgItem(IDC_EDIT1)->Invalidate();
}...
WM_CTRLCOLOR呢?
WM_CTLCOLOREDIT
WM_CTLCOLORSTATIC
wParam 是 窗口的 HDC
lParam 是 控件的 ID这里是例子
http://www.china-askpro.com/msg9/qa24.shtml