1、什么是windows 錯(cuò)誤碼?應(yīng)該在什么時(shí)候獲取? 使用什么函數(shù)獲取? 獲取到之后如何
查看其所代表的內(nèi)容?
答:windows 錯(cuò)誤碼是不同的API有不同類型的錯(cuò)誤返回值,在API結(jié)束之后獲取,可以使用SetLastError函數(shù)獲取,使用錯(cuò)誤查找工具或者在VS監(jiān)視欄中輸入“err,hr”查看。
2、如何為自己的函數(shù)定義windows 錯(cuò)誤碼,使用哪一個(gè)函數(shù)?
答:SetLastError函數(shù)。
3、在Virtual Stodio 中,在監(jiān)視欄中輸入什么字符,能夠方便的查看錯(cuò)誤碼?
答:err,hr字符。
4、什么是句柄? 幾個(gè)字節(jié)? 有什么用?
答:在程序設(shè)計(jì)中,句柄是一種特殊的智能指針。當(dāng)一個(gè)應(yīng)用程序要引用其他系統(tǒng)(如數(shù)據(jù)庫(kù)、操作系統(tǒng))所管理的內(nèi)存塊或?qū)ο髸r(shí),就要使用句柄。在windows編程中,一個(gè)句柄是指使用的一個(gè)唯一的整數(shù)值,即一個(gè)4字節(jié)(64位程序中為8字節(jié))長(zhǎng)的數(shù)值,來(lái)標(biāo)識(shí)應(yīng)用程序中的不同對(duì)象和同類中的不同的實(shí)例,諸如,一個(gè)窗口,按鈕,圖標(biāo),滾動(dòng)條,輸出設(shè)備,控件或者文件等。
5、什么是實(shí)例? WinMain 函數(shù)的四個(gè)參數(shù)分別代表什么意思?
答:實(shí)例諸如一個(gè)窗口,按鈕,圖標(biāo),滾動(dòng)條等,hInstance是程序?qū)嵗木浔?,它是程序的加載地址,hPrevInstance這個(gè)參數(shù)已經(jīng)廢棄,IpCmdLine是由調(diào)用者傳入的命令,nCmdShow是由調(diào)用者傳入的int型參數(shù)。
6、請(qǐng)問(wèn)TCHAR,_tcslen 本質(zhì)是什么?由誰(shuí)控制? 使用通用字符需要包含什么頭文件?
答:T版的數(shù)據(jù)或者函數(shù),本質(zhì)上還是ascii編碼或者unicode的編碼,主要靠#indefine和typedef實(shí)現(xiàn)的,它只由編譯環(huán)境自動(dòng)選擇,tchar.h頭文件。
7、窗口回調(diào)函數(shù)的原型是什么?
答:原型如下:
LRESULT CALLBACK WindowProc(
HWND hwnd, //窗口句柄
UINT uMsg, //消息ID
WPARAM wParam, //消息參數(shù)1
LPARAM lParam //消息參數(shù)2
);
8、使用SPY++查看QQ 登錄框類名是什么? 聊天窗口類名是什么?
答: TXGuiFoundation TXGuiFoundation
9、窗口類結(jié)構(gòu)體中hbrBackground 有什么用? 請(qǐng)盡量詳細(xì)的說(shuō)明。
答:hbrBackground 可以刷新背景所用的畫(huà)刷的句柄。Windows定義六種現(xiàn)有畫(huà)刷:WHITE_BRUSH、LTGRAY_BRUSH、GRAY_BRUSH、DKGRAY_BRUSH、BLACK_BRUSH和NULL_BRUSH (也叫HOLLOW_BRUSH)。您可以將任何一種現(xiàn)有畫(huà)刷選入您的裝置內(nèi)容中,就和您選擇一種畫(huà)筆一樣。Windbws將HBRUSH定義為畫(huà)刷的代號(hào),所以可以先定義一個(gè)畫(huà)刷代號(hào)變數(shù):
HBRUSH hBrush ;
您可以通過(guò)呼叫GetStockObject來(lái)取得GRAY_BRUSH的代號(hào):
hBrush = GetStockObject (GRAY_BRUSH) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH);//設(shè)置窗口背景畫(huà)刷的句柄
10、什么是隊(duì)列消息? 什么是非隊(duì)列消息? 請(qǐng)各舉出三個(gè)例子。
答:隊(duì)列消息包括系統(tǒng)和線程的消息隊(duì)列,隊(duì)列送到系統(tǒng)消息隊(duì)列,然后送到線程消息隊(duì)列,而非隊(duì)列消息是直接送給目的窗口的過(guò)程。隊(duì)列消息如WM_MOUSERMOVE,WM_CHAR,WM_PAINT。非隊(duì)列消息有WM_ACTIVATE,應(yīng)用系統(tǒng)發(fā)送WM_WINDOWPOSCHANGED,SendMessage函數(shù)也會(huì)發(fā)送非隊(duì)列消息。
11、PostMessage 和SendMessage 有什么區(qū)別?
答:PostMessage只是把消息放入隊(duì)列,不管其他程序是否處理都返回,然后繼續(xù)執(zhí)行;而SendMessage必須等待其他程序處理消息后才返回,繼續(xù)執(zhí)行。PostMessage的返回值表示PostMessage函數(shù)執(zhí)行是否正確;而SendMessage的返回值表示其他程序處理消息后的返回值。 PostMessage會(huì)造成消息的滯后性,而SendMessage則不會(huì),但如果SendMessage消息處理失敗,則會(huì)造成程序停止。
12、下面這個(gè)結(jié)構(gòu)體是窗口類結(jié)構(gòu)體,請(qǐng)分別說(shuō)明,各個(gè)字段是什么含義。
答:各字段含義見(jiàn)注釋。
typedef struct tagWNDCLASSW {
UINT style;//窗口類的風(fēng)格(無(wú)符號(hào)32位整數(shù))
WNDPROC lpfnWndProc;//指向窗口過(guò)程的指針
int cbClsExtra;//分派給窗口類的擴(kuò)展的字節(jié)數(shù)
int cbWndExtra;//分派給窗口實(shí)例的擴(kuò)展的字節(jié)數(shù)
HINSTANCE hInstance;.//實(shí)例句柄
HICON hIcon;//類圖標(biāo)的句柄
HCURSOR hCursor;//類鼠標(biāo)指針的句柄
HBRUSH hbrBackground;//刷新背景所用的畫(huà)刷的句柄
LPCWSTR lpszMenuName;//窗口類包含的菜單的名稱
LPCWSTR lpszClassName;//窗口類名
}
WNDCLASSW
13、以下消息分別在什么時(shí)候觸發(fā)
WM_LBUTTONDOWN 點(diǎn)擊鼠標(biāo)左鍵
WM_PAINT 繪制對(duì)象時(shí)
WM_CLOSE 點(diǎn)擊關(guān)閉程序按鈕
==================
1、窗口風(fēng)格有三大風(fēng)格,分別是什么? 各有什么特點(diǎn)?
答:窗口三大風(fēng)格是重疊窗口(Overlapped Window),彈出窗口(Popup Window),子窗口(Child Window),重疊窗口是頂級(jí)窗口,是缺省類型,它有邊框,標(biāo)題欄,客戶區(qū)等,還有其他組件;彈出窗口也是頂級(jí)窗口,通常用于對(duì)話框或者M(jìn)essage對(duì)話框,它具有WS_POPUP窗口風(fēng)格,隱含帶有WS_CLIPSIBLINGS窗口風(fēng)格。
2、WM_COMMAND 作為控件的通知消息,wParam 與lParam 分別有什么含義?
答:wParam是指32位的消息參數(shù),是一個(gè)消息有關(guān)的常量值,也可能是窗口或控件的句柄, lParam 也是指32位的消息參數(shù),通常是一個(gè)指向內(nèi)存中數(shù)據(jù)的指針。
3、什么是模態(tài)對(duì)話框? 什么是非模態(tài)對(duì)話框? 用什么創(chuàng)建?,
答:模態(tài)對(duì)話框創(chuàng)建后一定要在用戶關(guān)閉對(duì)話框后,其父窗口才能響應(yīng)用戶操作,否則父窗口便無(wú)法響應(yīng)任何用戶的操作,模態(tài)對(duì)話框函數(shù)自帶消息循環(huán);非模態(tài)對(duì)話框則是創(chuàng)建完后其父窗口不需要像模態(tài)窗口那樣等到對(duì)話框關(guān)閉才能響應(yīng)用戶的操作,一樣可以在對(duì)話框未關(guān)閉前響應(yīng)用戶操作,非模態(tài)對(duì)話框函數(shù)需要自己寫(xiě)消息循環(huán)。模態(tài)對(duì)話框使用DialogBox創(chuàng)建,非模態(tài)對(duì)話框使用CreateDialog完成。
4、控件既可以用代碼創(chuàng)建,也可以在對(duì)話框資源上拖拽,創(chuàng)建控件的函數(shù)是什么?。
答:創(chuàng)建控件的函數(shù)是CreateWindow。
5、WM_NOTIFY 和WM_COMMAND 的區(qū)別。
答:WM_COMMAND和WM_NOTIFY都是控件通知消息,WM_NOTIFY和WM_COMMAND相比,是一種更靈活的消息格式,lParam中放的是一個(gè)稱為NMHDR結(jié)構(gòu)的指針。在wParam中放的則是控件的ID。最初Windows 3.x就有的控件,如Edit,Combo,List,Button等,發(fā)送的控件通知消息的格式是WM_COMMAND;而后期的Win32通用控件,如List View,Image List,IP Address,Tree View,Toolbar等,發(fā)送的都是WM_NOTIFY控件通知消息。
6、使用通用(擴(kuò)展)控件的準(zhǔn)備工作都有哪些?
答:在15版本以下的VS使用通用控件需要先包含<CommCtrl.h>,引入 #pragma comment(lib,"comct132.lib"),調(diào)用InitCommonControls初始化通用控件,使用CreateWindowEx函數(shù)創(chuàng)建通用控件。
==================
1、什么是API? 什么是動(dòng)態(tài)鏈接庫(kù)? 寫(xiě)出常見(jiàn)的動(dòng)態(tài)鏈接庫(kù)及其大體功能。
答:API是指API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件得以訪問(wèn)一組歷程的能力,而又無(wú)需訪問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。
動(dòng)態(tài)鏈接庫(kù)的英文名稱叫DynamicLinkableLibrary,它是microsoft在windows操作系統(tǒng)中實(shí)現(xiàn)共享函數(shù)庫(kù)概念的一種實(shí)現(xiàn)方式。大多數(shù)與windows相關(guān)的磁盤(pán)文件如果不是程序模塊,就是動(dòng)態(tài)鏈接程序。
常見(jiàn)的動(dòng)態(tài)鏈接庫(kù)及其大體功能:
kernel32.dll Windows9x/Me中非常重要的32位動(dòng)態(tài)鏈接庫(kù)文件,屬于內(nèi)核級(jí)文件。它控制著系統(tǒng)的內(nèi)存管理、數(shù)據(jù)的輸入輸出操作和中斷處理
user32.dll Windows用戶界面相關(guān)應(yīng)用程序接口,用于包括Windows處理,基本用戶界面等特性,如創(chuàng)建窗口和發(fā)送消息。
gdi32.dll Windows GDI圖形用戶界面相關(guān)程序,包含的函數(shù)用來(lái)繪制圖像和顯示文字
winspool.dll 一款文本編輯軟件的庫(kù)文件
comdlg32.dll Windows應(yīng)用程序公用對(duì)話框模塊,用于例如打開(kāi)文件對(duì)話框
都包括什么?
2、你所知道的文件操作
答:文件操作包括新建打開(kāi)文件CreateFile,刪除指定文件DeleteFile,復(fù)制文件CopyFile,ReadFile讀取文件,WriteFile寫(xiě)文件,GetFileAttribute獲取文件屬性,SetFileAttribute設(shè)置文件或目錄的屬性。
3、什么是進(jìn)程? 什么是線程?
答:進(jìn)程是資源的分配和調(diào)度的一個(gè)獨(dú)立單元,而線程是CPU調(diào)度的基本單元,同一個(gè)進(jìn)程中可以包括多個(gè)線程,并且線程共享整個(gè)進(jìn)程的資源(寄存器、堆棧、上下文),一個(gè)進(jìn)程至少包括一個(gè)線程。
4、Dll 可以導(dǎo)出什么?
答:Dll可以導(dǎo)出類和函數(shù)。
5、在編寫(xiě)dll 時(shí),當(dāng)我們想要導(dǎo)出一個(gè)東西時(shí),有哪些方式? 分別如何實(shí)現(xiàn)?
答:一、可以使用_declspec(dllexport),在函數(shù)聲明前加_declspec(dllexport)。二、使用模塊定義文件(擴(kuò)展名為.def)導(dǎo)出,文件里面寫(xiě)
LIBRARY
DESCRIPTION "DLL"
EXPORTS
函數(shù)名
6、我們使用dll 的時(shí)候,通常有兩種方式。分別如何實(shí)現(xiàn)?
答:見(jiàn)上一題。
7、什么叫做對(duì)象庫(kù)? 什么叫做導(dǎo)入庫(kù)?
答;對(duì)象庫(kù)是一個(gè)擴(kuò)展名為.LIB的文件,在這個(gè)文件的代碼在運(yùn)行鏈接器進(jìn)行靜態(tài)鏈接時(shí)被添加到程序的.EXE文件中。導(dǎo)入庫(kù)是一種特殊的形式的對(duì)象庫(kù)文件,后綴名和對(duì)象庫(kù)一樣,鏈接器用它來(lái)解析源代碼中的函數(shù)調(diào)用。但是導(dǎo)入庫(kù)不包含任何代碼,它們只給鏈接器提供信息來(lái)建立EXE文件中用于動(dòng)態(tài)鏈接的重定位表格。
8、什么叫做名稱粉碎? 有什么用處?
答:名稱粉碎是函數(shù)名稱相同的函數(shù)在C中出現(xiàn)重定義,然而在C++中用于函數(shù)重載,相同的名稱會(huì)粉碎成不同的函數(shù)內(nèi)存地址,從而區(qū)別調(diào)用的是什么函數(shù),由此可以實(shí)現(xiàn)多態(tài)。