基於對話方塊的MFC程式實現RTL風格的一種方式

2021-07-11 18:02:35 字數 988 閱讀 4865

作業系統使用阿拉伯語時,微軟作業系統為了適應阿拉伯語地區和希伯來語地區自右向左的閱讀習慣,提供了獨特的rtl的介面風格。

怎麼才能實現應用程式和作業系統保持一致的rtl風格呢?搜尋了一些關於rtl介面實現的資料,網上大多數是通過遍歷程式視窗,依次呼叫modifystyleex系統api來實現的。基於對話方塊的mfc程式的視窗樣式是通過資源檔案預先定義的。基於對話方塊的mfc程式建立視窗時,程式通重載入資源中對應的視窗資源(就是程式設計中常見的idd_dialog_***)來實現視窗顯示樣式。這裡注意一下,我這裡說的建立方式僅僅包括通過cdialog::domodal()或者cdialog::create()等可以指定視窗資源id的方法(domodal方式使用標頭檔案中語言設定好的資源id)。

既然定義了視窗樣式的資源資訊已經預先載入到了系統記憶體中,那麼這樣就給我們提供了乙個機會,在視窗建立之前修改mfc資源中關於視窗顯示樣式的定義部分。

首先建立乙個函式,查詢視窗資源並修改視窗樣式:

hresload = loadresource(null, hres);

if (hresload == null)

lpreslock = lockresource(hresload);

if (lpreslock == null)

//在記憶體中直接修改對話方塊樣式

typedef struct dlgtemplateex;

dlgtemplateex* pdlgtemplate = (dlgtemplateex*)lpreslock;

pdlgtemplate->exstyle |= (ws_ex_layoutrtl | ws_ex_rtlreading);

return true;}

建立乙個類成員函式,統一設定程序的rtl介面風格:

在開始建立視窗之前呼叫setrtlui函式,統一設定資源檔案中的樣式:

MFC基於對話方塊程式

001 020 else if nresponse idcancel 如果對話方塊是用取消來關閉的,則 021 025 026 由於對話方塊已關閉,所以將返回 false 以便退出應用程式,027 而不是啟動應用程式的訊息幫浦。028 return false 029 因為initinstance ...

mfc 對話方塊程式 托盤實現

1 在標頭檔案裡面定義 訊息 define wm showtask wm user 10 在主視窗類裡面定義 乙個變數 兩個函式 a 變數 托盤結構體的變數 notifyicondata m nid b 初始化上述變數的函式 void totray void c 托盤的訊息處理函式 lresult ...

MFC 對話方塊程式 模式對話方塊與非模式對話方塊

一 根據主視窗型別,mfc軟體工程可以分為以下幾種架構模型 例如 記事本和畫筆等。2 mdi multiple document inte ce 多文件介面,乙個主框架視窗下可以同時編輯多份文件。例如 vc 6.0,photoshop等軟體。3 基於對話方塊的軟體模型 主視窗是通過資源管理器,在對話...