我原来在主对话框的OnPaint函数里,调用了DisplayMyData();该函数具体代码如下:
void CmymfcDlg::DisplayMyData(void)
{
CPaintDC dc(this);
CDC* pDC = &dc; int res=StretchDIBits(pDC->GetSafeHdc(),0,0,int(IMAGE_WIDTH),int(IMAGE_HEIGHT),0,0,
IMAGE_WIDTH,IMAGE_HEIGHT,TheImage->imageData,(BITMAPINFO *)bmi,DIB_RGB_COLORS,SRCCOPY);
//更新窗口,重新绘制
RedrawWindow(NULL,NULL,RDW_INVALIDATE);
}
但是后来,到了自己新创建的对话框里,没有OnPaint函数,于是我就添加了一个OnPaint函数,把代码粘进去了。可是,到了子对话框,根本没有执行OnPaint函数,是怎么回事呀?
    急请前辈指点呀,O(∩_∩)O谢谢~~

解决方案 »

  1.   

    每一个对话框都是有OnPaint这个函数的。
      

  2.   

    用IDE提供的消息添加功能来添加WM_PAINT消息吧
      

  3.   

    添加消息映射.BEGIN_MESSAGE_MAP(CTestVersionDlg, CDialog)
    ...
    ON_WM_PAINT()
    ...
    END_MESSAGE_MAP()
      

  4.   

    那个不是普通的成员函数,而是一个消息函数,需要添加WM_PAINT消息的
      

  5.   

    .h文件
    afx_msg void OnPaint(...).cpp文件
    BEGIN_MSG_MAP(..)
      WM_PAINT()
    END_MSG_MAP()void OnPaint()
    {
    }
    对于消息处理函数必须自己做相应的消息映射,当然如果OnPaint正好是个虚函数的话那你的编写就没有问题,比如添加OnToolHitTest
      

  6.   

    void CmymfcDlg::DisplayMyData(void)
    {
    CPaintDC dc(this);//除了OnPaint里不要用这个,或者从OnPaint传过来(改void)
    CDC* pDC = &dc;//要使用GetDC
    //进一步理解CPaintDC和GetDC来的dc有什么不同
      

  7.   

    我就说把这个粘到窗口的cpp文件就行了吗?
    BEGIN_MSG_MAP();
      WM_PAINT();
    END_MSG_MAP();void OnPaint()
    {

    }
      

  8.   

    我知道了,我是重写Onpaint函数的方法不对,不应该自己添加,而是应该用消息重载,问题解决了,谢谢大家