写了这样几句程序:
BOOL Cceshi::OnInitDialog() 
{
CDialog::OnInitDialog();

    pWnd = GetDlgItem(IDC_MYSTATIC);

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}
void Cceshi::OnButton1() 
{
    OnPaint();
}void Cceshi::OnPaint()
{
CDC *pDC = pWnd->GetDC(); 
    pDC->Rectangle(0, 0, 380, 390);  
    pDC ->MoveTo(20, 20); 
    pDC ->LineTo(20, 360);

其他的只在对话框头文件里定义了个CWnd *pWnd;
IDC_MYSTATIC是个Stativ Text,我想按下OnButton1画图,可是一点OnButton1程序就崩溃;
求解,谢谢

解决方案 »

  1.   

    设断点跟踪一下,不要在onpaint里面画。
      

  2.   

    直接将OnPain中的代码放到OnButton1中就应该可以了
      

  3.   

    我试了一下没问题,在OnPaint函数中最后加入CDialog::OnPaint();
    还有就是你的static text要足够的大,已够画图用.实现代码如下:
    void Cceshi::OnPaint()
    {
        CDC *pDC = pWnd->GetDC();
        pDC->Rectangle(0,0,380,390);
        pDC->MoveTo(20,20);
        pDC->LineTo(20,360);
        CDialog::OnPaint();
    }
    呵呵,如果成功了,记得给分哦....
      

  4.   

    代码问题不大,但是你的处理逻辑有问题。因为:你的绘图代码是放在OnPaint()里面的,当窗口移动、放大、缩小时,MFC也会自动调用OnPaint()函数进行窗口重绘的,此时,你的OnButton1()无法发挥控制作用。
    试试如下代码:
    BOOL logic  = FALSE;//声明一个全局变量
    //画图
    void CTestDlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中
    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; // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    if (logic == TRUE)
    {
    CStatic* pstatic = (CStatic*)GetDlgItem(IDC_STATIC1);
    CDC* pdc  = pstatic->GetDC();
    pdc->Rectangle(0, 0, 380, 390);  
    pdc ->MoveTo(0, 0); 
    pdc ->LineTo(320, 360);
    }

    //CDialog::OnPaint();//把它注释掉
    }
    }
    //按钮响应
    void CTestDlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    logic = TRUE;
    Invalidate();
    }
      

  5.   

    void Cceshi::OnPaint()
    有自动生成的代码, 不应该删除.