C ++ MFC刷新窗口

时间:2015-08-04 02:01:13

标签: c++ visual-studio-2010 mfc

我正在使用带有MFC的Visual Studio 2010,并且我试图在设备断开连接时创建一个红色的矩形,当它是绿色的时候。我用以下代码制作了矩形:

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方法并显示矩形,但在设备连接时它不会变为绿色。无论如何,我可以刷新窗口,以便再次执行代码,颜色变为绿色?

2 个答案:

答案 0 :(得分:3)

IDC_CONNECT_STATUS是什么类型的控件?如果它是静态控件,您可以删除所有这些代码并在父对话框中处理WM_CTLCOLOR_STATIC。该消息的消息处理程序将控制静态控件的颜色。要刷新静态控件,请在该控件上调用Invalidate。这将导致它调用您的WM_CTLCOLOR_STATIC消息处理程序。

答案 1 :(得分:2)

解决它,因为我是C ++的新手,我不知道将代码片段放入OnInitDlg()方法是行不通的。因此,我将代码放入OnPaint()方法,并使用函数Invalidate()UpdateWindow()强制窗口在设备连接/断开时刷新。谢谢你的帮助。

修改感谢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();
}