MFC运行界面出现条状黑屏

谷棵 2013-08-13 01:36:33




第一幅是网络摄像头的安防监控上位机界面,接口是商家提供的,下面是我做的界面:16路网络视频输入,每四路进行切换,双击Picture Control(四个中的一个)控件视频会进入全屏显示,再次双击该控件就恢复到原来的界面。
现在的问题是,双击该Picture Control控件后,左侧会出现条状黑屏(如上第二幅图),虽然不影响使用,但是很不雅观。不清楚全屏返回后的条状黑屏时如何产生的,急剧不理解,恳请大家帮忙!!

开发环境:Visual Studio 2008(MFC)
这是界面初始化的部分代码:
void CMonitrSymDlg::ResetViewDialog()
{
CRect rect, rc, r;
int i, j;
int x, y, cx, cy;

GetDlgItem(IDC_DRAW)->GetWindowRect(rect);
ScreenToClient(rect);
rect.DeflateRect(1, 18, 1, 1);

if( MAX_WINDOWS_NUM == 4 )
{
x = rect.left;
y = rect.top;
cx = ( rect.Width() - 2 ) / 2;
cy = ( rect.Height() - 2 ) / 2;
for( i=0; i<2; i++ )
{
x = rect.left;
for( j=0; j<2; j++ )
{
rc.left = x;
rc.top = y;
rc.right = rc.left + cx;
rc.bottom = rc.top + cy;
r = rc;
r.bottom = r.top + 18;
GetDlgItem(IDC_TITLE1+j+i*2)->MoveWindow(r, TRUE);
r.top = r.bottom + 1;
r.bottom = rc.bottom;
GetDlgItem(IDC_DISP_1+j+i*2)->MoveWindow(r, TRUE);
x += ( cx + 2 );
}
y += ( cy + 2 );
}
}
}
...全文
416 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2013-08-16
  • 打赏
  • 举报
回复
sichuanwww 2013-08-16
  • 打赏
  • 举报
回复
谷棵 2013-08-16
  • 打赏
  • 举报
回复
可以了,可以了,是没有刷新的原因,两位说的都对了。 我这样解决的,子对话框中得到主对话框指针,当双击退出子对话框的时候调用Invalidate函数就可以了。代码如下:
CMonitrSymDlg *pDlg = (CMonitrSymDlg *)GetParent();
	pDlg->Invalidate();
谢谢两位了!!
谷棵 2013-08-16
  • 打赏
  • 举报
回复
用你的代码:OnCommand(),截获不到WM_SYSCOMMAND消息,因为全屏显示时子窗口,退出全屏显示为主窗口;不是主窗口的最大化和恢复。还有OnCommand响应按钮消息,而不是窗口消息。还是对MFC的消息类型生疏,不理解 还是要问问:怎么在捕捉到子窗口切换到主窗口的消息命令呢
昨夜无风 2013-08-13
  • 打赏
  • 举报
回复
明显的是因为没有刷新造成的, 黑条是你小图中黑色侧边放大的结果,全屏退出后没有刷新, Invalidate刷新下试试,如果不行很可能是因为设置了WS_CLIPCHILDREN造成了各个控件区域没办法由主窗口进行刷新。
谷棵 2013-08-13
  • 打赏
  • 举报
回复
@lin98666lin 明天修改下看看效果,有结果我会贴上去,大家继续讨论。。。
only_delusion 2013-08-13
  • 打赏
  • 举报
回复
1.主窗口 加上WS_CLIPCHILDREN属性,
2. 如果1不行,那就再截获 WM_SYSCOMMAND消息 判断操作后 进行一次刷新

LRESULT im_message_ui::OnCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
UINT uCmdType = (UINT)wParam;
switch(uCmdType)
{
case SC_MAXIMIZE:
DefWindowProc( WM_SYSCOMMAND,SC_MAXIMIZE,0 );
break;
case SC_RESTORE:
DefWindowProc( WM_SYSCOMMAND,SC_RESTORE,0 );
break;
default:
bHandled=FALSE;
break;

}
Invalidate();//执行默认函数之后 刷新整个界面
return true;
}
谷棵 2013-08-13
  • 打赏
  • 举报
回复
自己先顶一个,七夕节快乐

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧