void CTestDlg::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int myCaptionHeight = 50;   
int myLeftBorderWeight =10;   
int myRightBorderWeight =10;   
int myBottomBorderWeight =10;    if (bCalcValidRects)   
{   
CRect& rc = (CRect&)lpncsp->rgrc[0];//get the client rectangle    rc.top += myCaptionHeight - GetSystemMetrics(SM_CYCAPTION) - GetSystemMetrics(SM_CYDLGFRAME);   
rc.left += myLeftBorderWeight - GetSystemMetrics(SM_CYDLGFRAME);   
rc.bottom -= myBottomBorderWeight - GetSystemMetrics(SM_CYDLGFRAME);   
rc.right -= myRightBorderWeight - GetSystemMetrics(SM_CYDLGFRAME);    }   
CDialog::OnNcCalcSize(bCalcValidRects, lpncsp);
}
我通过以上方法修改标题栏高度,在我的电脑上可以实现,我的电脑是XP的,但是换到一个windows03的电脑上就不行了?
不知道为什么???

解决方案 »

  1.   

    windows经典和带主题的对话框标题栏的高度是不一样的.之前我也出现过这样的问题.我的解决办法是.去掉窗体的标题栏..全部改为自绘的方式.要是依靠API去操作标题栏是不行的.你到win7下面全部都恢复默认状态.
      

  2.   


    case WM_NCCALCSIZE:
    {
    if (wParam == TRUE)
    {
    //LRESULT lRet = CallWindowProc(g_pfnOldProc, hwnd, uMsg, wParam, lParam);
    //::MessageBox(hwnd,L"aaa",L"AAA",0);
    LPNCCALCSIZE_PARAMS lp = (LPNCCALCSIZE_PARAMS)lParam;
    lp->rgrc[0].top += MY_CAPTION - GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYCAPTION);
    lp->rgrc[0].left += MY_SKINWIDTH - GetSystemMetrics(SM_CYFRAME);
    lp->rgrc[0].bottom -= MY_SKINWIDTH - GetSystemMetrics(SM_CYFRAME);
    lp->rgrc[0].right -= MY_SKINWIDTH - GetSystemMetrics(SM_CYFRAME);
    //::MessageBox(hwnd,L"aaa1",L"AAA1",0);
    }
    break;
    }
    上面的问题已近解决了,在窗口OnInitDialog()函数中加一个SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOZORDER |
    SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_DRAWFRAME);就行了。
    但是又遇到新的问题,还是03的系统,
    有时候鼠标移过去的时候最大最小化按钮会出现,而且在以前的标题栏下面会出现一条线