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

            最新評論

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

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

            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處理。
            準(zhǔn)備工作,先定義消息,如下
            #define WM_B_NOTIFY WM_USER + 300

            首先,必須將B的對話框句柄傳送給A,暫時(shí)叫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可以改變所有應(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 ) ) ;

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

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

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

               [程序?qū)崿F(xiàn)]
                建立名為My的對話框程序.實(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);
                       }
                     }
                 }

                 說明:
                 1)WM_ACTIVATE消息在ClassWizard中沒有,按如下步驟添加,右擊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í),不是凹的

               [問題提出]
              為什么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 大龍 閱讀(440) 評論(0)  編輯 收藏 引用


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


            日产精品久久久一区二区| 久久精品成人国产午夜| 亚洲伊人久久大香线蕉苏妲己| 久久综合综合久久综合| 久久亚洲精品无码aⅴ大香| 亚洲成色www久久网站夜月| 国产精品久久一区二区三区| 午夜人妻久久久久久久久| 久久精品国产亚洲av麻豆蜜芽| 国产精品久久永久免费| 99久久精品免费观看国产| 久久强奷乱码老熟女| 69久久精品无码一区二区| 久久精品国产亚洲沈樵| 久久久综合香蕉尹人综合网| 久久99精品综合国产首页| 精品久久久久久国产免费了| 麻豆精品久久久久久久99蜜桃| 久久综合亚洲色HEZYO社区 | 久久国产乱子伦精品免费午夜| 伊人久久大香线蕉综合Av| 久久精品国产99久久久香蕉| 97久久精品人人澡人人爽| 欧美一区二区久久精品| 久久久久国产精品麻豆AR影院 | 久久综合亚洲色HEZYO国产| 亚洲国产精品无码久久98| 91久久精品国产91性色也| 国内精品久久久久影院老司| 国产精品美女久久福利网站| 亚洲精品无码久久久久久| 国产无套内射久久久国产| 国产成人精品久久一区二区三区| 99久久亚洲综合精品成人| 久久久久久久久久久| 久久se精品一区二区影院| 精品九九久久国内精品| 久久精品中文字幕大胸| 久久精品这里只有精99品| 色综合久久综精品| 久久久久久久亚洲精品|