• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            VC編程小技巧之對(duì)話框 -------- 轉(zhuǎn)

            1.用鼠標(biāo)移動(dòng)基于對(duì)話框的無(wú)標(biāo)題欄程序的簡(jiǎn)單方法

            void CVCTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
            {
                 //一句話解決問(wèn)題
                 SendMessage(WM_SYSCOMMAND,0xF012,0);
                 CDialog::OnLButtonDown(nFlags, point);
            }

                SendMessage(FrmMain->Handle,WM_SYSCOMMAND,SC_MAXIMIZE,0);  //最大化窗體

                SendMessage(FrmMain->Handle,WM_SYSCOMMAND,SC_RESTORE,0); //還原窗體

                SendMessage(FrmMain->Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); //最小化窗體

            2.對(duì)話框消息映射

            有對(duì)話框A,B
            A中發(fā)消息給B然后B處理。
            準(zhǔn)備工作,先定義消息,如下
            #define WM_B_NOTIFY WM_USER + 300

            首先,必須將B的對(duì)話框句柄傳送給A,暫時(shí)叫m_hWndB;

            A的發(fā)送消息的地方這樣寫(xiě):
            ::SendMessage( m_hWndB,WM_B_NOTIFY,TRUE,NULL );

            這樣A中的處理就完了,下面說(shuō)B 中的
            首先定義消息處理函數(shù),如下
            void B::ModiNotify( WPARAM wParam, LPARAM lParam )
            {
                 MessageBox("小樣,我就不信,搞不定你!");
            }

            然后加消息隱射,如下:
            BEGIN_MESSAGE_MAP(CB, CDialog)
                 //{{AFX_MSG_MAP(CRPServerDlg)

                 ON_MESSAGE( WM_B_NOTIFY,ModiNotify )

                 //}}AFX_MSG_MAP
            END_MESSAGE_MAP()

             

            3.如何改變框?qū)υ捇虼绑w視窗的背景顏色

            調(diào)用CWinApp : : SetDialogBkColor可以改變所有應(yīng)用程序的背景顏色。第一個(gè)參數(shù)指定了背景顏色,第二個(gè)參數(shù)指定了文本顏色。下例將應(yīng)用程序?qū)υ捲O(shè)置為藍(lán)色背景和黃色文本。
            BOOL CSampleApp : : InitInstance ( )
            {

            //use blue dialog with yellow text .
            SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 , 255 , 0 ) ) ;

            }
            需要重畫(huà)對(duì)話(或?qū)υ挼淖涌丶r(shí),Windows向?qū)υ挵l(fā)送消息WM_CTLCOLOR,通常用戶可以讓Windows選擇繪畫(huà)背景的刷子,也可重置該消息指定刷子。下例說(shuō)明了創(chuàng)建一個(gè)紅色背景對(duì)話的步驟。
            首先,給對(duì)話基類增加一人成員變量CBursh :
            class CMyFormView : public CFormView
            {

            private :
            CBrush m_ brush ; // background brush

            } ;
            其次, 在類的構(gòu)造函數(shù)中將刷子初始化為所需要的背景顏色。
            CMyFormView : : CMyFormView ( )
            {
            // Initialize background brush .
            m_brush .CreateSolidBrush (RGB ( 0, 0, 255 ) )
            }
            最后,使用ClassWizard處理WM_CTLCOLOR消息并返回一個(gè)用來(lái)繪畫(huà)對(duì)話背景的刷子句柄。注意:由于當(dāng)重畫(huà)對(duì)話控件時(shí)也要調(diào)用該函數(shù),所以要檢測(cè)nCtlColor參量。
            HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor )
            {
            // Determine if drawing a dialog box . If we are , return +handle to
            //our own background brush . Otherwise let windows handle it .
            if (nCtlColor = = CTLCOLOR _ DLG )
            return (HBRUSH) m_brush .GetSafeHandle ( ) ;
            return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor );
            }

            4.如何實(shí)現(xiàn)點(diǎn)一下對(duì)話框外面的區(qū)域,自動(dòng)隱藏對(duì)話框?

               [問(wèn)題提出]
                如果想在點(diǎn)擊對(duì)話框外面的地方使得對(duì)話框關(guān)閉,該如何做?

               [解決方法]
                試試下面的代碼,原理是在激活對(duì)話框時(shí),捕獲鼠標(biāo)的動(dòng)作,當(dāng)鼠標(biāo)點(diǎn)擊時(shí)判斷是否點(diǎn)擊在對(duì)話框外,是的話就釋放對(duì)話框.

               [程序?qū)崿F(xiàn)]
                建立名為My的對(duì)話框程序.實(shí)現(xiàn)如下步驟:
                MyDlg.h中加入:

                 class CShowWindow1Dlg : public CDialog
                 {
                 // Construction
                 public:
                     int m_cx;
                     int m_cy;
                     ......
                 };

                MyDlg.cpp:

                 //定義消息映象,處理鼠標(biāo)單擊及激活
                 BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
                     //{{AFX_MSG_MAP(CMyDlg)
                     ON_WM_LBUTTONDOWN()
                     ON_WM_ACTIVATE()
                     //}}AFX_MSG_MAP
                 END_MESSAGE_MAP()

                 void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
                 {
                     CRect rect;
                     GetClientRect(&rect);
                     rect.InflateRect(m_cx, m_cy);
              
                     //Release dialog if the user click outside it.
                     if(!rect.PtInRect(point))
                     {
                       EndDialog(IDCANCEL);
                     }

                     CDialog::OnLButtonDown(nFlags, point);
                 }

                 void CMyDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
                 {
                     CDialog::OnActivate(nState, pWndOther, bMinimized);

                     if( nState == WA_ACTIVE || nState == WA_CLICKACTIVE)
                         SetCapture();
                     else
                         ReleaseCapture();
                 }

                 BOOL CMyDlg::OnInitDialog()
                 {
                     CDialog::OnInitDialog();
                     .....
                    
                     OSVERSIONINFO info;
                     memset((char*)&info, 0, sizeof(OSVERSIONINFO));
                     info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
                     if(GetVersionEx(&info))
                     {   //we don't run on Win32s, so check only two values
                       if(info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
                       {   //On windows 95
                           m_cx = GetSystemMetrics(SM_CXFIXEDFRAME);
                           m_cy = GetSystemMetrics(SM_CYFIXEDFRAME);
                       }
                       else
                       {   //On NT
                           m_cx = GetSystemMetrics(SM_CXDLGFRAME);
                           m_cy = GetSystemMetrics(SM_CYDLGFRAME);
                       }
                     }
                 }

                 說(shuō)明:
                 1)WM_ACTIVATE消息在ClassWizard中沒(méi)有,按如下步驟添加,右擊CMyDlg,Add Windows Message Handle,接著在Filter for messages available to中選Window,New Windows messages/events列表中就會(huì)出現(xiàn)WM_ACTIVATE,選中,點(diǎn)擊Add Handler
                 2)SM_CXDLGFRAME,SM_CYDLGFRAME   NT中取得有WS_DLGFRAMEstyle風(fēng)格的窗口的高和寬 95中已經(jīng)廢棄而采用SM_CX_FIXEDFRAMESM_CYFIXEDFRAME

            5.如何使FormView中顯示dialog時(shí),不是凹的

               [問(wèn)題提出]
              為什么FormView中顯示dialog時(shí),是凹的,能不能不這樣
               [解決方法]
              Dialog的屬性中:
                增加屬性WS_BORDER   或者 WS_EX_WINDOWEDGE
              用程序?qū)崿F(xiàn):
               pView->ModifyStyle(,WS_BORDER) 或者pView->ModifyStyleEx(,WS_EX_WINDOWEDGE )

            posted on 2009-01-07 02:45 大龍 閱讀(442) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            99精品久久精品一区二区| 999久久久国产精品| 97精品伊人久久久大香线蕉 | 久久久久这里只有精品| 亚洲国产日韩欧美综合久久| 久久狠狠高潮亚洲精品| 99久久精品这里只有精品 | 国产精品99精品久久免费| 88久久精品无码一区二区毛片| 久久人人爽人人爽人人片AV麻豆| 亚洲精品乱码久久久久久蜜桃不卡 | 久久99国产精品久久99| 久久久精品日本一区二区三区 | 免费观看久久精彩视频| 亚洲伊人久久综合影院| 97超级碰碰碰碰久久久久| 久久久一本精品99久久精品88| 亚洲国产一成久久精品国产成人综合| 久久人人爽爽爽人久久久| 欧美性猛交xxxx免费看久久久| 久久综合综合久久97色| 99久久无码一区人妻a黑| 2021国产精品午夜久久| 久久综合色之久久综合| 伊人久久综在合线亚洲2019| 97久久久精品综合88久久| 久久精品国产亚洲av麻豆图片| 免费一级做a爰片久久毛片潮| 久久精品成人免费网站| jizzjizz国产精品久久| 亚洲va中文字幕无码久久| 婷婷综合久久狠狠色99h| 国产成人精品免费久久久久| 亚洲va久久久噜噜噜久久狠狠| 2019久久久高清456| 日本WV一本一道久久香蕉| 久久福利资源国产精品999| 亚洲人成无码久久电影网站| 思思久久99热只有频精品66| 久久这里只有精品首页| 欧美va久久久噜噜噜久久|