如题,我的SDI中View类名为CALocationProView,菜单栏中“设置”弹出对话框(类CSETDlg),对话框中改变数据如变量m_strGPS,我想在CALocationProView的OnDraw函数中,将更新的m_strGPS画在显示区中,不能用TextOut吗?
刚学VC,这个简单的我都不会!请高手指导下啊!另外我在OnDraw中添加:
CSETDlg dlg(this);
CString str1;
if(CSETDlg.DoModel()==IDOK)
{
 str1=dlg.m_strGPS;
}
pDC->TextOut(1000,1000,str1);然后运行SDI就先弹出对话框SETDlg,点OK后确实显示出了m_strGPS的值,但是如果移动窗口或者最大化等就又弹出SETDlg,这是怎么回事?怎么修改啊?

解决方案 »

  1.   

    设置一个bool型CALocationProView的成员变量,以确定是否需要弹出对话框
      

  2.   


    是在CALocationProView中加入BOOL m_bDlg;
    然后 怎么具体做啊?我刚学 给下代码啊
      

  3.   

    你不能在OnDraw()里DoModel(),DoModel()是让对话框模态方式显示,而OnDraw()只要在窗口重绘的时候就会发生,就弹出对话框了。你应该给这个应用程序里对“设置”这个菜单项的对应ID添加一个处理函数(一般是放在程序里基于CFrameWnd的那个类里),在里面执行对话框的DoModel()。把这个对话框添加为CFrameWnd的一个成员变量,放在类声明里:
    protected:
        CSETDlg dlg;
    最好在主窗口的构造函数里对其m_strGPS进行初始化。
    这样你就可以随时使用dlg.m_strGPS了。
      

  4.   

    抱歉,写错了,最好写成public:,这样你的View才能访问到。
      

  5.   

    我是在“设置”对应ID添加了响应的,点“设置”弹出对话框
    void CMainFrame::OnMenuComset() 
    {
    // TODO: Add your command handler code here
    CMSCommSetDlg dlg(this);
    dlg.DoModal();
    }你说的主窗口是在Doc里还是View里?
    我在OnDraw里定义的 CMSCommSetDlg dlg(this);CString m_s1;
    // CMSCommSetDlg dlg;
     //   if (dlg.DoModal()   ==   IDOK) 
    {
      m_s1   =   dlg.m_strBaud_GPS;
      pDC->TextOut(1000,2000,m_s1);
    }
    pDC->TextOut(880,xz+50,"0");
    pDC->TextOut(1475,xz+50,"1500");这样貌似也能显示,但好像不合适吧?
      

  6.   

    你想想“如果移动窗口或者最大化等”那么你的窗口就需要“重画”,这时OnDraw()会被调用。