在Dialogbox后我调用下面的回调函数,在WM_ERASEBKGND中修改对话框背景色,在WM_CTLCOLOR中修改check box的背景色;运行界面,在控件之间切换时造成闪烁;如果我只响应WM_ERASEBKGND那么背景色改变,控件是默认的灰色,这时控件切换就不闪烁;如果两个消息都响应就造成控件闪烁;刚试了下在初始化中修改颜色,好像不行!我也试过计算除控件之外的空白区域,刷新的时候只刷新需要刷新的部分,但是还是不行,不知道怎么回事!
LRESULT CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam, LPARAM lParam)
{ switch (message)
{
case WM_INITDIALOG:
{
}
return true;
case WM_TIMER:
{
}
break;
case WM_COMMAND:
{
}
break;
case WM_CTLCOLORSTATIC:
{
HDC hdc = (HDC)wParam;
SetBkColor(hdc,BK_BRUSH);
SetTextColor(hdc,TEXT_BRUSH); return (int)g_hBgBrush;
}
case WM_ERASEBKGND:
{
HDC hdc = (HDC)wParam;
RECT rectClient;
GetClipBox(hdc,&rectClient) ;
FillRect(hdc,&rectClient, g_hBgBrush);
return true;
}
case WM_DESTROY:
KillTimer(hDlg,1);
PostQuitMessage(0);
break;
case WM_CLOSE:
DestroyWindow(hDlg);
break;
}
return false;
}
十分感谢!
LRESULT CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam, LPARAM lParam)
{ switch (message)
{
case WM_INITDIALOG:
{
}
return true;
case WM_TIMER:
{
}
break;
case WM_COMMAND:
{
}
break;
case WM_CTLCOLORSTATIC:
{
HDC hdc = (HDC)wParam;
SetBkColor(hdc,BK_BRUSH);
SetTextColor(hdc,TEXT_BRUSH); return (int)g_hBgBrush;
}
case WM_ERASEBKGND:
{
HDC hdc = (HDC)wParam;
RECT rectClient;
GetClipBox(hdc,&rectClient) ;
FillRect(hdc,&rectClient, g_hBgBrush);
return true;
}
case WM_DESTROY:
KillTimer(hDlg,1);
PostQuitMessage(0);
break;
case WM_CLOSE:
DestroyWindow(hDlg);
break;
}
return false;
}
十分感谢!
自制键盘和鼠标信息是通过COM3口获得
楼主可试一下。
SetFocus
但是采用触摸得方式操作界面就没问题,只是通过自制键盘和鼠标操作得时候出现闪烁。(所有界面没有使用到MFC类)4楼得能否说详细点,焦急等待!
... ... //进行你的操作
SetFocus(hWnd); //焦点设置为当前窗口我这样做时,效果不错,没有闪烁了,不知你的如何?
SetFocus(hwndEditOut); //焦点设置为其他窗口
... ... //进行你的操作
SetFocus(hWnd); //焦点设置为当前窗口根据你的意思,我把焦点在WM_INITDIALOG中通过某一子对话框句柄来设置,然后在WM_COMMAND中在把焦点设置到当前窗口,然后创建一个子对话框,不知道这样是不是你的意思?如何是,好像没效果,如果不是还请帮我更正下,这个问题把我弄得思维都短路了,一上班就想到这问题。
应该放在WM_COMMAND开始的地方,SetFocus(hWnd); //焦点设置为当前窗口
应该放在WM_COMMAND结束的地方.
应该放在WM_COMMAND开始的地方, SetFocus(hWnd); //焦点设置为当前窗口
应该放在WM_COMMAND结束的地方.
SetFocus(hwndEditOut); //焦点设置为其他窗口 (WM_COMMAND起始位置)
... ... //进行你的操作
SetFocus(hWnd); //焦点设置为当前窗口 (WM_COMMAND结尾位置)这样设置后,没能解决闪烁的问题,有没有其他解决方法?或者我那样响应消息是在哪造成的闪烁.
Thank you!
建议独立处理开,各自对话框用不同的DC绘制。
目前你是靠回调函数传入一个公用的hDC句柄去绘制的,
所以很可能这个就是在切换的时候产生闪烁的原因。你再看看,有没有可能有资源泄露,每次创建DC后是否有创建后完整地消毁资源?
成为一个独立的窗体类,
然后重载内的WM_ERASEBKGND不要放在回调函数内使用。
自制键盘和鼠标信息是通过COM3口获得