首页
社区
课程
招聘
[求助]对话框画图遇到的问题
发表于: 2007-11-6 22:48 4924

[求助]对话框画图遇到的问题

2007-11-6 22:48
4924
VC基于对话框的工程。
我想在IDC_VIEW控件画个椭圆,遇到了问题。
问题的描述在注释中

代码如下:

void CTxtLogDlg::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
        {
          CEdit *pWnd = (CEdit*)GetDlgItem(IDC_VIEW);
          CRect   rect;
          pWnd->GetClientRect(rect);
          CDC  *pDC = pWnd->GetDC();
          pDC->Ellipse(rect);
          // CDialog::OnPaint();
          ~~~~~~~~~~~~~~~~~~~~~
          // 我将这行代码注释掉,运行的结果是一个椭圆在IDC_VIEW
          // 中一抖一抖的;
          // 加上这句代码,运行后看不到椭圆了。
       // 请教如何解决?
        }
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
需要重汇吧?
2007-11-7 08:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
应该把按钮设置成自绘模式,响应WM_DRAWITEM消息,在OnDrawItem中完成绘制任务。
2007-11-7 09:21
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我用了下面的代码,可以显示出图形。
前提是需要把 CDialog::OnPaint(); 注释掉。
副作用是显示的图形有闪烁
增加这句话,运行后什么也没有,
移动一下窗口,图形可以显示出来。
可我已经使用了Invalidate和UpdateWindow刷新了
窗口了呀!

CClientDC dc(this);
CRect rc;
GetClientRect(&rc);
dc.Ellipse(&rc);
CEdit *pWnd = (CEdit*)GetDlgItem(IDC_VIEW);
pWnd->Invalidate(TRUE);          // 置窗口为无效状态
pWnd->UpdateWindow();            // 更新窗口
// CDialog::OnPaint();

2007-11-7 17:47
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
5
你要往控件上绘图,就需要响应控件的消息
窗口与控件各有自己的消息处理过程,并非同步,因而可能会出现闪烁
另外,GDI绘图,其实就是往DC上画,而你往窗口DC上画,再怎么刷新也没用
2007-11-9 22:32
0
游客
登录 | 注册 方可回帖
返回
//