读书人

子窗口不显示图片有关问题

发布时间: 2012-10-14 14:55:07 作者: rapoo

求助:子窗口不显示图片问题
我创建了一个基于dlg的MFC五子棋程序,系统自动创建了一个对话框和相应的代码。我创建了一个对话框(操作对话框),用来包扩相应的操作(比如对局开始、结束等)。我又创建了一个棋盘对话框,其style设为child类型,主要想用来显示棋盘,所以在其OnPaint方法中加载了一个棋盘bmp文件。程序编译后,操作对话框可以显示出来,但棋盘位图不能显示出来,不知道为什么?难道是被父窗口给覆盖了?

有哪位朋友帮忙解惑???

棋盘对话框的相关代码如下:

C/C++ code
BOOL CChessBoard::OnInitDialog(){    CDialog::OnInitDialog();        /*加载棋盘位图*/    OnPaint();    return TRUE;}void CChessBoard::OnPaint(){                CPaintDC dc(this);                     //加载棋盘位图            CBitmap bmp;            bmp.LoadBitmap(IDB_CHESS_BOARD);            int nBmpWidth,nBmpHeight;            //获取位图信息            BITMAP bmpInfo;            bmp.GetBitmap(&bmpInfo);            nBmpWidth = bmpInfo.bmWidth;            nBmpHeight = bmpInfo.bmHeight;            //将位图绘制在整个窗口区域            CRect cltRC;            GetClientRect(cltRC);            CDC memDC;            memDC.CreateCompatibleDC(&dc);            memDC.SelectObject(&bmp);            dc.StretchBlt(0,0,cltRC.Width(),cltRC.Height(),&memDC,0,0,nBmpWidth,nBmpHeight,SRCCOPY);            memDC.DeleteDC();            bmp.DeleteObject();    }


主程序对话框的相关代码:
C/C++ code
BOOL CMy_five_chessDlg::OnInitDialog(){    CDialog::OnInitDialog();    CRect LpnlRC;/*左面板rect*/    CRect MpnlRC;/*中面板rect*/    CRect RpnlRC;/*右面板rect*/    CRect wndRC;            CRect cltRC;    //客户区域    GetClientRect(cltRC);    int nHeight = cltRC.Height();    int nWidth;    /*创建左面的操作面板*/    m_lPanel.Create(IDD_DIALOG_LEFT, this);    m_lPanel.ShowWindow(SW_SHOW);    m_lPanel.GetWindowRect(wndRC);    nWidth = wndRC.Width();    /*计算左面板的区域,把左面板放到这个区域中*/    LpnlRC.left = 0;    LpnlRC.top = 0;    LpnlRC.bottom = nHeight;    //LpnlRC.bottom = 500;    LpnlRC.right = nWidth;    m_lPanel.MoveWindow(LpnlRC);    /*创建棋盘面板*/            m_ChessBoardPanel.Create(IDD_DIALOG_CHESS_BOARD, this);    m_ChessBoardPanel.ShowWindow(SW_SHOW);        /*计算棋盘的区域,把棋盘放到这个区域中,仍然使用变量pnlRC*/    MpnlRC.left = LpnlRC.right;/*中面板紧邻左面板*/    MpnlRC.top = 0;    MpnlRC.bottom = nHeight;    MpnlRC.right = cltRC.Width() - 50;/*临时处理*/    m_ChessBoardPanel.MoveWindow(MpnlRC);    return TRUE;  }


[解决办法]
BOOL CChessBoard::OnInitDialog()
{
CDialog::OnInitDialog();

/*加载棋盘位图*/
OnPaint();//去掉这句,自动执行这个函数

return TRUE;
}

棋盘对话框的.parent=主对话框的.this;就是把主对话框的窗口作为棋盘对话框的父窗口
[解决办法]
在主窗体的重绘里,触发一下子窗体的绘制试试呢?

读书人网 >VC/MFC

热点推荐