求助:子窗口不显示图片问题
我创建了一个基于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;就是把主对话框的窗口作为棋盘对话框的父窗口
[解决办法]
在主窗体的重绘里,触发一下子窗体的绘制试试呢?