vc 使用總結
| 將文字傳送到剪貼簿 |
|
讓我們想像把一個ANSI字串傳送到剪貼簿上,并且我們已經有了指向這個字串的指標(pString)?,F在希望傳送這個字串的iLength字元,這些字元可能以NULL結尾,也可能不以NULL結尾。 首先,通過使用GlobalAlloc來配置一個足以儲存字串的記憶體塊,其中還包括一個終止字元NULL: hGlobal = GlobalAlloc (GHND | GMEM_SHARE, iLength + 1) ; 如果未能配置到記憶體塊,hGlobal的值將為NULL 。如果配置成功,則鎖定這塊記憶體,并得到指向它的一個指標: pGlobal = GlobalLock (hGlobal) ; 將字串復制到記憶體塊中: for (i = 0 ; i < wLength ; i++)
*pGlobal++ = *pString++ ;
由於GlobalAlloc的GHND旗標已使整個記憶體塊在配置期間被清除為零,所以不需要增加結尾的NULL 。以下敘述為記憶體塊解鎖: GlobalUnlock (hGlobal) ; 現在就有了表示以NULL結尾的文字所在記憶體塊的記憶體代號。為了把它送到剪貼簿中,打開剪貼簿并把它清空: OpenClipboard (hwnd) ; EmptyClipboard () ; 利用CF_TEXT識別字把記憶體代號交給剪貼簿,關閉剪貼簿: SetClipboardData (CF_TEXT, hGlobal) ; CloseClipboard () ; 工作告一段落。 |
| GlobalAlloc 及其它 |
|
至于分配和使用內存的過程都是一樣的: ??? 調用GlobalAlloc函數分配一塊內存,該函數會返回分配的內存句柄。 |
| 句柄vs指針 | ||||||
|
句柄是一種指向指針的指針。我們知道,所謂指針是一種內存地址。應用程序啟動后,組成這?
個程序的各對象是住留在內存的。如果簡單地理解,似乎我們只要獲知這個內存的首地址,那么就可以隨時用這個地址?訪問對象。但是,如果您真的這樣認為,那么您就大錯特錯了。我們知道,Windows是一?個以虛擬內存為基礎的操作系統。在這種系統環境下,Windows內存管理器經常在內存中來回移動對象,依此來滿足各種應用程序的內存需要。對象被移動意味著它的地址變化?了。如果地址總是如此變化,我們該到哪里去找該對象呢?為了解決這個問題,Windows操作系統為各應用程序騰出一些內存儲地址,用來專門?登記各應用對象在內存中的地址變化,而這個地址(存儲單元的位置)本身是不變的。Windows內存管理器在移動對象在內存中的位置后,把對象新的地址告知這個句柄地址來保存。這樣我們只需記住這個句柄地址就可以間接地知道對象具體在內存中的哪個位置。這個地址是在對象裝載(Load)時由系統分配給的,當系統卸載時(Unload)又釋放給系統。句柄地址(穩定)→記載著對象在內存中的地址→對象在內存中的地址(不穩定)→實際對象。但是,必須注意的是程序每次從新啟動,系統不能保證分配給這個程序的句柄還是原來的那個句柄,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成?是一個應用程序的啟動運行,那么系統給應用程序分配的句柄總是不一樣,這和每次電?影院售給我們的門票總是不同的一個座位是一樣的道理。? |
||||||
|
| C++開發中常見問題 | |||
|
??? 1,簡述VC6下如何進行程序的調試。 在主菜單"Build"中,有一個Start Build的子菜單,它下面包含了Go菜單(快捷鍵為F5),選擇后,程序將從當前語句進入調試運行,直到遇到斷點或程序結束。 將鼠標移動到要調試的代碼行,單擊鼠標右鍵選擇“Insert/Remove Breakpoint”,或者按下F9,可以在該行上添加斷點,此時斷點代碼行前面出現一個棕色的圈,再次選擇將清除斷點。進入調試狀態后,Debug菜單將取代Build菜單出現在菜單欄中,它下面包含常用的調試操作,如Step Over,單步運行并不跟蹤到調用的函數內部;其他還包括Step Into,Step Out, Stop Debugging等調試方法。 ??? 2, 簡述在VC6建立的工程中后綴為.cpp,.h,.rc,.dsp,.dsw的文件的作用是什么? .cpp是源程序代碼C++文件 .h是包含函數聲明和變量定義的頭文件 .rc是定義資源的資源腳本文件 .dsp是工程文件,記錄當前工程的有關信息 .dsw是工作區文件,一個工作區可能包含一個或多個工程 ??? 3, 已知一個對話框上有一個編輯框控件,ID為IDC_EDIT1,為其關聯了CEdit類型的變量m_edit1,使用兩種方法,說明如何改變編輯框內部的文本為"Hello",寫出程序代碼的片斷。 第一種方法:m_edit1.SetSel(0,-1);??????????? ???????????? m_edit1.ReplaceSel("Hello");???? 第二種方法:SetWindowText("Hello");?????? ??? 4, 簡述使用Windows API編寫的一個基本的Windows應用程序框架的結構。 Windows API編寫的基本應用程序框架至少應該包含程序入口函數WinMain和窗口函數WndProc。在主函數WinMain里面包含窗口類的定義和注冊,窗口的創建和顯示以及消息循環。 ??? 5, 消息在Windows中的數據類型是什么,它有哪些成員變量,各有什么含義 消息的數據類型是MSG,它是一個結構體,其成員變量主要包括hwnd,表示消息的窗口句柄;message代表消息的類型;wParam和lParam包含消息的附加信息,隨不同的消息有所不同。 ??? 6, Windows的鼠標消息的長參數lParam與字參數wParam的含義是什么 鼠標消息的長參數lParam的低字節包含了鼠標光標位置的x坐標值,lParam的高字節包含了鼠標光標位置的y坐標值;字參數wParam內包含了指示當前按下的各種虛鍵狀態的值。 ??? 7, 說明使用一個非模態對話框的注意問題和用到的Windows API函數 使用一個非模態對話框應該注意一定要在樣式中包含WS_VISIBLE才能正常顯示;創建對話框使用CreateDialog函數;消息循環部分應該使用IsDialogMessage過濾消息;關閉對話框使用函數DestroyWindow。 ??? 8, 簡述在MFC應用程序中UpdateData函數的作用及其參數含義與使用場合。 UpdateData只有一個BOOL類型的參數,UpdateData(FALSE)一般用于對話框控件連接的變量值刷新屏幕顯示;UpdateData(TRUE)用于獲取屏幕數據到對話框控件連接的變量中。 ??? 9, 列舉列表框控件能夠接受的三個消息類型,并說明其作用 LB_ADDSTRING用于在列表框中加入一項字符串;LB_DIR用于在列表框中列出指定文件;LB_GETTEXT用于獲取指定項的文本。 ??? 10, 在一個對話框上添加了三個單選按鈕,要使它們之間自動實現互斥,應該注意什么問題,在VC環境下如何操作? 要實現一組單選按鈕的自動互斥,應該讓它們的控件ID值連續,并設置第一個單選按鈕的Group屬性,其他的不設。 ??? 11, 簡述由一個文檔類派生自己的文檔類,并實現文檔的存取需要哪些步驟。 首先為每一個文檔類型從CDocument派生一個相應的文檔類;然后為該文檔類添加成員變量以保存數據;最后重載Serialize成員函數以實現文檔數據的串行化。 ??? 12, 列舉視圖類(CView)的三個子類,并簡要說明其作用。 CScrollView類提供視圖的滾動顯示;CEditView類支持在視圖中的文本編輯操作;CHtmlView類支持在視圖中顯示和操作html文件。 ??? 13, Visual C++ 6.0如何進入調試狀態,在調試狀態下能夠顯示哪些調試窗口,列舉三個,其作用分別是什么? 啟動調試后,在View菜單的Debug Window子菜單下可以打開一些輔助調試的窗口 Watch:顯示察看當前語句和前面語句中變量值的窗口 Call Stack:顯示察看調用堆棧的窗口 Memory:顯示察看內存中內容的窗口 ??? 14, 說明位圖資源的創建及顯示過程的步驟,并給出相應的Windows API函數名。 首先定義位圖句柄HBITMAP hBitmap;第二步使用LoadBitMap加載位圖;第三步,調用CreateCompatibleDC向系統申請內存設備環境句柄,并調用函數SelectObject把位圖選入內存設備環境;第四步,調用BitBlt函數將位圖從內存設備環境輸出到指定的窗口設備環境中,從而實現顯示位圖。 ??? 15, 如何獲取字體句柄從而實現字體的輸出,并給出相應的Windows API函數名。 首先定義字體句柄變量HFONT hF;然后調用函數GetStockObject獲取系統的字體句柄,或者調用CreateFont得到自定義的字體句柄;最后調用SelectObject把字體句柄選入設備環境。 ??? 16, 列舉三種按鈕的類型,并說明其作用和創建方法之間的不同之處。 常用的按鈕有普通按鈕、單選按鈕、復選框,和組框。普通按鈕作用是幫助用戶觸發指定動作;單選按鈕一般各選項之間存在互斥性;復選框用來顯示一組選項供用戶選擇,各選項之間不存在互斥;組框主要用于把控件分成不同的組并加以說明. ??? 17, 要使一個靜態控件顯示一個位圖并能接受用戶輸入,應該注意什么問題。 要使靜態控件顯示位圖,必須設定其風格包含SS_BITMAP,并在創建靜態控件窗口,即調用CreateWindow時指定并加載位圖;要使靜態控件能夠接收用戶輸入,必須設定其風格包含SS_NOTIFY。
|
| VC實現BMP位圖文件結構及平滑縮放 | ||||||||||||||||||||||
|
||||||||||||||||||||||
posted on 2006-05-29 08:52 夢在天涯 閱讀(4100) 評論(5) 編輯 收藏 引用 所屬分類: CPlusPlus 、MFC/QT

