




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Windows編程基礎(chǔ)20152015年年7 7月月一個(gè)簡(jiǎn)單的Windows應(yīng)用程序#include int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) return 0; 其中:第一個(gè)參數(shù)是hInstance,數(shù)據(jù)類型是HINSTANCE,此參數(shù)表示應(yīng)用程序本次運(yùn)行實(shí)例的句柄;第二個(gè)參數(shù)是hPrevInstance,數(shù)據(jù)類型也是HINSTANCE,表示應(yīng)用程序之前運(yùn)行實(shí)例的句柄,但是在實(shí)際應(yīng)用中,此參數(shù)始終為NULL。第三個(gè)參數(shù)lpCmdLine是運(yùn)行時(shí)參數(shù);最后一個(gè)
2、參數(shù)是nCmdShow,其類型為int,表示應(yīng)用程序窗口的顯示狀態(tài)。Windows基本數(shù)據(jù)類型 Windows在C/C+的基礎(chǔ)上新增了很多的數(shù)據(jù)類型。 事實(shí)上,Windows還有很多其他類型的變量,比如設(shè)備句柄HDC, 位圖句柄HBITMAP等,這些需要在不斷應(yīng)用中學(xué)習(xí)及完善。 在Windows系統(tǒng)中,Unicode字符編碼和多字節(jié)字符編碼都可以使用,每種類型的字符串變量的初始化是不同的。比如下面三種類型的字符串可采用如下的使用方式。 Windows支持Unicode和ASCII編碼的字符。Windows系統(tǒng)API凡是以字符串作為參數(shù)的很多具有W和A兩個(gè)版本以實(shí)現(xiàn)兩種不同編碼的字符處理。比如
3、MessageBoxA和MessageBoxW,這兩者是同一個(gè)API,實(shí)現(xiàn)了同樣的功能。不同的是,MessageBoxA以多字節(jié)字符串作為參數(shù)輸入,MessateBoxW以Unicode字符串作為參數(shù)輸入。 Windows專門(mén)提供了若干個(gè)API來(lái)實(shí)現(xiàn)對(duì)字符編碼的轉(zhuǎn)換工作。WideCharToMultiByte、MultiByteToWideChar、UnicodeToBytes函數(shù)可以完成這些工作。 WideCharToMultiByte函數(shù)將Unicode字符串轉(zhuǎn)換為多字節(jié)字符串,以適應(yīng)A版本的API,MultiByteToWideChar函數(shù)將多字節(jié)字符串轉(zhuǎn)換為了Unicode字符串,以適
4、應(yīng)W版本的API的參數(shù)形式要求。 Windows窗口 窗口是Windows圖形用戶界面最重要的元素,一個(gè)簡(jiǎn)單的窗口如下。 在應(yīng)用程序開(kāi)發(fā)時(shí),需要注意每一個(gè)窗口都屬性一個(gè)窗口類( Window Class)。每一種窗口類具有對(duì)固定的用戶輸入的處理模式,第一類窗口具有相同的菜單項(xiàng)、背景、圖標(biāo)、鼠標(biāo)指針樣子和窗口消息處理函數(shù)。 窗口類主要包括: WNDCLASSEX wcex; /設(shè)置窗口類的長(zhǎng)度 wcex.cbSize = sizeof(WNDCLASSEX); /設(shè)置窗口的風(fēng)格 wcex.style= CS_HREDRAW | CS_VREDRAW;/設(shè)置窗口對(duì)應(yīng)的過(guò)程函數(shù) wcex.lpfnW
5、ndProc= WndProc;/指定緊跟在窗口類結(jié)構(gòu)后的附加字節(jié)數(shù)。wcex.cbClsExtra= 0;/指定緊跟在窗口實(shí)例的附加字節(jié)數(shù)。wcex.cbWndExtra= 0;/窗口句柄wcex.hInstance= hInstance;/窗口圖標(biāo)wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SIMPLEWINDOW);/窗口光標(biāo)wcex.hCursor= LoadCursor(NULL, IDC_ARROW);/窗口背景wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);/窗口菜單wcex.l
6、pszMenuName= MAKEINTRESOURCE(IDC_SIMPLEWINDOW);/窗口類的名稱wcex.lpszClassName= szWindowClass;/窗口縮小后的圖標(biāo)wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL); 在設(shè)置了窗口類之后,可利用CreateWindow函數(shù)創(chuàng)建窗口,并獲得窗口句柄。其形式如下: HWND WINAPI CreateWindow( LPCTSTR lpClassName, /窗口類的名稱,在填寫(xiě)類結(jié)構(gòu)體時(shí)確定 LPCTSTR lpWindowName, /
7、 窗口的標(biāo)題名稱 DWORD dwStyle, /窗口的類型,具體可參看相關(guān)的幫助 int x, int y, int nWidthint nHeight, /窗口顯示的位置,寬度和高度 HWND hWndParent, /父窗口的窗口句柄 HMENU hMenu, /窗口的菜單名 HINSTANCE hInstance, /窗口的句柄 LPVOID lpParam ); /傳遞給窗口過(guò)程函數(shù)的參數(shù) 執(zhí)行該函數(shù)之后將產(chǎn)生與窗口有關(guān)的句柄。后面與該窗口有關(guān)的函數(shù)均與該句柄有關(guān)。比如顯示該窗口,對(duì)窗口進(jìn)行刷新等。 此外,在窗口類注冊(cè)時(shí)設(shè)置了該窗口的消息處理函數(shù),該函數(shù)對(duì)所有傳遞給該窗口的消息進(jìn)行處
8、理。其函數(shù)的形式如下: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 其中: message:為發(fā)送給本窗口的消息。一般只有處于激活狀態(tài)的窗口才會(huì)收到消息。 wParam: 消息短參數(shù),32位消息的特定附加信息。該參數(shù)的值與消息有關(guān)。比如WM_CHAR消息是在用戶輸入某個(gè)鍵時(shí)產(chǎn)生該消息,其wParam表示用戶按鍵的ASCII碼值。 lParam:消息長(zhǎng)參數(shù)。與具體的消息有關(guān)。同樣針對(duì)WM_CHAR消息,lParam的定義如下: 其015位:表示按鍵重復(fù)的次數(shù)。也就是用戶一直按住某個(gè)
9、鍵所產(chǎn)生的重復(fù)次數(shù)。 1623位:表示掃描碼。與設(shè)備制造商有關(guān)。 因此一般不用。 Windows系統(tǒng)是消息(Message)驅(qū)動(dòng)的,當(dāng)用戶操作輸入設(shè)備,產(chǎn)生硬件中斷后,系統(tǒng)內(nèi)核會(huì)得到這此硬件中斷,硬件在系統(tǒng)中經(jīng)過(guò)復(fù)雜的運(yùn)算和處理最終變成消息。消息被系統(tǒng)發(fā)送給指定窗口。 所有對(duì)用戶界面的操作都會(huì)產(chǎn)生消息,包括鼠標(biāo)單擊、按鈕、菜單選擇、窗口創(chuàng)建、窗口移動(dòng)等。Windows消息種類很多,具體的消息可參照“Windows的主要消息”文檔。 Windows的消息主要通過(guò)消息循環(huán),通過(guò)其API實(shí)現(xiàn)。主要對(duì)消息處理的函數(shù)包括: WindowsWindows的消息循環(huán)的消息循環(huán)BroadcastSystemM
10、essage將一條系統(tǒng)消息廣播給系統(tǒng)中所有的頂級(jí)窗口GetMessagePos取得消息隊(duì)列中上一條消息處理完畢時(shí)的鼠標(biāo)指針屏幕位置GetMessageTime取得消息隊(duì)列中上一條消息處理完畢時(shí)的時(shí)間PostMessage將一條消息投遞到指定窗口的消息隊(duì)列PostThreadMessage將一條消息投遞給應(yīng)用程序RegisterWindowMessage獲取分配給一個(gè)字串標(biāo)識(shí)符的消息編號(hào)ReplyMessage答復(fù)一個(gè)消息SendMessage調(diào)用一個(gè)窗口的窗口函數(shù),將一條消息發(fā)給那個(gè)窗口SendMessageCallback將一條消息發(fā)給窗口SendMessageTimeout向窗口發(fā)送一條消
11、息SendNotifyMessage向窗口發(fā)送一條消息 BOOL WINAPI GetMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax ):該函數(shù)獲取與窗口有關(guān)的信息。該函數(shù)只有在接收到WM_QUIT消息時(shí)才會(huì)返回false,其他情況均返回具體的數(shù)值。 int WINAPI TranslateAccelerator(HWND hWnd, HACCEL hAccTable, LPMSG lpMsg):該函數(shù)將WM_KEYDOWNWM_KEYDOWN 或者 WM_SYSKEYDOWNWM_SYSKEYDO
12、WN 消息轉(zhuǎn)換成WM_COMMANDWM_COMMAND or WM_SYSCOMMANDWM_SYSCOMMAND消息。該消息處理后的消息消息。該消息處理后的消息TranslateMessage不能再處理。當(dāng)快捷命令對(duì)應(yīng)一個(gè)菜單項(xiàng)時(shí),在遇到下面情況時(shí)將不會(huì)發(fā)送該消息: (1)Windows處于無(wú)效狀態(tài)。 (2)窗口處于最小化或者快捷鍵與窗口菜單的某一項(xiàng)不對(duì)應(yīng)。 (3)鼠標(biāo)正處于捕獲狀態(tài)。 BOOL WINAPI TranslateMessage(MSG *lpMsg):該函數(shù)將虛擬鍵消息轉(zhuǎn)換成字符消息送入消息隊(duì)列。比如用戶按下某個(gè)鍵,將會(huì)產(chǎn)生WM_KEYDOWN的消息,同時(shí)也會(huì)產(chǎn)生WM_CH
13、AR的消息,以確定按下的是哪個(gè)鍵。 LRESULT WINAPI DispatchMessage(const MSG *lpmsg ):該函數(shù)將GetMessage獲得的消息傳遞給過(guò)程函數(shù)。 因此為了在過(guò)程函數(shù)中獲得相關(guān)的消息,需要采用如下的程序來(lái)實(shí)現(xiàn)對(duì)所有消息的處理:while (GetMessage(&msg, NULL, 0, 0) if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg) TranslateMessage(&msg); DispatchMessage(&msg); 如何往窗口添加菜單 添
14、加窗口菜單 (1)首先在資源管理器中添加菜單資源,并設(shè)置主菜單項(xiàng)和子菜單項(xiàng)。 (2)在設(shè)置窗口類時(shí),將WNDCLASSEX類的lpszMenuName設(shè)置為所設(shè)定的菜單資源??赏ㄟ^(guò)MAKEINTRESOURCE( WORD wInteger )函數(shù)將菜單ID轉(zhuǎn)換成菜單所對(duì)應(yīng)的字符串。添加浮動(dòng)式菜單 浮動(dòng)式菜單是指按鼠標(biāo)右鍵后出現(xiàn)的菜單。比如在Word中按鼠標(biāo)右鍵時(shí)會(huì)出現(xiàn)一個(gè)菜單。用戶在按菜單之后可以進(jìn)行相應(yīng)的操作。 制作浮動(dòng)式菜單的步驟如下: (1)首先用戶先在資源管理器中創(chuàng)建一個(gè)菜單。 (2)添加產(chǎn)生彈出菜單所必須的消息。比如鼠標(biāo)右鍵消息,或者選中某個(gè)選項(xiàng)時(shí)的按鍵消息等。 (3)通過(guò)Load
15、Menu函數(shù)獲得此前創(chuàng)建的彈出式菜單句柄。形式如下: HMENU hMenu=LoadMenu(hinst, MAKEINTRESOURCE (IDR_MENU_POPUP); (4)通過(guò)GetSubMenu(HMENU hMenu, int nPos )獲得要彈出的菜單子項(xiàng)。 (5)通過(guò)TrackPopupMenuEx(HMENU hmenu, UINT fuFlags, int x, int y, HWND hwnd, LPTPMPARAMS lptpm )函數(shù)顯示指定的菜單項(xiàng)。其中hmenu為彈出式子菜單句柄,fuFlags設(shè)置菜單項(xiàng)對(duì)齊方式、鼠標(biāo)跟蹤方式等。x, y為菜單顯示的位置,H
16、wnd為顯示菜單的窗口句柄。 (6)通過(guò)DestroyMenu銷毀加載的資源。 對(duì)應(yīng)的菜單操作可通過(guò)過(guò)程函數(shù)添加消息來(lái)實(shí)現(xiàn)。 此外,對(duì)菜單的操作有相應(yīng)的API函數(shù),可通過(guò)相應(yīng)的API函數(shù)創(chuàng)建菜單,添加菜單等。如何添加工具欄 工具條的創(chuàng)建需要通過(guò)如下步驟完成: (1)調(diào)用CreateWindowEx函數(shù)創(chuàng)建工具條所對(duì)應(yīng)的窗口。該函數(shù)的形式如下:HWND WINAPI CreateWindowEx(DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth,
17、int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam ); 其中的lpClassName須設(shè)置成TOOLBARCLASSNAME,以確定其是一個(gè)工具條。 (2)創(chuàng)建工具條所需要的的快捷圖標(biāo),可通過(guò) HIMAGELIST ImageList_Create( int cx, int cy, UINT flags, int cInitial, int cGrow )函數(shù)創(chuàng)建圖像列表,作為工具條上的圖標(biāo)。其中的x,y表示圖標(biāo)的寬度和高度,flags表示圖像的類型,cInitial表示圖像的多少,cG
18、row表示圖像隊(duì)列可增加的數(shù)量。然后通過(guò)SendMessage函數(shù)將該圖像序列發(fā)送到工具條,其形式如下: SendMessage(hWndToolbar, TB_SETIMAGELIST,(WPARAM) ImageListID, (LPARAM)hImageList); 如果只有一個(gè)圖像序列,則imageListID為0,否則可以為1,2,等。hImageList就是前面創(chuàng)建的圖像序列。 TB_SETIMAGELIST為設(shè)定的參數(shù)。 (3)通過(guò)SendMessage加載按鈕。其形式如下 SendMessage(hWndToolbar, TB_LOADIMAGES, (WPARAM) IDB_
19、STD_SMALL_COLOR, (LPARAM)HINST_COMMCTRL); 其中TB_LOADIMAGES表示加載系統(tǒng)工具條圖標(biāo)操作, IDB_STD_SMALL_COLOR 表示圖標(biāo)的大小顏色。 (3)設(shè)置TBBUTTON結(jié)構(gòu)體,定義要顯示的圖標(biāo)的信息。對(duì)每一個(gè)按鈕設(shè)置設(shè)置其對(duì)應(yīng)的圖標(biāo)信息。該結(jié)構(gòu)體的定義如下: typedef struct int iBitmap; int idCommand; BYTE fsState; BYTE fsStyle; #ifdef _WIN64 BYTE bReserved6; #else #if defined(_WIN32) BYTE bRese
20、rved2; #endif #endif DWORD_PTR dwData; INT_PTR iString; TBBUTTON, *PTBBUTTON, *LPTBBUTTON; 其中: iBitmap為位圖的索引編號(hào)。該編號(hào)一種是通過(guò)int WINAPI ImageList_AddIcon ( HIMAGELIST himl, HICON hicon)獲得,形式如下: HIMAGELIST hImageList; int nIcon, fIcon; hImageList=ImageList_create(30,30, ICL_COLOR8,2,0); nIcon=ImageList_Add
21、Icon(hImageList, MAKEINTERSOURCE(IDC_ NICON); fIcon=ImageList_AddIcon(hImageList, MAKEINTERSOURCE(IDC_ FICON); 上述代碼利用資源中的圖標(biāo)創(chuàng)建了包含兩個(gè)圖標(biāo)的hImageList。 這樣利用獲得的ID就可以填寫(xiě)TBUTTON結(jié)構(gòu)體。形式如下: buttons0.dwData=0; buttons0.fsState=TBSTATE_ENABLED; buttons0.fsStyle=TBSTYLE_BUTTON; buttons0.iBitmap=nIcon; buttons0.idCom
22、mand=IDC_NI buttons0.iString=(INT_PTR)L“NI; (4)將所定義的圖標(biāo)添加到工具條 SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof (TBBUTTON), 0); SendMessage(hWndToolbar, TB_ADDBUTTONS, (WPARAM) numButtons, (LPARAM)&buttons); 當(dāng)用戶按工具條上的按鈕之后所執(zhí)行的操作則可通過(guò)過(guò)程函數(shù)的中WM_COMMAND命令來(lái)完成。 如何添加狀態(tài)欄 狀態(tài)欄的添加比較簡(jiǎn)單,首先通過(guò)CreateWi
23、ndowEx函數(shù)創(chuàng)建狀態(tài)欄,其lpClassName設(shè)置為STATUSCLASSNAME,然后通過(guò)SendMessage設(shè)置狀態(tài)欄分為幾段以及每段右邊的位置,其Msg設(shè)置為SB_SETPARTS,其形式如下: SendMessage(hwndStatus, SB_SETPARTS, (WPARAM)cParts, (LPARAM)paParts); 其中cParts表示分段的段數(shù),paParts表示某段狀態(tài)條右邊的位置,需要對(duì)每一段進(jìn)行設(shè)置,因此該參數(shù)是一個(gè)數(shù)組,須首先分配內(nèi)存空間。Windows 對(duì)話框 Windows對(duì)話框可通過(guò)資源管理器進(jìn)行創(chuàng)建,在創(chuàng)建之后然后通過(guò)下面的函數(shù)顯示該對(duì)話框:
24、 INT_PTR WINAPI DialogBox(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc) 其中l(wèi)pTmeplate表示資源文件中對(duì)話框的ID或者對(duì)話框模版名。lpDialogFunc表示對(duì)話框過(guò)程函數(shù)名稱。其過(guò)程函數(shù)的形式與窗口的過(guò)程函數(shù)形式一樣。 上述函數(shù)創(chuàng)建的是模式對(duì)話框,需要通過(guò)EndDialog 來(lái)關(guān)閉。模式對(duì)話框要求用戶必須先處理該對(duì)話框的信息,然后在關(guān)閉之后才能處理其他窗口的信息。此外,可通過(guò)下面的函數(shù)創(chuàng)建無(wú)模式對(duì)話框,這種對(duì)話框不要求用戶一定要處理該對(duì)話框的消
25、息,在未關(guān)閉該對(duì)話框時(shí)也可以處理其他的對(duì)話框的信息。 HWND WINAPI CreateDialog( HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc) 上述函數(shù)的信息與模式對(duì)話框相似。 此外,可通過(guò)HWND WINAPI CreateDialogIndirect(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc)函數(shù)動(dòng)態(tài)生成對(duì)話框,并在其中添加控件。 在添加控件
26、的過(guò)程中,需要定義每個(gè)控件的ID:其中常用控件的ID定義如下:ValueMeaning0 x0080Button0 x0081Edit0 x0082Static0 x0083List box0 x0084Scroll bar0 x0085Combo box 上述函數(shù)的具體使用方法將Windows實(shí)例。 對(duì)于對(duì)話框中信息的提取,可采用如下函數(shù): UINT WINAPI GetDlgItemText(HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount ); UINT WINAPI GetDlgItemInt(HWND hDlg,int
27、 nIDDlgItem, BOOL *lpTranslated, BOOL bSigned); 同樣通過(guò)與之相應(yīng)的設(shè)置函數(shù)來(lái)對(duì)相應(yīng)的控件進(jìn)行參數(shù)設(shè)置。 基于控件的子窗體 控件除了可以在對(duì)話框中使用外,還可在創(chuàng)建基于子窗口的控件,也就是將控件放在某個(gè)子窗體中。其方法如下: (1)通過(guò)CreateWindowEx或者CreateWindow函數(shù)創(chuàng)建基于控件的窗體句柄,其中的參數(shù)lpClassName設(shè)置為控件所對(duì)應(yīng)的類。比如下面的窗口類: WC_BUTTONCreates button controls. These controls enable a user to initiate an ac
28、tion.WC_COMBOBOXCreates combobox controls. These controls contain a drop-down list from which a single item can be selected.WC_COMBOBOXEXCreates ComboBoxEx controls. These controls provide an extension of the combo box control that provides native support for item images.WC_EDITCreates edit controls
29、. These controls contain editable text.WC_LISTBOXCreates listbox controls. These controls contain lists of items.WC_IPADDRESSCreates IP address controls. These controls are similar to an edit control, but they enable you to enter a numeric address in Internet protocol (IP) format.WC_SCROLLBARCreates
30、 scroll bar controls. These controls enable the user to scroll the contents of a window.WC_STATICCreates static controls. These controls contain noneditable text.WC_TABCONTROLCreates tab controls. These controls define multiple pages for the same area of a window or dialog box. Each page consists of
31、 a set of information or a group of controls that an application displays when the user selects the corresponding tab.WC_TREEVIEWCreates tree-view controls. These controls display a hierarchical list of items. Each item consists of a label and an optional bitmap. (2)針對(duì)不同的控件調(diào)用相應(yīng)的函數(shù)對(duì)該窗口對(duì)應(yīng)的控件進(jìn)行初始化。比如編輯
32、窗口可通過(guò)SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM) szTextToShow)函數(shù)將szTextToShow字符串顯示到編輯窗口。 (3)通過(guò)Windows的WM_NOTIFY消息獲取控件窗口傳遞出來(lái)的消息。一般的消息包括下表的一些消息。這個(gè)消息一般放在過(guò)程函數(shù)的長(zhǎng)參數(shù)里,并通過(guò)下面的結(jié)構(gòu)體來(lái)傳遞。 typedef struct tagNMHDR HWND hwndFrom; UINT idFrom; UINT code; NMHDR; Notification codeSent becauseNM_CLICKUser clicked left
33、 mouse button in the controlNM_DBLCLKUser double-clicked left mouse button in the controlNM_RCLICKUser clicked right mouse button in the controlNM_RDBLCLKUser double-clicked right mouse button in the controlNM_RETURNUser pressed the ENTER key while control has input focusNM_SETFOCUSControl has been
34、given input focusNM_KILLFOCUSControl has lost input focusNM_OUTOFMEMORYControl could not complete an operation because there was not enough memory availableWindows特殊對(duì)話框 Windows提供了一些特殊的對(duì)話框資源,比如打開(kāi)磁盤(pán)文件,保存磁盤(pán)文件等對(duì)話框資源。文件打開(kāi)及保存所采用的函數(shù)分別是: BOOL WINAPI GetOpenFileName(LPOPENFILENAME lpofn ); BOOL WINAPI GetSav
35、eFileName(LPOPENFILENAME lpofn); 其中的lpofn采用的是OPENFILENAME結(jié)構(gòu)體,因此需要填寫(xiě)該結(jié)構(gòu)體才能得到文件的打開(kāi)及保存對(duì)話框。 該結(jié)構(gòu)體在使用前一般應(yīng)該進(jìn)行清零操作,可采用Windows API函數(shù)ZeroMemory()實(shí)現(xiàn)。 該結(jié)構(gòu)體的有些參數(shù)可以不填,只需要填寫(xiě)一些重要的參數(shù),比如文件過(guò)濾器,路徑,標(biāo)識(shí)(flags)等。 需要注意的是這兩個(gè)函數(shù)只是顯示一個(gè)對(duì)話框,并通過(guò)對(duì)話框獲取選取或者保存的文件的路徑及名稱,并不完成文件的讀寫(xiě)操作,要實(shí)現(xiàn)文件的讀寫(xiě)還得通過(guò)Windows提供的文件操作函數(shù)來(lái)實(shí)現(xiàn)。 此外,還有一些可直接通過(guò)Windows A
36、PI獲取的對(duì)話框,比如顏色選取對(duì)話框,打印對(duì)話框,查找及替換對(duì)話框,字體選取對(duì)話框等。Windows文件操作 Windows API中與文件操作有關(guān)的函數(shù)主要包括: CancelIoCancelIoEx CancelSynchronousIo CreateIoCompletionPort FlushFileBuffers GetQueuedCompletionStatus GetQueuedCompletionStatusEx LockFile LockFileEx PostQueuedCompletionStatus ReadFile ReadFileEx ReadFileScatter S
37、etEndOfFile SetFileCompletionNotificationModes SetFileIoOverlappedRange SetFilePointer SetFilePointerEx UnlockFile UnlockFileEx WriteFile WriteFileEx WriteFileGather 一般文件讀寫(xiě)的操作步驟如下: (1)首先通過(guò)CreateFile打開(kāi)要讀寫(xiě)的文件。其形式如下: HANDLE WINAPI CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode
38、, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); 該函數(shù)的主要參數(shù)包括: lpFileName:待打開(kāi)的文件的名稱。 dwDesiredAccess:文件的存取方式。主要包括: GENERIC_READ, GENERIC_WRITE等。如下。等。如下。ConstantGeneric meaningGENERIC_ALLAll possible access rightsGENERIC_EXEC
39、UTEExecute accessGENERIC_READRead accessGENERIC_WRITEWrite access dwShareMode:共享方式。主要有如下的方式:ValueValueMeaningMeaning0 0 0 x00000000Prevents other processes from opening a file or device if they request delete, read, or write access.FILE_SHARE_DELETEFILE_SHARE_DELETE 0 x00000004Enables subsequent ope
40、n operations on a file or device to request delete access.Otherwise, other processes cannot open the file or device if they request delete access.If this flag is not specified, but the file or device has been opened for delete access, the function fails.NoteNoteDelete access allows both delete and r
41、ename operations.FILE_SHARE_READFILE_SHARE_READ 0 x00000001Enables subsequent open operations on a file or device to request read access.Otherwise, other processes cannot open the file or device if they request read access.If this flag is not specified, but the file or device has been opened for rea
42、d access, the function fails.FILE_SHARE_WRITEFILE_SHARE_WRITE 0 x00000002Enables subsequent open operations on a file or device to request write access.Otherwise, other processes cannot open the file or device if they request write access.If this flag is not specified, but the file or device has bee
43、n opened for write access or has a file mapping with write access, the function fails.dwCreationDisposition:創(chuàng)建方式。主要有如下方式。ValueMeaningCREATE_ALWAYS 2Creates a new file, always.If the specified file exists and is writable, the function overwrites the file, the function succeeds, and last-error code is
44、 set to ERROR_ALREADY_EXISTS (183).If the specified file does not exist and is a valid path, a new file is created, the function succeeds, and the last-error code is set to zero.For more information, see the Remarks section of this topic.CREATE_NEW 1Creates a new file, only if it does not already ex
45、ist.If the specified file exists, the function fails and the last-error code is set to ERROR_FILE_EXISTS (80).If the specified file does not exist and is a valid path to a writable location, a new file is created.OPEN_ALWAYS 4Opens a file, always.If the specified file exists, the function succeeds and the last-error code is set to ERROR_ALREADY_EXISTS (183).If the specified file does not exist and is a valid path to a writable location, the function creates a file and the last-error code is set to zero.OPEN_EXISTING 3Opens a file or device, only if it exists.If the specified file
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 花卉種植的自動(dòng)化與智能化技術(shù)考核試卷
- 信息系統(tǒng)監(jiān)理師考試內(nèi)容展望試題及答案
- 調(diào)味品生產(chǎn)設(shè)備選型與維護(hù)保養(yǎng)考核試卷
- 軟件測(cè)試中的時(shí)間管理策略試題及答案
- 氣體凈化技術(shù)在飼料工業(yè)的應(yīng)用考核試卷
- 網(wǎng)絡(luò)技術(shù)與軟件開(kāi)發(fā)結(jié)合試題及答案
- 行政組織文化建設(shè)的重要性試題及答案
- 行政組織理論的教學(xué)方法對(duì)比與2025年試題及答案
- 客服大廳電腦管理制度
- 公司外幣結(jié)匯管理制度
- 程序文件-XXX(安全閥校驗(yàn)機(jī)構(gòu))(2023版)
- 散糧裝卸工藝
- 中華人民共和國(guó)產(chǎn)品質(zhì)量法培訓(xùn)
- 餐廳干股分紅協(xié)議書(shū)
- 醫(yī)院手術(shù)室凈化裝修方案
- 氣壓傳動(dòng)課件 項(xiàng)目九任務(wù)二 氣-液動(dòng)力滑臺(tái)氣動(dòng)系統(tǒng)故障分析與維護(hù)
- 2024年海南省高考地理試卷(含答案)
- 《排球正面雙手墊球 移動(dòng)墊球》教案
- 《菊次郎的夏天》電影賞析
- 課件:《中華民族共同體概論》第十五講:新時(shí)代與中華民族共同體建設(shè)
- 汽車剎車片與剎車盤(pán)檢測(cè)考核試卷
評(píng)論
0/150
提交評(píng)論