<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    積累的VC編程小技巧之屬性頁

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    1.屬性頁的添加:

    創建對話框的類,該類要從CpropertyPage繼承;然后在要添加該對話框為屬性頁的類(頭文件)里創建CpropertySheet類的一個對象m_tabsheet和新創建的對話框類的對象m_skatch;最后,在.cpp文件里的OnInitDialog()之類的函數里實現如下代碼:

    m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, 0);

       //使選項卡的按鈕在下面

       if(m_tabsheet.m_hWnd)

       m_tabsheet.ShowWindow(SW_MAXIMIZE);//顯示選項卡

    //加入標簽,標簽名由各個子對話框的標題欄決定

       m_tabsheet.AddPage(&m_skatch);

       //用Create來創建一個屬性頁

       m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);

      

    RECT rect;

       m_tabsheet.GetWindowRect(&rect);

       int width = rect.right - rect.left;

       int height = rect.bottom - rect.top;

      

       //調整屬性頁的大小和位置

       m_tabsheet.SetWindowPos(NULL, 225, 225, width-82, height,SWP_NOACTIVATE);

    屬性頁的添加完成。如果要添加多個屬性頁,則只需要增加多個對象,如下:m_tabsheet.AddPage(&m_skatch1);

        m_tabsheet.AddPage(&m_skatch2);

    . . . . . .

     

    2.更改屬性頁標題

    void CProSheet::SetPageTitle(int nPage, int nImage, CString strTitle)

    {

      TC_ITEM item;

      //item.mask = TCIF_TEXT|TCIF_IMAGE;    //設置圖標+文字

      item.mask = TCIF_IMAGE;        //只設置圖標

      item.iImage = nImage;

    // item.pszText = strTitle.GetBuffer(0);    //設置文字

      GetTabControl ()->SetItem (nPage, &item);

    //要設置文字時就將上面2行有注釋符的代碼前的注釋符去掉

    }

     

    3.屬性頁處理通知消息

    CPropertyPageImpl有一個消息映射處理WM_NOTIFY。如果通知代碼是PSN_*的值,OnNotify()就會調用相應的通知處理函數。這使用了編譯階段虛函數機制,從而使得派生類可以很容易的重載這些處理函數。

    由于WTL 3和WTL 7設計的改變,從而存在兩套不同的通知處理機制。在WTL 3中通知處理函數返回的值與PSN_*消息的返回值不同,例如,WTL 3是這樣處理PSN_WIZFINISH的:

    case PSN_WIZFINISH:
    lResult = !pT->OnWizardFinish();
    break;

    OnWizardFinish()期望返回TRUE結束向導,FALSE阻止關閉向導。這個方法很簡陋,但是IE5的通用控件對PSN_WIZFINISH處理的返回值添加了新解釋,他返回需要獲得焦點的窗口的句柄。WTL 3的程序將不能使用這個特性,因為它對所有非0的返回值都做相同的處理。

    在WTL 7中,OnNotify() 沒有改變 PSN_* 消息的返回值,處理函數返回任何文檔中規定的合法數值和正確的行為。當然,為了向前兼容,WTL 3 仍然使用當前默認的工作方式,要使用WTL 7的消息處理方式,你必須在中including atldlgs.h一行之前添加一行定義:

    #define _WTL_NEW_PAGE_NOTIFY_HANDLERS

    編寫新的代碼沒有理由不使用WTL 7的消息處理函數,所以這里就不介紹WTL 3的消息處理方式。

    CPropertyPageImpl 為所有消息提供了默認的通知消息處理函數,你可以重載與你的程序有關的消息處理函數完成特殊的操作。默認的消息處理函數和相應的行為如下:

    int OnSetActive() - 允許頁面成為激活狀態

    BOOL OnKillActive() - 允許頁面成為非激活狀態

    int OnApply() - 返回 PSNRET_NOERROR 表示應用操作成功完成

    void OnReset() - 無相應的動作

    BOOL OnQueryCancel() - 允許取消操作

    int OnWizardBack() - 返回到前一個頁面

    int OnWizardNext() - 進行到下一個頁面

    INT_PTR OnWizardFinish() - 允許向導結束

    void OnHelp() - 無相應的動作

    BOOL OnGetObject(LPNMOBJECTNOTIFY lpObjectNotify) - 無相應的動作

    int OnTranslateAccelerator(LPMSG lpMsg) - 返回 PSNRET_NOERROR 表示消息沒有被處理

    HWND OnQueryInitialFocus(HWND hWndFocus) - 返回 NULL 表示將按Tab Order順序的第一個控件設為焦點狀態

     

    4.屬性頁標題改名

    我用CPropertySheet創建屬性頁,用的CPropertyPage對象只有一個,也就是每個屬性頁的內容一樣.現在的問題是:這樣每個屬性頁的標題都是一樣的,是對話框的標題!怎樣動態的改變這個標題,使每個屬性頁的標簽的名稱都不同??


    CTabCtrl * pCtrl = pSheet->GetTabControl();
    TCITEM tc;
    tc.mask = TCIF_TEXT;
    tc.pszText = "新標題";
    pCtrl->SetItem(0,&tc);//0即是你要改的TAb的索引

     

    5.怎樣去掉屬性頁的Apply與Help按鈕?

    //去掉Help
        m_psh.dwFlags |= PSH_HASHELP ;
        m_psh.dwFlags &= ~PSH_HASHELP ;

    //除掉應用按鈕  m_psh.dwFlags|=PSH_NOAPPLYNOW;

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全