這段時間把《C語言也能幹大事》的前21章看完了,在裡面學習了許多對控制項的操作函數,後面的講解也使我對與資料庫的串連、DLL的建立有了一定的瞭解,現在將一些基本的操作以及基本的知識點在這裡進行下歸納總結,便於以後的查閱。
WINAPI基本函數
1.MessageBox()
int MessageBox(<br /> HWND hWnd, // handle to owner window<br /> LPCTSTR lpText, // text in message box<br /> LPCTSTR lpCaption, // message box title<br /> UINT uType // message box style<br />);
掌握點:參數意義、傳回值。
其中hwnd可以設定為NULL,即不指定父視窗。採用不同的style,以 | 進行style的重疊,而不同的style也會產生不同的傳回值。
函數調用形式:MessageBox(NULL,TEXT("請多查閱MSDN"),TEXT("windows編程"), MB_OK|MB_ICONINFORMATION);
另外為了避免漢字亂碼,可採用TEXT("請多查閱MSDN")來避免,相關可查閱
http://www.diybl.com/course/4_webprogram/asp.net/netjs/20090917/175552.html
2.PlaySound()
BOOL PlaySound(<br /> LPCSTR pszSound,<br /> HMODULE hmod,<br /> DWORD fdwSound<br />);
函數調用形式:PlaySound(TEXT("C://WINDOWS//MEDIA//Windows XP 電話撥入聲.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
此函數只能播放一首歌,使用時注意setting->link,添加 winmm.lib。
另外播放音樂還可以使用mciSendString()來實現,mciSendString()是多媒體相關的函數,如下形式可以彈出電腦光碟機:
mciSendString("set cdaudio door open",NULL,0,0);
3.GetOpenFileName()
BOOL GetOpenFileName(<br /> LPOPENFILENAME lpofn // initialization data<br />);
初始化OPENFILENAME這個結構體時主要注意兩處設定:
ofn.lpstrFilter="ALL/0*.*/0Text/0*.txt/0Song/0*.wav/0"; //設定檔案的過濾器
ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT;//最後一個flag允許多選。
ofn.lpstrFile=fliepath;//通過這樣,獲得選擇的檔案路徑名字。
另外當多檔案時,不同的檔案間以'/0'作為分割,所以可以自己寫格外的函數擷取所有的檔案名稱。
4.GetLogicalDrives()
此函數擷取系統中的磁碟資訊,其傳回值為bitmask,如傳回值為60,即二進位(111100),表示無A、B盤,含有C、D、E、F,最低位表示A盤,依次上升。
5.GetDlgItemText(),SetDlgItemText(),對許多控制項都有效包括checkbox、radio button
BOOL SetDlgItemText(<br /> HWND hDlg, // handle to dialog box<br /> int nIDDlgItem, // control identifier<br /> LPCTSTR lpString // text to set<br />);<br />UINT GetDlgItemText(<br /> HWND hDlg, // handle to dialog box<br /> int nIDDlgItem, // control identifier<br /> LPTSTR lpString, // pointer to buffer for text<br /> int nMaxCount // maximum size of string<br />);
可用於設定或獲得對話方塊控制項上的文字,這兩個函數很基本,最常用。
6.SendDlgItemMessage()
LRESULT SendDlgItemMessage(<br /> HWND hDlg, // handle to dialog box<br /> int nIDDlgItem, // control identifier<br /> UINT Msg, // message to send<br /> WPARAM wParam, // first message parameter<br /> LPARAM lParam // second message parameter<br />);
這個函數太有用了,它可以控制、獲得控制項狀態。如:為combo插入下拉選項,獲得其選項、刪除其選項等等;設定、獲得checkbox選中狀態等等;還能對listbox進行添加資訊等等。這解決了許多windows程式開發中需要的功能。
//今天就寫這麼多,後面有關於上面函數的具體是使用,然後還有比較重要的函數SetTimer(),以及更多控制項操作。
以下是SendDlgItemMessage()中比較的訊息:
對於combobox中常用訊息,具體使用可以再查閱MSDN
CB_ADDSTRING CB_DELETESTRING CB_GETCOUNT CB_GETCURSEL CB_INSERTSTRING CB_RESETCONTENT CB_SELECTSTRING CB_SETCURSEL CB_SETTOPINDEX CB_SHOWDROPDOWN
checkbox中常用到的訊息
BM_GETCHECK BM_GETSTATE BM_SETCHECK BM_SETSTATE BN_CLICKED
list box中的訊息更多,這個控制項比較複雜,也可以自己進行重寫,不過這裡也只是列舉最常用的訊息吧
LB_GETTEXT LB_GETTOPINDEX LB_INSERTSTRING LB_SETCOUNT LB_SETCURSEL LB_SETSEL LB_SETTOPINDEX LBN_DBLCLK LBN_SELCHANGE
7.SetTimer()//目前使用並多不,所以也不能詳細介紹了。
UINT_PTR SetTimer(<br /> HWND hWnd, // handle to window<br /> UINT_PTR nIDEvent, // timer identifier<br /> UINT uElapse, // time-out value<br /> TIMERPROC lpTimerFunc // timer procedure<br />);<br />VOID CALLBACK TimerProc(<br /> HWND hwnd, // handle to window<br /> UINT uMsg, // WM_TIMER message<br /> UINT_PTR idEvent, // timer identifier<br /> DWORD dwTime // current system time<br />);
函數用法很簡單,按照上面的形式寫即可,設定時間時注意其以毫秒計。WINDOWS以設定的時間間隔周期性觸發程式,它是非阻塞的。
當有多個時注意標識不要重複即可。
8.隱藏、顯示、禁用、啟用控制項//沒有多少好說的
隱藏:ShowWindow (hdlg, SW_HIDE) ;
顯示:ShowWindow(IDC,SW_NORMAL);
判斷控制項是否可見:IsWindowVisible (IDC) ;
禁用控制項:EnableWindow (IDC, FALSE) ;
啟用控制項:EnableWindow(IDC,TRUE);
判斷控制項是否可用:IsWindowEnabled (IDC) ;
9.多線程
HANDLE CreateThread(<br /> LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD<br /> DWORD dwStackSize, // initial stack size<br /> LPTHREAD_START_ROUTINE lpStartAddress, // thread function<br /> LPVOID lpParameter, // thread argument<br /> DWORD dwCreationFlags, // creation option<br /> LPDWORD lpThreadId // thread identifier<br />);<br />DWORD WINAPI ThreadProc(<br /> LPVOID lpParameter // thread data<br />);<br />
C語言的實用函數
memset(),itoa(),atoi(),atof(),sprintf(),sscanf()
這些函數以前一直不怎麼熟習,在網上看到也覺得很難,其實還是自己用少了,它們和printf()一樣,用多了你就知道它們帶給你的方便了
VC的基本操作
建立自己的ico程式表徵圖
建立ico檔案,添加(即建立)rc檔案,在rc檔案右擊import即可
這個視頻知識點非常基礎,因為它大部分內容還是講解了基本控制項使用及相關的函數,不過還是挺贊同作者,因為由淺入深學習也是個循序漸進的過程。後面的關於多線程編程、socket編程、DLL的編寫、c語言寫網站,這些只是最最基礎的介紹了下,實用價值不大,但作為瞭解可以看看。
(這句話其實值得思考的,在你的資源能力範圍內,永遠不要循序漸進,永遠把自己的思維用在最能發揮你資源效率的事情上,那麼這就是你要對自己有一個好的預判,你要對自己的環境有一個好的預判。由這個角度循序漸進是錯的,因為處理低級的東西會浪費你寶貴的時間)
與MFC會有不同,若要進一步瞭解windows下的編程原理應該要去看看孫鑫的視頻,對於有基礎的同學,看著還是挺好的。
另外強調下,多打基礎,這些視頻雖然看上去可以做出東西,但若對如何?不瞭解,其實很枉然,編程的水平幾乎很難進步,而且極易導致以後代碼品質問題,編程不規範等一系列問題。建議打好基礎,對C、C++語言多熟習熟習,多看看資料結構、演算法等。