如上,怎样改变对话框标题栏的大小?用什么API?

解决方案 »

  1.   

    怎样改变标题栏的宽度:方法一:NONCLIENTMETRICS ncm;
    ncm.cbSize = sizeof( NONCLIENTMETRICS );::SystemParametersInfo( SPI_GETNONCLIENTMETRICS,
    sizeof( NONCLIENTMETRICS ),
    &ncm,
    0
    );ncm.lfCaptionFont.lfHeight = -300;
    ::SystemParametersInfo( SPI_SETNONCLIENTMETRICS,
    sizeof( NONCLIENTMETRICS ),
    &ncm,
    SPIF_SENDCHANGE
    );
     方法二:case WM_NCCALCSIZE: 
    {
    BOOL bSpecial=FALSE;
    int nEdgeWidth =3;
    int nBarHeight =CAPTIONHEIGHT+3;
    int nBottomEdge =3;if(!(BOOL)wParam)
    {
    RECT rtSave;
    CopyRect(&rtSave,(LPRECT)lParam);
    // ::CallWindowProcA(lpwndinfo->pWndProc,hWnd,uMsg,wParam,lParam);
    if(lpwndinfo->bIM ==TRUE)
    {
    int imbarheight =17;
    rtSave.left+=nEdgeWidth;
    rtSave.top+=imbarheight+3;
    rtSave.right-=nEdgeWidth;
    rtSave.bottom-=nBottomEdge;
    }
    else
    {
    rtSave.left+=nEdgeWidth;
    rtSave.top+=nBarHeight;
    rtSave.right-=nEdgeWidth;
    rtSave.bottom-=nBottomEdge;
    }
    CopyRect((LPRECT)lParam,&rtSave);*lResult=0;
    ::ReleaseDC(hWnd,hDC);
    return TRUE;
    }
    else
    {
    RECT rtSave;
    LPRECT prtClt;
    LPNCCALCSIZE_PARAMS pNC;
    pNC=(LPNCCALCSIZE_PARAMS)lParam;prtClt=&(pNC->rgrc[0]);
    CopyRect(&rtSave,prtClt);
    CopyRect( &(pNC->rgrc[2]), &(pNC->rgrc[1]));if(bSysDlg)
    {
    (pNC->rgrc[2]).left +=nEdgeWidth;
    (pNC->rgrc[2]).right -=nEdgeWidth;
    }
    else
    {
    if(lpwndinfo->bIM ==TRUE)
    {
    int imbarheight =17;
    (pNC->rgrc[2]).left +=nEdgeWidth;
    (pNC->rgrc[2]).top +=imbarheight+3;
    (pNC->rgrc[2]).right -=nEdgeWidth;
    (pNC->rgrc[2]).bottom -=nBottomEdge; rtSave.left+=nEdgeWidth;
    rtSave.top+=imbarheight+3;
    rtSave.right-=nEdgeWidth;
    rtSave.bottom-=nBottomEdge;
    }
    else
    {
    (pNC->rgrc[2]).left+=nEdgeWidth;
    (pNC->rgrc[2]).top+=nBarHeight;
    (pNC->rgrc[2]).right-=nEdgeWidth;
    (pNC->rgrc[2]).bottom-=nBottomEdge;
    // Result=::CallWindowProcA(lpwndinfo->pWndProc,hWnd,uMsg,wParam,lParam);
    //prtClt=&(pNC->rgrc[0]);
    rtSave.left+=nEdgeWidth;
    rtSave.top+=nBarHeight;
    rtSave.right-=nEdgeWidth;
    rtSave.bottom-=nBottomEdge;
    }
    }
    CopyRect(prtClt,&rtSave);
    *lResult=0;
    ::ReleaseDC(hWnd,hDC);
    return TRUE;
    }
    break;
    }
      

  2.   

    bohut(◆伯虎◆ /**等待一个小生命的降临**/) 给出了代码,楼主好好研究吧。
      

  3.   

    如我在MFC里使用,有没有更方便的方法啊?谢谢
      

  4.   

    TO:bohut(◆伯虎◆ /**等待一个小生命的降临**/) 
    你好强哦.刚谢谢你哦.
      

  5.   

    如果找不到WM_NCCALCSIZE,进入ClassWizard,选择最后一页选项卡,把下面的message filter修改为window即可。