基于对话框的程序,使用WIN32 API。我自绘了对话框的边框,在对话框回调函数中用到了以下代码: if(uMsg == WM_MOVE || uMsg == WM_PAINT || uMsg == WM_NCPAINT || uMsg ==  WM_NCACTIVATE ||  uMsg == WM_ACTIVATE)
{
hdcNc = GetWindowDC(hwndDlg); if(hdcNc)
{
badaDialogMng.DrawFrame(hdcNc); /*绘制边框函数*/
ReleaseDC(hwndDlg,hdcNc);
}
return (INT_PTR)TRUE;
}绘画正常,然后我又在此对话框的基础上生成一个子对话框,用来设置参数用,但是子对话框无法被激活,标题栏总是灰蓝色,鼠标点也没用。
后来我发现是因为在响应了WM_NCACTIVATE后,return (INT_PTR)TRUE 造成的。可是我如果不return TRUE,标题栏会被重新画成默认的。这个问题困扰我很久了,麻烦各位高手给与耐心的解答!

解决方案 »

  1.   

    你创建的应该是非模态对话框吧?子对话框不能获取WM_ACTIVATE和WM_NCACTIVATE消息,都被父窗口处理完了。
      

  2.   

    在响应对话框激活消息是,向子对话框发送WM_ACTIVATETOPLEVEL消息。
      

  3.   

    http://blog.csdn.net/commandos/archive/2007/11/27/1904558.aspx
      

  4.   

    我补充下,其实不是子对话框,用以下的语句生成CreateDialog(hInst,MAKEINTRESOURCE(IDD_SET_PARAM),NULL,ParamDialogProc);