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的电脑上就不行了?
不知道为什么???
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的系统,
有时候鼠标移过去的时候最大最小化按钮会出现,而且在以前的标题栏下面会出现一条线