
想通过点击一个按钮,d出一个对话框,在此对话框中绘制椭圆(对话框d出时椭圆已绘制完毕,不需要点击按钮触发)。则需要在新建对话框的onPaint()函数中绘制
1 建立模态对话框 1.1 插入一个新的对话框 1.2 修改对话框ID:选择对话框,Alt+Enter快捷键进入属性表 1.3 对话框关联到 类中右键对话框 添加类(或者双击窗口也可)
加入类名
xxDlg.h窗口加入模态类头文件
在xx.DIALOG对话框双击【双缓冲绘制椭圆】按钮,进入xxDlg.cpp窗口
在OnBnClickedButton2()函数中加入以下代码:
CDlgEllipse dlg; dlg.DoModal();
运行效果:
在子窗口中加入一个Group控件,修改ID
在子窗口.cpp文件中添加消息映射标志
ON_WM_PAINT()2.2 添加函数声明
在子窗口.h文件中添加onPaint()函数声明
afx_msg void OnPaint();2.3 添加代码
在子窗口.cpp文件中实现onPaint()函数,在else中添加绘制代码,这样模态对话框d出的时候,图形就绘制好了
void CDlgEllipse::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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
{
CWnd *pWnd = GetDlgItem(IDC_ELLIPSE); //IDC_ELLIPSE为Group控件ID
CPoint ptCenter;
CRect rect2, ellipseRect; //存放组框控件大小
pWnd->GetClientRect(&rect2);
ptCenter = rect2.CenterPoint();//返回CRect的中心点
CDC *dc2;
dc2 = pWnd->GetDC(); //获取控件的CDC指针
CDC dcMem2; //用于缓冲作图的内存DC
dcMem2.CreateCompatibleDC(dc2); //依附窗口DC创建兼容内存DC
CBitmap bmp2; //内存中承载临时图像的位图
bmp2.CreateCompatibleBitmap(dc2, rect2.Width(), rect2.Height());
CBitmap *pOldBmp = dcMem2.SelectObject(&bmp2); //将位图选择进内存DC
dcMem2.FillSolidRect(0, 0, rect2.Width(), rect2.Height(), RGB(255, 153, 204));//在缓冲DC上绘制背景
CBrush brush;
brush.CreateSolidBrush(RGB(102, 102, 153)); // 用选择的颜色创建新画刷
CBrush *oldbrush;
oldbrush = dcMem2.SelectObject(&brush);//选新的画刷
CRgn rgn;
rgn.CreateEllipticRgn(0, 0, rect2.Width(), rect2.Height());
dcMem2.FillRgn(&rgn, &brush);
CBrush brush2;
CBrush *oldbrush2;
brush2.CreateSolidBrush(RGB(rand() % 255, rand() % 255, rand() % 255));
oldbrush2 = dcMem2.SelectObject(&brush2);//选新的画刷
for (int i = 10; i > 0; i--) //在内存DC上做同样的同心圆图象
{
ellipseRect.SetRect(ptCenter, ptCenter);
ellipseRect.InflateRect(i * 10, i * 10);
dcMem2.Ellipse(ellipseRect);
}
dc2->StretchBlt(0, 0, rect2.Width(), rect2.Height(), &dcMem2, 0, 0, rect2.Width(), rect2.Height(), SRCCOPY);
dcMem2.SelectObject(oldbrush);//将原来的画刷选回去
dcMem2.SelectObject(pOldBmp);
brush.DeleteObject(); // 删除新画刷
DeleteObject(&bmp2); //删除位图
dcMem2.DeleteDC(); //删除DC
DeleteObject(pOldBmp); //删除备份位图
ReleaseDC(dc2);
CDialogEx::OnPaint();
}
}
运行效果:
2、子对话框选中,属性—>Title bar改为true
3、导入对应的图标到文件中;
4、在子对话框onInitDialog() 中写入以下代码:
//创建图标 HICON icon; //加载图标 icon = AfxGetApp()->LoadIcon(IDI_ICON3);//图标ID SetIcon(icon,true); SetIcon(icon,false);
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)