这段时间把《C语言也能干大事》的前21章看完了,在里面学习了许多对控件的操作函数,后面的讲解也使我对与数据库的连接、DLL的建立有了一定的了解,现在将一些基本的操作以及基本的知识点在这里进行下归纳总结,便于以后的查阅。
WINAPI基本函数
1.MessageBox()
int MessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in message box LPCTSTR lpCaption, // message box title UINT uType // message box style );
掌握点:参数意义、返回值。
其中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( LPCSTR pszSound, HMODULE hmod, DWORD fdwSound );
函数调用形式: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( LPOPENFILENAME lpofn // initialization data );
初始化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( HWND hDlg, // handle to dialog box int nIDDlgItem, // control identifier LPCTSTR lpString // text to set ); UINT GetDlgItemText( HWND hDlg, // handle to dialog box int nIDDlgItem, // control identifier LPTSTR lpString, // pointer to buffer for text int nMaxCount // maximum size of string );
可用于设置或获得对话框控件上的文字,这两个函数很基本,最常用。
6.SendDlgItemMessage()
LRESULT SendDlgItemMessage( HWND hDlg, // handle to dialog box int nIDDlgItem, // control identifier UINT Msg, // message to send WPARAM wParam, // first message parameter LPARAM lParam // second message parameter );
这个函数太有用了,它可以控制、获得控件状态。如:为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( HWND hWnd, // handle to window UINT_PTR nIDEvent, // timer identifier UINT uElapse, // time-out value TIMERPROC lpTimerFunc // timer procedure ); VOID CALLBACK TimerProc( HWND hwnd, // handle to window UINT uMsg, // WM_TIMER message UINT_PTR idEvent, // timer identifier DWORD dwTime // current system time );
函数用法很简单,按照上面的形式写即可,设置时间时注意其以毫秒计。WINDOWS以设定的时间间隔周期性触发程序,它是非阻塞的。
当有多个时注意标识不要重复即可。
8.隐藏、显示、禁用、启用控件//没有多少好说的
隐藏:ShowWindow (hdlg, SW_HIDE) ;
显示:ShowWindow(IDC,SW_NORMAL);
判断控件是否可见:IsWindowVisible (IDC) ;
禁用控件:EnableWindow (IDC, FALSE) ;
启用控件:EnableWindow(IDC,TRUE);
判断控件是否可用:IsWindowEnabled (IDC) ;
9.多线程
HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD DWORD dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartAddress, // thread function LPVOID lpParameter, // thread argument DWORD dwCreationFlags, // creation option LPDWORD lpThreadId // thread identifier ); DWORD WINAPI ThreadProc( LPVOID lpParameter // thread data );
C语言的实用函数
memset(),itoa(),atoi(),atof(),sprintf(),sscanf()
这些函数以前一直不怎么熟习,在网上看到也觉得很难,其实还是自己用少了,它们和printf()一样,用多了你就知道它们带给你的方便了
VC的基本操作
创建自己的ico程序图标
新建ico文件,添加(即新建)rc文件,在rc文件右击import即可
这个视频知识点非常基础,因为它大部分内容还是讲解了基本控件使用及相关的函数,不过还是挺赞同作者,因为由浅入深学习也是个循序渐进的过程。后面的关于多线程编程、socket编程、DLL的编写、c语言写网站,这些只是最最基础的介绍了下,实用价值不大,但作为了解可以看看。
(这句话其实值得思考的,在你的资源能力范围内,永远不要循序渐进,永远把自己的思维用在最能发挥你资源效率的事情上,那么这就是你要对自己有一个好的预判,你要对自己的环境有一个好的预判。由这个角度循序渐进是错的,因为处理低级的东西会浪费你宝贵的时间)
与MFC会有不同,若要进一步了解windows下的编程原理应该要去看看孙鑫的视频,对于有基础的同学,看着还是挺好的。
另外强调下,多打基础,这些视频虽然看上去可以做出东西,但若对如何实现不了解,其实很枉然,编程的水平几乎很难进步,而且极易导致以后代码质量问题,编程不规范等一系列问题。建议打好基础,对C、C++语言多熟习熟习,多看看数据结构、算法等。