如何让控件显示在程序的最上面

ggglivw 2007-06-07 01:42:29
我写了一个MFC小游戏,我关闭了自动跟新背景,在OnPaint方法中自己画,但是一改变大小有的时候部分控件回被遮挡
OnPaint()
{
GDI_draw();//全部跟新背景
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}

CComboBox *pCCom2 = (CComboBox *)GetDlgItem(IDC_COMBO2);
CComboBox *pCCom1 = (CComboBox *)GetDlgItem(IDC_COMBO1);
CEdit *pCedit = (CEdit *)GetDlgItem(IDC_EDIT4);
CBitmapButton *pCbut1 = (CBitmapButton *)GetDlgItem(IDC_BUTTON1);
CBitmapButton *pCbut2 = (CBitmapButton *)GetDlgItem(IDC_BUTTON2);
CBitmapButton *pCbut3 = (CBitmapButton *)GetDlgItem(IDC_BUTTON3);
CBitmapButton *pCbut4 = (CBitmapButton *)GetDlgItem(IDC_BUTTON4);
CListCtrl *pClist = (CListCtrl *)GetDlgItem(IDC_LIST1);
pCedit->ShowWindow(SW_NORMAL);
pCbut1->ShowWindow(SW_NORMAL);
pCbut2->ShowWindow(SW_NORMAL);
pCbut3->ShowWindow(SW_NORMAL);
pCbut4->ShowWindow(SW_NORMAL);
pClist->ShowWindow(SW_NORMAL);
pCCom2->ShowWindow(SW_NORMAL);
pCCom1->ShowWindow(SW_NORMAL);
pCbut5->ShowWindow(SW_NORMAL);

pCedit->UpdateWindow();
pCbut1->UpdateWindow();
pCbut2->UpdateWindow();
pCbut3->UpdateWindow();
pCbut4->UpdateWindow();
pClist->UpdateWindow();
pCCom2->UpdateWindow();
pCCom1->UpdateWindow();
pCbut5->UpdateWindow();


}
可是有的控件还是会被遮挡,被遮挡的控件是CComboBox,CButton,CBitmapButton。但是
CEdit和CListCtrl就算不ShowWindow和UpdateWindow一点影响也没有,怎么回事啊
...全文
524 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggglivw 2007-06-07
  • 打赏
  • 举报
回复
Mackz(在相互)
其实用了ShowWindow,UpdateWindow跟没有用一样,但是CEdit和CListCtrl就不会出现问题,只有按钮和CComboBox才会被遮挡,
ggglivw 2007-06-07
  • 打赏
  • 举报
回复
函数的最后一行调用CDialog::OnPaint();还是不行,
画背景我已经屏蔽了,直接返回true,在OnPaint里面画背景,我用了一个全局dc,做了双缓冲,
原来在OnEraseBkgnd也会出现这个问题,应该不是那里的问题。
Mackz(在相互) ( ) 其余代码都是多余的,不知道是什么意思,怎么做啊?
菜牛 2007-06-07
  • 打赏
  • 举报
回复
其余代码都是多余的。
菜牛 2007-06-07
  • 打赏
  • 举报
回复
如果是画背景,放在OnEraseBkgnd()中;如果是画前景,放在
else
{
CDialog::OnPaint();
//这里
CPaintDC dc(this);
GDI_draw(&dc);
//把dc指针传进去,不要再另外GetDC什么的。
}
luohongming 2007-06-07
  • 打赏
  • 举报
回复
在函数的最后一行调用CDialog::OnPaint();

15,979

社区成员

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

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