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

            大龍的博客

            常用鏈接

            統計

            最新評論

            VC編程小技巧之對話框 -------- 轉

            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中發消息給B然后B處理。
            準備工作,先定義消息,如下
            #define WM_B_NOTIFY WM_USER + 300

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

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

            這樣A中的處理就完了,下面說B 中的
            首先定義消息處理函數,如下
            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.如何改變框對話或窗體視窗的背景顏色

            調用CWinApp : : SetDialogBkColor可以改變所有應用程序的背景顏色。第一個參數指定了背景顏色,第二個參數指定了文本顏色。下例將應用程序對話設置為藍色背景和黃色文本。
            BOOL CSampleApp : : InitInstance ( )
            {

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

            }
            需要重畫對話(或對話的子控件)時,Windows向對話發送消息WM_CTLCOLOR,通常用戶可以讓Windows選擇繪畫背景的刷子,也可重置該消息指定刷子。下例說明了創建一個紅色背景對話的步驟。
            首先,給對話基類增加一人成員變量CBursh :
            class CMyFormView : public CFormView
            {

            private :
            CBrush m_ brush ; // background brush

            } ;
            其次, 在類的構造函數中將刷子初始化為所需要的背景顏色。
            CMyFormView : : CMyFormView ( )
            {
            // Initialize background brush .
            m_brush .CreateSolidBrush (RGB ( 0, 0, 255 ) )
            }
            最后,使用ClassWizard處理WM_CTLCOLOR消息并返回一個用來繪畫對話背景的刷子句柄。注意:由于當重畫對話控件時也要調用該函數,所以要檢測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.如何實現點一下對話框外面的區域,自動隱藏對話框?

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

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

               [程序實現]
                建立名為My的對話框程序.實現如下步驟:
                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列表中就會出現WM_ACTIVATE,選中,點擊Add Handler
                 2)SM_CXDLGFRAME,SM_CYDLGFRAME   NT中取得有WS_DLGFRAMEstyle風格的窗口的高和寬 95中已經廢棄而采用SM_CX_FIXEDFRAMESM_CYFIXEDFRAME

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

               [問題提出]
              為什么FormView中顯示dialog,是凹的,能不能不這樣
               [解決方法]
              Dialog的屬性中:
                增加屬性WS_BORDER   或者 WS_EX_WINDOWEDGE
              用程序實現:
               pView->ModifyStyle(,WS_BORDER) 或者pView->ModifyStyleEx(,WS_EX_WINDOWEDGE )

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

            岛国搬运www久久| 久久国产精品久久精品国产| 久久久久这里只有精品| 伊人色综合久久天天网| 精品乱码久久久久久久| 婷婷久久综合九色综合九七| 久久99这里只有精品国产| 精品免费久久久久久久| 亚洲国产日韩欧美久久| 国产亚洲婷婷香蕉久久精品| 亚洲精品综合久久| 久久精品嫩草影院| 一本久道久久综合狠狠爱| 久久久久亚洲?V成人无码| 久久99精品久久久久久hb无码| 久久精品国产一区二区三区不卡| 久久久无码精品亚洲日韩按摩 | av午夜福利一片免费看久久| 久久国产免费直播| A级毛片无码久久精品免费| 久久国产精品99精品国产| 亚洲国产精品无码久久一区二区| 久久人人爽人人爽人人片AV麻豆 | 91精品无码久久久久久五月天| 亚洲av成人无码久久精品| 亚洲欧美国产日韩综合久久 | 91精品国产色综久久| 久久精品国产影库免费看| 国内精品久久人妻互换| 色婷婷久久综合中文久久蜜桃av | 亚洲午夜无码AV毛片久久| 久久精品成人| 久久午夜福利电影| 色99久久久久高潮综合影院| 99久久综合国产精品二区| 99久久国产免费福利| 久久久久久无码国产精品中文字幕 | 99久久精品国产毛片| 99久久精品免费国产大片| 97久久精品人人做人人爽| 欧美精品一区二区久久|