给对话框的不同区域绘制不同的背景色

zhuri_y 2009-03-05 05:38:53
将对话框分成上中下三部分,上部分背景绘制成白色,中部分绘制成蓝色,下部分绘制成黑色,该如何实现
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyafei30207 2009-03-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 showxier 的回复:]
如果你的工程是对话框, 且要画的地方正是主对话框的话, 直接定位到CXXXDlg的OnPaint函数,如下作处理.

C/C++ codevoid CXXXDlg::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);

[/Quote]
学习!!!
showxier 2009-03-05
  • 打赏
  • 举报
回复
如果你的工程是对话框, 且要画的地方正是主对话框的话, 直接定位到CXXXDlg的OnPaint函数,如下作处理.
void CXXXDlg::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 //***************************目前处理的是这里下的
{
CPaintDC dc(this);
CRect rcClient, rc1,rc2, rc3;
GetClientRect(rcClient); //rcClient是对话框客户区大小,将这个rcClient分成三个区域,画这三个区域就行了
rc1 = CRect(rcCLient.left, rcClient.top, rcClient.right, rcClient.top + rcClient.Height()/3 );
rc2 = CRect(rcClient.left, rc1.bottom, rcClient.right, rc1.bottom + rcClient.Height()/3 );
rc3 = CRect(rcClient.left, rc2.bottom, rcClient.right, rc2.bottom + rcClient.Height()/2 );

dc.FillSolidRect(rc1, RGB(255, 255, 255));
dc.FillSolidRect(rc2, RGB(0, 0, 255));
dc.FillSolidRect(rc3, RGB(0, 0, 0));

CDialog::OnPaint();
}
}


如果是新添加的对话框,Ctrl+W弹出VC的MFC ClassWizard,添加对话框CMainDlg的WM_PAINT消息和相应的映射函数OnPaint, 编辑OnPaint()下内容,大概如下:
void CDialog1::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
CRect rcClient, rc1,rc2, rc3;
GetClientRect(rcClient); //rcClient是对话框客户区大小,将这个rcClient分成三个区域,画这三个区域就行了
rc1 = CRect(rcClient.left, rcClient.top, rcClient.right, rcClient.top + rcClient.Height()/3 );
rc2 = CRect(rcClient.left, rc1.bottom, rcClient.right, rc1.bottom + rcClient.Height()/3 );
rc3 = CRect(rcClient.left, rc2.bottom, rcClient.right, rc2.bottom + rcClient.Height()/2 );

dc.FillSolidRect(rc1, RGB(255, 255, 255));
dc.FillSolidRect(rc2, RGB(0, 0, 255));
dc.FillSolidRect(rc3, RGB(0, 0, 0));
}


参见MSDN CDC类的成员函数和功能.
summersdw1 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fu0212 的回复:]
分别画三个矩形
GetDC ReleaseDC //设备上下文
SelectObject //把位图或其他资源选进某DC
Bitblt //填充
[/Quote]

可行
Julienjut 2009-03-05
  • 打赏
  • 举报
回复
有理
fu0212 2009-03-05
  • 打赏
  • 举报
回复
分别画三个矩形
GetDC ReleaseDC //设备上下文
SelectObject //把位图或其他资源选进某DC
Bitblt //填充

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧