做了一个Tab Ctrl 下面有三个页面, 如:点tab1 ,则显示pag1,点tab2,则显示pag2,点击tab3,则显示pag3,
pag1上做了一些例如复选框一样的控件,让用户做选择划线的类型,然后在pag1上动态的画线,但是当点击了tab2 又点击了tab1 ,线却仍然接着原来的画(我想要的的结果是,此时不接着画,而是仍让用户做选择,然后再划线),我该获得哪个消息?应该怎么办?

解决方案 »

  1.   

    在切回Tab1的时候不要响应OnPaint画线。设置个变量判断一下
      

  2.   

    OnSelchangingTab1(NMHDR* pNMHDR, LRESULT* pResult) 
      

  3.   

    响应TabCtrl的TCN_SELCHANGE消息可以。加上对于这个消息的处理函数,在处理函数中获取当前的Page号,如果是Page1的话将那个复选框复位即可。
    不用判断是否为page1也行哈,反正出现切换就复位复选框就能达到想要的效果。示例代码:void XXX::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
    {
    int nCur=m_TabCtrl.GetCurSel();//获取当前选择的Page序号
    if(nCur == 1) //复位复选框
    *pResult = 0;
    }
      

  4.   

    各位说得都很对,但还有另外一个问题,我想在程序开始前加一个登陆框,这两行放到哪个地方合适呢? 
    CLogin login;
    login.DoModal();
      

  5.   

    我试了在Ctest1Dlg(主对话框)::OnInitDialog()中添加,则程序不能显示,为什么呢?究竟添加到哪里合适呢?
      

  6.   

    放到InitInstance里,主窗口出现之前。
      

  7.   

    用全局变量通信,然后在page1的InitDialog里根据这个变量画。
      

  8.   


    void CYourLogInDlg::OnOK() 
    {
    //这里验证用户名和密码

    //不通过 return //如果验证通过
    CYourLogInDlg::OnOK();//Login完毕,结束。        //主页面出现
    CMainDlg dlg = new CMainDlg();
    dlg.DoModal();
    }
      

  9.   

    放在InitInstance主程序DoModal之前调用login.DoModal()不行吗?