程序有两个窗口,我的目的的从父窗口进入子窗口时,子窗口会显示一张图片。由于一进入子窗口便要加载图片,因此我给子窗口增加了一个初始化函数OnInitDialog(),这样当父窗口调用子窗口时便会自动调用该函数(应该没有错吧?),然后我在子窗口的OnInitDialog()函数中再调用ShowPicture(CString mPicPath)(这个函数的功能是加载图片然后显示在子窗口的图片控件上)函数。现在的问题是这一切都做好后子窗口的图片控件中却没有显示图片,调试发现当从父窗口进入子窗口时确实是调用了ShowPicture(CString mPicPath)函数。你现在可能会怀疑是不是这个ShowPicture(CString mPicPath)函数有问题,这个函数完全是正确的,我发现如果在子窗口中增加一个按钮,然后在按钮的事件中直接调用该函数却完全可以显示图片!再后来又发现只要通过事件触发来调用该函数都可以正确显示图片!就是在初始化函数OnInitDialog()中调用时没有显示。说了这么多,现在大家应该清楚我的问题了吧?请各位高抬贵手,帮帮俺...

解决方案 »

  1.   

    把ShowPicture放在子窗口的OnPaint里面
      

  2.   

    初始化函数OnInitDialog()中调用时没有显示
    ========
    这个函数执行时,对话框的子控件窗口还没创建好呢!你的ShowPicture()当然起不了作用了。
      

  3.   


    我copy了一个OnPaint()函数,请问ShowPicture应该放在OnPait()函数的什么地方呢?请原谅我的愚笨...
    OnPaint()
    { if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
    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; // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CDialog::OnPaint();
    }
    }
      

  4.   

    放在else里面,IsIconic()的目的是判断一下窗口是不是最小化了,所以放在else里面
      

  5.   


    子窗口好像没有自动调用OnPaint()函数呀,我应该在什么时候调用OnPaint()呢?等待中...
      

  6.   

    我想知道你是如何进入子窗口的?
    通过父窗口的某个按钮?
    从你的描述中,感觉挺乱的。另外OnPaint只有在需要重绘时才会调用。比如你移动窗口,窗口上被别的窗口覆盖等等
      

  7.   

    在OnInitDialog()中设置定时器SetTimer(1,100,0);//让窗口先出现
    在OnTimer()中关闭KillTimer(1);//只有一次
    然后ShowPicture(CString mPicPath);//可以显示图了。
      

  8.   

    实在不行,楼主在OnPaint里面调用一次InvalidateRect试试,不过最好用一个静态变量判断一下,如果已经显示过了就不能调用了,要不然窗口会闪的。
      

  9.   

    你有没有关闭子窗口?
    如果你没有关闭子窗口的话,你在OnPaint绘图应该不会改变的啊。
      

  10.   

    对话框显示图片的最佳位置是放在 OnEraseBkgnd (WM_ERASEBKGND)中,并返回TRUE
      

  11.   

    我copy了一个OnPaint()函数,请问ShowPicture应该放在OnPait()函数的什么地方呢?请原谅我的愚笨... 
    ===============================================================
    哈哈,是你拷贝来的吗?应该响应WM_PAINT消息呀,这是消息响应函数。
    看见你问在哪儿调用OnPaint了。