window編程學習總結

來源:互聯網
上載者:User

這段時間把《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++語言多熟習熟習,多看看資料結構、演算法等。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.