这是ondraw函数里的内容
HDC hDc;
hDc =::GetDC(m_hWnd);
int X1,X2,Y1,Y2;
CDlgMd mDlg;
X1 = mDlg.x1;
Y1 = mDlg.y1;
X2 = mDlg.x2;
Y2 = mDlg.y2;
float increx,increy;
int step,i;
if(abs(X2-X1) > abs(Y2-Y1))
step = abs(X2-X1);
else
step = abs(Y2-Y1);
increx  = (float)(X2-X1)/step;
increy  = (float)(Y2-Y1)/step;
m_ptOrigin.x = X1;
m_ptOrigin.y = Y1;
for(i=1;i<step;i++)
{
SetPixel(hDc,int(m_ptOrigin.x+0.5),int(m_ptOrigin.y+0.5),RGB(255,0,0));
m_ptOrigin.x = m_ptOrigin.x + increx;
m_ptOrigin.y = m_ptOrigin.y + increy;
}
::ReleaseDC(m_hWnd,hDc);
这是对话框里的内容
UpdateData(TRUE);
CString str1,str2,str3,str4;
GetDlgItemText(IDC_EDIT1,str1);
GetDlgItemText(IDC_EDIT2,str2);
GetDlgItemText(IDC_EDIT3,str3);
GetDlgItemText(IDC_EDIT4,str3);
CDlgMd mDlg;
//int x1,x2,y1,y2
mDlg.x1 = _ttoi(str1);
mDlg.y1 = _ttoi(str2);
mDlg.x2 = _ttoi(str3);
mDlg.y2 = _ttoi(str4);
OnOK();
Invalidate();
我是想通过点击OK,在主界面用DDA算法画一条直线。但是点了OK,什么反应也没有

解决方案 »

  1.   

    View 中通过菜单,打开CDlgMd对话框,同对话框返回值,获取CDlgMd设置的值,然后在Invalidate();
      

  2.   

    请问返回值是如何设置的在对话框中invalidate()吗?谢谢
      

  3.   

    “点击对话框中的OK,view区域”
    view区域 ? 哪里?
    对话框里?
    原来的view里?
      

  4.   

    “这是对话框里的内容 哪里 OnOK() ??
    UpdateData(TRUE);
    CString str1,str2,str3,str4;
    GetDlgItemText(IDC_EDIT1,str1);
    GetDlgItemText(IDC_EDIT2,str2);
    GetDlgItemText(IDC_EDIT3,str3);
    GetDlgItemText(IDC_EDIT4,str3);
    CDlgMd mDlg;
    //int x1,x2,y1,y2
    mDlg.x1 = _ttoi(str1);
    mDlg.y1 = _ttoi(str2);
    mDlg.x2 = _ttoi(str3);
    mDlg.y2 = _ttoi(str4);
    OnOK(); 不退出了 ?
    Invalidate();”
      

  5.   

    “这是ondraw函数里的内容”
    不要“Invalidate();”
    直接调用 ondraw函数 (对话框 应该在 onpaint 中,这个函数可能 没调用)
      

  6.   

    OnOK()以后就结束了吧,没有走invalidate吧?
      

  7.   

    嗯,我后来改了。我在网上查了,感觉是WM_PAINT消息没有传给view的ondraw().但是我不知道怎么写。
      

  8.   

    “没有传给view的ondraw().”
    是 view 啊。
    那 Invalidate(); 要指明 是 view。
    CYourView *pView = (CYourView *)((CMainFrame *)AfxGetApp()->GetMainWnd())->GetActiveView();
    pView->Invalidate()