comdlg32.dll 為我們提供了一些很有用的對話方塊,但是仍然有部分我們可能會用到的系統對話方塊它卻沒有提供。如果試圖複製這些系統對話方塊將是一件麻煩的苦差事。幸好 shell32.dll為我們提供了這些對話方塊,本文將帶你去發掘一些未公開的api函式,以實現這些對話方塊。
在使用未公開的api函式之前,你必須知道宣告未公開的api函式與宣告那些公開的api函式略有不同,那就是,你必須用到未公開api函式的順序號 (ordinal number)。這個順序號就是未公開函式的別名。也就是說在宣告未公開api函式時,必須加上它的別名。例如下面要說到的pickicondlg函式的 順序號為62,它的別名就是"#62"。如果不這樣做,系統會提示你找不到函式的入口點。
選取圖示
bool winapi pickicondlg(
hwnd hwndowner,
lpstr lpstrfile,
dword nmaxfile,
lpdword lpdwiconindex);
該函式的順序號為62。
hwndowner擁有該對話方塊的視窗控制代碼 lpstrfile指向乙個緩衝,包含初始的檔名。函式返回後它就包含新的檔名。nmaxfile指定緩衝的大小,以字元為單位。 lpdwiconindex指向乙個變數其中包含基於零的圖示的索引。函式返回後它包含新圖示的索引值。 如果使用者選擇了圖示,則返回值為真,如果使用者選擇取消按鈕或是系統選單的關閉選項則返回值為假。
執行程式對話方塊
void winapi runfiledlg(
hwnd hwndowner,
hicon hicon,
lpcstr lpstrdirectory,
lpcstr lpstrtitle,
lpcstr lpstrdescription,
uint uflags);
該函式的順序號為61。在vb中可宣告如下:
private declare function runfiledlg lib "shell32" alias "#61" (byval hwndowner as long, byval hicon as long, byval lpstrdirectory as string, byval lpstrtitle as string, byval lpstrdescription as string, byval uflags as long) as long
其中uflags引數的可選值為
rff_nobrowse 0x01 removes the browse button.
rff_nodefault 0x02 no default item selected.
rff_calcdirectory 0x04 calculates the working directory from the file name.
rff_nolabel 0x08 removes the edit box label.
rff_noseparatemem 0x20 removes the separate memory space check box (windows nt only).
API通用對話方塊
include include include include include 7 5.h openfilename ofn 定義乙個openfilename結構 hinstance hinst lresult callback wndproc hwnd,uint,wparam,lparam int...
使用通用對話方塊
5.7 使用通用對話方塊 在windows系統中提供了一些通用對話方塊如 檔案選擇對話方塊 如圖,顏色選擇對話方塊 如圖,字型選擇對話方塊 如圖。在mfc中使用cfiledialog,ccolordialog,cfontdialog來表示。一般來講你不需要派生新的類,因為基類已經提供了常用的功能。而...
通用對話方塊QMessageBox
pyqt5中為我們提供了很多預設資訊框qmessagebox,注意為方便使用需要匯入模組。qmessagebox對話方塊包含型別只是圖示不同其他無太大差別 from pyqt5 import qtwidgets from pyqt5.qtwidgets import qmessagebox clas...