就是说
点击对话框,对话框的标题栏是激活的
点击新添加的窗口,对话框的标题栏也是激活的

解决方案 »

  1.   

    我是这样做的
    CTest* pDlg = new CTest;
    pDlg->Create(IDD_DIALOG1, this);
    pDlg->ShowWindow(SW_SHOW);
    但现在的问题是:
    我点击CTest窗口时,父窗口(即对话框)的标题栏没有激活
    感觉是两个窗口在互相切换
    我希望做成无论点哪个,父窗口的标题栏都是激活的
      

  2.   

    新窗口作为对话框的子窗口,WS_CHILD不知道你说的是不是这个意思?
      

  3.   

    这个…………………………
    俄………………
    首先请响应父对话框的WM_NCACTIVATE消息
    RETURN TRUE;
    OVER但是这么一来,父对话框的标题栏就只能一直都处于激活状态中了
      

  4.   

    5楼的办法也可以,就是将子窗口的对话框资源中的style从popup改成child,但是也有缺陷就是子窗口的标题栏总是未激活状态
      

  5.   

    OnNcActivate(BOOL bActive) 父窗口的消息响应
    return TRUE;
    父窗口总是激活的样子,但是子窗口的控件什么的照样可以用
      

  6.   

    LRESULT CTreeOnwerDrawDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // TODO: Add your specialized code here and/or call the base class
    if(message==WM_NCACTIVATE) wParam=TRUE;
    if(message==WM_NCPAINT) this->SendMessage(WM_NCACTIVATE,TRUE,0);
    return CDialog::DefWindowProc(message, wParam, lParam);
    }
    改进了一下算法
    如果当前消息是WM_NCACTIVATE,那么就使其状态一直激活,当然如果目前要求重绘标题(非客户区),那么也确保一下标题栏的状态是激活
    这个代码很废,但是目的就是告诉楼主标题栏的状态绘图是由WM_NCACTIVATE来控制的,wParam为真代表当前状态激活,否则代表状态未激活,你可以通过在执行默认调用前修改这个参数来达到你想要的目的
      

  7.   

    自绘就是我前面说的假窗口就是用button什么的模拟一个窗口的动作ls的方法也很巧妙但是有点像是欺骗
      

  8.   

    回15楼
    你的DefWindowProc这个函数是在父窗口还是子窗口?
      

  9.   

    Cool! XDialogHeader
    http://blog.csdn.net/DavidHsing/archive/2008/04/15/2294380.aspx