创建新视图的简单问题

zhwang_1999 2006-04-30 11:05:32
本人初次接触VC++界面编程,有一问题困惑我近两天,没有找到
解决的办法,请赐教。
int CRepView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
GetParentFrame()->SetWindowText("mytest");

//创建按钮控件

dwStyle = WS_CHILD | WS_VISIBLE | WS_BORDER;
m_rect = CRect(CPoint(400,10),CSize(100,30));
m_button.Create("Test", dwStyle, m_rect, this, ID_MYBUTTON);
...
return 0;

}

//定义绘制消息处理函数
void CRepView::OnDraw(CDC* pDC)
{
// CDocument* pDoc = GetDocument();
// TODO: add draw code here
CRect rectClip;
pDC->GetClipBox(rectClip);
pDC->FillSolidRect(rectClip, RGB(192,192,192));
pDC->TextOut(12, 12, "请选择学校:");
CString unitinfo;
unitinfo = "学校: ";
unitinfo = unitinfo + m_strSchoolName;
pDC->TextOut(12,60,unitinfo);
}

为了测试,我定义了按钮单击消息处理函数:
void CRepView::ShowMessage(char *pSchoolName)
{
pSchoolName = "光明小学";
::MessageBox(NULL,pSchoolName,"请注意",MB_ICONWARNING|MB_OK|MB_TOPMOST);
return;
}

现在问题是,每次单击按钮后,产生“请注意”消息框,单击确定后,调用OnDraw(...)函数,
这样就使得整个窗口的都被pDC->FillSolidRect(rectClip, RGB(192,192,192))操作覆盖了,
请问如何使得不被覆盖,同时窗口背景色为RGB(192,192,192),且能够PDC->TextOut(12,60,unitinfo)
谢谢!
...全文
142 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhwang_1999 2006-05-14
  • 打赏
  • 举报
回复
谢谢
阿狸猿 2006-04-30
  • 打赏
  • 举报
回复
把你手工调用OnDraw的代码去掉,应该就可以了。
OnDraw是个虚函数,MFC框架会在WM_PAINT的处理函数里自动调用它。
在MessageBox对话框销毁后,Windows会自动发送WM_PAINT消息给View,CloipRgn正好是MesageBox的大小。

注意:GetDC函数获得的ClipRgn是整个客户区,这就是为什么整个窗口的都被pDC->FillSolidRect(rectClip, RGB(192,192,192))操作覆盖的原因。
sycnick 2006-04-30
  • 打赏
  • 举报
回复
把OnDraw放到OnPaint里面去(WM_PAINT),在ShowMessage中,Invalidate()
zhwang_1999 2006-04-30
  • 打赏
  • 举报
回复
不好意思,刚才忘记写上调用OnDraw(...)的一句了。
为了测试,我定义了按钮单击消息处理函数:
void CRepView::ShowMessage(char *pSchoolName)
{
pSchoolName = "光明小学";
::MessageBox(NULL,pSchoolName,"请注意",MB_ICONWARNING ¦MB_OK ¦MB_TOPMOST);
OnDraw(GetDC());
return;
}

15,980

社区成员

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

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