• <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)計

            最新評論

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

            1.用鼠標移動基于對話框的無標題欄程序的簡單方法

            void CVCTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
            {
                 //一句話解決問題
                 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.對話框消息映射

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

            首先,必須將B的對話框句柄傳送給A,暫時叫m_hWndB;

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

            這樣A中的處理就完了,下面說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可以改變所有應用程序的背景顏色。第一個參數(shù)指定了背景顏色,第二個參數(shù)指定了文本顏色。下例將應用程序?qū)υ捲O置為藍色背景和黃色文本。
            BOOL CSampleApp : : InitInstance ( )
            {

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

            }
            需要重畫對話(或?qū)υ挼淖涌丶r,Windows向?qū)υ挵l(fā)送消息WM_CTLCOLOR,通常用戶可以讓Windows選擇繪畫背景的刷子,也可重置該消息指定刷子。下例說明了創(chuàng)建一個紅色背景對話的步驟。
            首先,給對話基類增加一人成員變量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消息并返回一個用來繪畫對話背景的刷子句柄。注意:由于當重畫對話控件時也要調(diào)用該函數(shù),所以要檢測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.如何實現(xiàn)點一下對話框外面的區(qū)域,自動隱藏對話框?

               [問題提出]
                如果想在點擊對話框外面的地方使得對話框關閉,該如何做?

               [解決方法]
                試試下面的代碼,原理是在激活對話框時,捕獲鼠標的動作,當鼠標點擊時判斷是否點擊在對話框外,是的話就釋放對話框.

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

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

                MyDlg.cpp:

                 //定義消息映象,處理鼠標單擊及激活
                 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);
                       }
                     }
                 }

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

            5.如何使FormView中顯示dialog,不是凹的

               [問題提出]
              為什么FormView中顯示dialog,是凹的,能不能不這樣
               [解決方法]
              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 大龍 閱讀(441) 評論(0)  編輯 收藏 引用

            久久久久久久亚洲Av无码| 日韩电影久久久被窝网| 久久99亚洲网美利坚合众国| 精品久久777| 四虎久久影院| 精品久久久噜噜噜久久久| 激情久久久久久久久久| 亚洲香蕉网久久综合影视| 亚洲综合婷婷久久| 欧美亚洲国产精品久久久久| 久久精品无码专区免费东京热 | 久久亚洲欧美国产精品| 久久久国产精品网站| 久久精品一本到99热免费| 伊人久久综合无码成人网| 久久国产亚洲精品无码| 久久久久亚洲爆乳少妇无| 国产精品99久久精品| 久久久久精品国产亚洲AV无码| 国产福利电影一区二区三区久久久久成人精品综合 | 99久久99这里只有免费的精品| 欧美久久亚洲精品| 亚洲精品高清国产一久久| 久久99久久99精品免视看动漫| 四虎影视久久久免费| 久久黄视频| 国产成人综合久久精品尤物| 久久99精品久久久久久动态图 | 亚洲精品无码久久毛片| 精品国产91久久久久久久a| 九九99精品久久久久久| 久久综合给合久久狠狠狠97色| 亚洲精品午夜国产va久久| 久久久久亚洲爆乳少妇无| 久久国产精品一区| 久久精品国产99久久丝袜| 国产一区二区精品久久岳| 94久久国产乱子伦精品免费 | 久久中文字幕人妻熟av女| 久久影视综合亚洲| 国产免费久久精品99re丫y|