您的位置: 旅游網 > 明星 >> 林心如

    中創建不可改變大小的窗口及其限制窗口計劃

    發布時間:2021-10-28 05:36:55

    其實方法很多的,這里列出幾個比較常見的方法來,

    這里是以SDI的框架窗口為例子來試驗的。

    1.創建一個最大化的窗口,并且不能改變其大小

    那么首先,

    app的InitInstance中

    在原來pMainFrame-ShowWindow(m_nCmdShow);

    的前面加上

    DWORD dwStyle = GetWindowLongm_pMainWnd-m_hWnd, GWL_STYLE);

    // dwStyle = ~(WS_SIZEBOX);

    dwStyle = ~(WS_MAXIMIZEBOX);

    dwStyle = ~(WS_MINIMIZEBOX);

    SetWindowLong(m_pMainWnd-m_hWnd, GWL_STYLE, dwStyle);

    二、“三會”運作中存在的不規范情況 m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED);

    然后把m_pMainWnd-ShowWindow(m_nCmdShow);可以刪了

    這里我把dwStyle = ~(WS_SIZEBOX);注釋調了,因為把這個屬性去掉的話,會產生麻煩,就是我這個窗口最大話顯示的時候,

    會把任務欄也遮了,靠,實在是另人郁悶

    但是如果不把這個屬性去掉的話,那么通過拖拉,還是可以改變這個窗口的大小的,那怎么辦呢,

    真傷腦筋阿,換個思路吧

    一般窗口大小的改變,都是用戶拖動窗口邊框而造成的。所以,我們可以截獲主窗口消息WM_NCHITTEST在其響應函數中判斷CWnd::OnNcHitTest()的返回值是否為HTRIGHT,HTLEFT,HTTOP,HTBOTTOM四個值之一,如果是,說明用戶此時已點擊了四個邊框之一,此時我們應該返回HTCLIENT.那么,鼠標的形狀就不會變成水平或垂直的雙向箭頭,用戶就不可能依靠拖動邊框來改變窗口大小了。

    用class wizard看了以下,竟然沒有找到WM_NCHITTEST這個消息,郁悶,只能手動添加消息映射了

    在BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)下添上

    ON_WM_NCHITTEST()

    在框架類的頭文件下

    聲明

    afx_msg UINT OnNcHitTest(CPoint point);

    實現

    UINT CMainFrame::OnNcHitTest(CPoint point)

    {

    if(CWnd::OnNcHitTest(point) == HTRIGHT || CWnd::OnNcHitTest(point) == HTLEFT || CWnd::OnNcHitTest(point) == HTTOP || CWnd::OnNcHitTest(point) == HTBOTTOM)

    return HTCLIENT;

    return CWnd::OnNcHitTest(point);

    }

    這樣好了嗎,沒

    這只是限制了四條邊,雖然不能拖拉四條邊了,但是四個角阿呢,郁悶,真麻煩

    再加上

    HTTOPLEFT

    HTTOPRIGHT

    HTBOTTOMLEFT

    HTBOTTOMRIGHT

    這樣4邊+4角,靠,看你怎么玩

    圓滿了嗎??

    沒,還缺一點點 ,缺什么

    雙擊窗口最上方也就是caption區域時窗口會變小,而且沒辦法回復

    怎么辦??

    涼拌………………

    有辦法的啦

    添加ON_WM_NCLBUTTONDBLCLK消息

    void CMainFrame::OnNcLButtonDblClk(UINT nFlags, CPoint point)

    {

    if(nFlags != HTCAPTION)

    CFrameWnd::OnNcLButtonDblClk(nFlags, point);

    }

    手動添加一下

    WM_NCLBUTTONDBLCLK

    這個消息的處理

    記得BEGIN_MESSAGE_MAP

    那邊要加

    ON_WM_NCLBUTTONDBLCLK

    這也是手動添加了消息映射,處理以下,ok,搞定,手工

    2.創建一個不可改變大小的窗口,

    哦,yeah,這個簡單了

    app的InitInstance中

    在原來pMainFrame-ShowWindow(m_nCmdShow);

    的前面加上

    DWORD dwStyle = GetWindowLongm_pMainWnd-m_hWnd, GWL_STYLE);

    dwStyle = ~(WS_SIZEBOX);

    SetWindowLong(m_pMainWnd-m_hWnd, GWL_STYLE, dwStyle);

    m_pMainWnd-ShowWindow(SW_SHOW);

    如果還想把最大,最小話窗口去掉,再加上這個

    dwStyle = ~(WS_MAXIMIZEBOX);

    dwStyle = ~(WS_MINIMIZEBOX);

    把 (WS_SIZEBOX)去掉以后,我們就不能改變窗口大小了,

    當然,也可以用WM_NCHITTEST的方法了

    3.限制窗口的大小范圍

    響應WM_GETMAXMININFO 的消息

    處理之

    void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)

    {

    // TODO: Add your message handler code here and/or call default

    lpMMI-ptMinTrackSize.x = 100 ;

    lpMMI-ptMinTrackSize.y = 100 ;

    lpMMI-ptMaxTrackSize.x = 200 ;

    lpMMI-ptMaxTrackSize.y = 200;

    CFrameWnd::OnGetMinMaxInfo(lpMMI);

    }

    這樣的話,窗口就被我框死啦,嘿嘿

    長和寬的范圍都是

    當然

    MINMAXINFO這個結構體內容也是非常豐富的,可以做的事很多,具體可以察msdn了。

    海口陽痿治療費用多少錢
    孩子不吃飯有什么好方法
    成都包皮包莖治療哪家好
    猜你會喜歡的
    猜你會喜歡的
    主站蜘蛛池模板: 紧扣的星星完整版免费观看| 8天堂资源在线| 日韩欧美精品综合一区二区三区| 伊人大杳焦在线| 青草午夜精品视频在线观看| 国产香港明星裸体XXXX视频| 中文字幕一区精品| 欧洲一区二区三区在线观看| 人人妻人人澡人人爽人人dvd| 色屁屁在线观看视频免费| 国产精品一二三区| 99国产精品99久久久久久| 成人免费午夜视频| 久久国产乱子伦免费精品| 欧美人与动性xxxxx杂性| 好吊操视频在这星| 久久精品视频网站| 欧美精品黑人粗大| 免费观看激色视频网站bd| 67194成l人在线观看线路无码| 成人免费视频一区二区| 久久精品视频7| 欧美极品第一页| 免费国产黄网站在线观看视频| 被滋润的艳妇疯狂呻吟白洁老七| 国产精品久久久久9999赢消| AV中文无码乱人伦在线观看| 成人性生交大片免费看| 久久婷婷人人澡人人爱91| 欧美大交乱xxxxxbbb| 亚洲视频第一页| 精品国产一区二区三区色欲| 国产主播一区二区| 成人三级精品视频在线观看| 国产精品无码素人福利不卡| asspics美女裸体chinese| 性欧美video在线播放| 久久久久亚洲av成人网人人软件| 最近中文字幕高清中文字幕电影二 | 欧美jizz18欧美| 亚洲欧美精品伊人久久|