首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

在对话框的控件上显示图片的有关问题

2012-03-22 
在对话框的控件上显示图片的问题我想做一个类似于向导的对话框,就是点“下一步”,“上一步”,“确定”,“取消”那

在对话框的控件上显示图片的问题
我想做一个类似于向导的对话框,就是点“下一步”,“上一步”,“确定”,“取消”那种。
我的想法是这样的:
有一个主对话框就叫CDlg_Main,这个是个非模态对话框,在这个对话框上就只有三个区域,顶端用来显示图片,中间用来显示模态的子对话框,最底下四个按钮(“下一步”,“上一步”,“确定”,“取消”)。
然后有n个子对话框,例如有CDlg_Child1、CDlg_Child2、CDlg_Child3、CDlg_Child4、CDlg_Child5
一开始在CDlg_Main上显示CDlg_Child1,点下一步后隐藏其他的显示CDlg_Child2,以此类推。

现在我的问题是在我想把这个软件美化一下,加个图片啊神马的,结果问题就出来了。

首先在CDlg_Main最顶上加一张图片,做修饰用,我是在OnPaint里如下:
在CDlg_Main上有个图片控件,ID为IDC_STATIC_top,用GDI+把一张PNG图片显示在这个图片控件里
m_pImage是定义的成员变量Image *m_pImage;,已经加载了图片资源

C/C++ code
 void CDlg_Main::OnPaint() {    CPaintDC dc(this);    CDC *pDC;    pDC = ((CStatic*)GetDlgItem(IDC_STATIC_top))->GetDC();    CRect rect;    GetDlgItem(IDC_STATIC_top)->GetWindowRect(&rect);    Graphics graphics(pDC->m_hDC); // Create a GDI+ graphics object    graphics.DrawImage(m_pImage, 0, 0, rect.Width(), rect.Height()); }

好了,这个能顺利显示
然后在一个子对话框里也想显示一个图片,子对话框是模态对话框,一开始全部隐藏,只有CDlg_Child1是显示的(ShowWindow),CDlg_Child1里有个静态文本控件,ID为IDC_STATIC_PIC,同样在OnPaint里如下:
C/C++ code
void CDlg_Child1::OnPaint(){    CPaintDC dc(this); // device context for painting    CDC *pDC;    pDC = ((CStatic*)GetDlgItem(IDC_STATIC_PIC))->GetDC();    CRect rect;    GetDlgItem(IDC_STATIC_PIC)->GetWindowRect(&rect);    Graphics graphics(pDC->m_hDC); // Create a GDI+ graphics object    graphics.DrawImage(m_pImage, 0, 0, rect.Width(), rect.Height());}

=====================分割线=1=============================================
问题来了
显示这个对话框,主对话框的图片能显示,就是CDlg_Main上的能显示,但是子对话框却不能显示,我点下一步显示其他的子对话框后,再点上一步回到这个子对话框,那个图片就显示出来了,这是为什么呢??????
ps:
“上一步”和“下一步”按钮调用如下:
C/C++ code
bool CDlg_Main::ShowDlgPage(int nPage){    HideAllDlg();//这个是先把所以对话框隐藏掉    switch (nPage)    {    case 0:        m_pDlg_Child1->ShowWindow(SW_NORMAL);        break;    case 1://显示第一页        m_pDlg_Child2->ShowWindow(SW_NORMAL);        break;    case 2:……//同上    default://默认显示第一页        m_pDlg_Child1->ShowWindow(SW_NORMAL);        break;    }    UpdateWindow();    return true;}

通过nPage来进行索引显示页面。

难道是因为没有UpdateWindow();所以CDlg_Child1的Static控件不显示图片?
=====================分割线=2=============================================

另外为什么不能在OnInitDialog里进行图片显示的设置,如:
C/C++ code
BOOL CDlg_Wizard::OnInitDialog(){     CDC *pDC;    pDC = ((CStatic*)GetDlgItem(IDC_STATIC_top))->GetDC();    CRect rect;    GetDlgItem(IDC_STATIC_top)->GetWindowRect(&rect);    Graphics graphics(pDC->m_hDC); // Create a GDI+ graphics object    graphics.DrawImage(m_pImage, 0, 0, rect.Width(), rect.Height());}

在OnInitDialog里不行,必须在OnPaint里进行设置

[解决办法]
m_pDlg_Child1->Invalidate();试试
[解决办法]
OnEraseBkgnd 直接 return TRUE; 去掉背景擦除

热点排行