c++ MFC刷新窗口
C++ MFC Refresh Window
我正在使用Visual Studio 2010与MFC,我试图使一个矩形,当一个设备断开连接时是红色的,当它是绿色的。我用下面的代码创建了一个矩形:
CRect lConnectStatus;
GetDlgItem( IDC_CONNECT_STATUS ) -> GetClientRect( &lConnectStatus );
GetDlgItem( IDC_CONNECT_STATUS ) -> ClientToScreen( &lConnectStatus );
ScreenToClient( &lConnectStatus );
mConnected.Create( GetSafeHwnd(), 10000 );
mConnected.SetPosition( lConnectStatus.left, lConnectStatus.top, lConnectStatus.Width(), lConnectStatus.Height() );
if( mDevice.IsConnected() ){
mConnected.SetBackgroundColor(0, 255, 0);
}
else{mConnected.SetBackgroundColor(0, 0, 255);}
我将这个片段插入到OnInitDlg方法中,矩形确实出现了,但是当设备连接时它不会变为绿色。无论如何,我可以刷新窗口,使代码再次执行,颜色变为绿色?
IDC_CONNECT_STATUS是什么类型的控件?如果它是一个静态控件,您可以消除所有这些代码,并在父对话框中处理WM_CTLCOLOR_STATIC。该消息的消息处理程序将控制静态控件的颜色。要刷新静态控件,请对该控件调用Invalidate。这将导致它调用WM_CTLCOLOR_STATIC消息处理程序。
解决了它,因为我是c++的新手,我不知道把代码片段放入OnInitDlg()
方法不会工作。因此,我将代码放入OnPaint()
方法中,并使用Invalidate()
和UpdateWindow()
函数来强制在设备连接/断开时刷新窗口。谢谢你的帮助。
Edit感谢Barmak建议不要在OnPaint()
方法中创建控件。我已经更新了下面的代码
program::OnInitDlg(){
CRect lConnectStatus;
GetDlgItem( IDC_CONNECT_STATUS ) -> GetClientRect( &lConnectStatus );
GetDlgItem( IDC_CONNECT_STATUS ) -> ClientToScreen( &lConnectStatus );
ScreenToClient( &lConnectStatus );
mConnected.Create( GetSafeHwnd(), 10000 );
mConnected.SetPosition( lConnectStatus.left, lConnectStatus.top, lConnectStatus.Width(), lConnectStatus.Height() );
}
program::OnPaint(){
if( mDevice.IsConnected() ){
mConnected.SetBackgroundColor(0, 255, 0);
}
else{mConnected.SetBackgroundColor(0, 0, 255);}
}
program::Connect(){
Invalidate();
UpdateWindow();
}
program::disconnect(){
Invalidate();
UpdateWindow();
}
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- 通过注册表更改鼠标设置后,刷新窗口
- OSG窗口阻止OpenCV窗口的刷新
- C++ WINAPI 窗口不刷新
- GDI 窗口中的游戏循环/一段时间后不刷新并崩溃
- X11 窗口在获取事件之前不会刷新
- 如何刷新/重绘屏幕(不是程序窗口)
- WinAPI 窗口在绘制后不刷新
- ncurses:是否可以在不删除边框的情况下刷新窗口
- linux上多个QML窗口不能正常刷新
- 当按下键时,窗口停止刷新
- 使用护士刷新重叠的窗口
- 如何在空闲函数中刷新窗口
- c++ MFC刷新窗口
- GLUT窗口不会刷新
- opencv窗口在鼠标回调时未刷新