首页 c语言也能干大事(实例教学)

c语言也能干大事(实例教学)

举报
开通vip

c语言也能干大事(实例教学)《C语言也能干大事》第一节 板书: 1、 C语言不是只能开发黑底白字的控制台界面程序。学习本课的基础:本课程不讲C语言基础知识,C语言考及格,学的过程中配合复习,有不懂的回去翻书。 2、 学完本课程以后同学们做的一些作品赏析:计算器、俄罗斯方块、音乐播放器、学生管理系统(http://www.rupeng.com/forum/thread-2487-1-1.html ),邮件客户端(http://www.rupeng.com/forum/thread-3697-1-1-uid7.html ),Web论坛(http:...

c语言也能干大事(实例教学)
《C语言也能干大事》第一节 板 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf : 1、 C语言不是只能开发黑底白字的控制台界面程序。学习本课的基础:本课程不讲C语言基础知识,C语言考及格,学的过程中配合复习,有不懂的回去翻书。 2、 学完本课程以后同学们做的一些作品赏析:计算器、俄罗斯方块、音乐播放器、学生管理系统(http://www.rupeng.com/forum/thread-2487-1-1.html ),邮件客户端(http://www.rupeng.com/forum/thread-3697-1-1-uid7.html ),Web论坛(http://www.rupeng.com/forum/thread-3991-1-1-uid7.html )可以开发游戏、网络程序、网站程序等。C语言什么都可以开发 3、 准备工作,安装VC6(在网上搜“Visual C++ 6”,找合适的地址下载)。VC6在Vista、Windows下启动可能有兼容性提示。 3、开始做第一个C语言的程序                【文件】→【新建】,打开【工程】选项页,选择【Win32 Application】(不要选错了),在“位置”中修改工程保存的路径。(以前用Tubor C的同学会问“什么叫工程?”。在以前大家用TurboC写的程序一般也就是一个文件,但是用C语言写大程序的时候不可能把所有的代码都写在一个文件中,肯定要写很多文件。“工程(Project)”就是这些文件的一个集合。)在“工程名”中写入你为这个工程取的名字,最好有一定意义。下一步【一个简单的Windows程序】 4、向Windows的世界问好 MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK); VC6在Vista、Windows下编译调试时可能有兼容性提示。 5、学本课程常见问题 (1)为什么不用TurboC? Turbo C(Win-TC)太老了,界面还是DOS界面,库也是DOS的库,没有网络开发包、没有Windows界面开发包。TC只能用来学C的基础,要进行实际开发必须使用先进一点的工具。还是让TurboC进博物馆吧。 (2)为什么不用更高版本的VC?                我们不使用高版本的VC主要是如下考虑:VC6和高版本的VC没有本质区别(VC6是1998年的东西,大部分人、公司还是用VC6,市面上的书也都是用VC6),只不过是升级了一下C++的版本、STL的版本而已,对咱们这次学习没有什么影响;VC6的操作方式和VC2008非常相似,用熟了VC6再学高版本的VC只用半小时而已;高版本的VC体积太大,要五六百兆,而上面给出的VC6只有100MB。VC2008下建立工程。 (3)学C语言还是学其他语言,用其他语言实现岂不是更好? 用最熟悉的语言深入编程的各个领域(网络、数据库、图形学、内核等),一通百通,一切语言都是纸老虎。参考资料如鹏网首页。 6、深入研究MessageBox (1)MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK);                第一个参数暂时不讲;第二个是正文;第三个是标题(Caption);第四个是类型。 MB_OK就是 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示有一个OK按钮【确定】) TEXT是一个宏,当字符串中有中文的时候最好用TEXT来包围这个字符串,虽然不使用TEXT在VC6中没问题,但是在VC7中有问题,而且微软也建议使用TEXT宏,因此在涉及到中文的场合要使用它。他的作用就是把中文转化成不会乱码的格式。(暂时这么认为)。_T("问好"),其实_T只是TEXT的一个缩写而已。而且_T在有的低版本里不识别。TEXT()低版本也识别。暂时不用关心TEXT的细节。                换个样子: MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),MB_OKCANCEL); 可从设置希望在对话框中显示的按钮: #define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L 也可以设置对话框中显示的图标: #define MB_ICONHAND 0x00000010L #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L 比如:MessageBox(NULL, TEXT("世界你好") ,TEXT("你好"), MB_ICONQUESTION); (2)可是如果我想显示“确定、取消”按钮的时候同时使用问号图标呢? MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),MB_OKCANCEL| MB_ICONQUESTION); MessageBox(NULL, TEXT("世界你好"), TEXT("你好"), MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION); (3)思考: 到这一步如果你只是在背诵“第一组和第二组中间放一个竖线就可以实现两种效果的组合形式”,那么你未来只会成为一个代码工人。我们要思考一下其背后的原理。 “|”是什么意思?“|”是位运算里的“或”运算,只有对应的两个二进位有一位为1时,结果位才为1 ,否则为0。MB_OK、MB_OKCANCEL等的低四位不同,但是高位永远为0;MB_ICONHAND、MB_ICONQUESTION等的低5至第8位不同,而其他位永远为0。这样“MB_OK、MB_OKCANCEL”组的数值与“MB_ICONHAND、MB_ICONQUESTION”组的数值进行或运算后能分别保留各自的部分,也就是在结果值中同时体现两组的取值。 这种风格叫“掩码”,在Windows编程中这种用法会经常用到。 (4)返回值 MessageBox是有返回值的,返回值为用户点击的按钮: #define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7 代码: int ret = MessageBox(NULL, TEXT("你是人吗?"), TEXT("火星人"), MB_YESNO | MB_ICONQUESTION); if(ret==IDYES) { MessageBox(NULL, TEXT("火星人你好"), TEXT("问好"),MB_OK); } else { MessageBox(NULL, TEXT("欢迎回家来"), TEXT("问好"),MB_OK); } 6、课后作业:自己动手写恶搞程序。 运行以后弹出询问对话框(有【是】、【否】两个按钮以及问号图标)“你是好人吗?”,如果点击【是】,则弹出对话框(只有一个【确定】按钮以及一个警告图标)“你看你就不像好人,点击【确定】开始格式化C盘!”;如果点击【否】,则弹出对话框(有【重试】、【取消】两个按钮)“尝试把你变成好人失败,是否重试?”。 别把教学视频当电影看!!!多练!!!多写!!! 《C语言也能干大事》第二节 板书: 运行以后弹出询问对话框(有【是】、【否】两个按钮以及问号图标)“你是好人吗?”,如果点击【是】,则弹出对话框(只有一个【确定】按钮以及一个警告图标)“你看你就不像好人,点击【确定】开始格式化C盘!”;如果点击【否】,则弹出对话框(有【重试】、【取消】两个按钮)“尝试把你变成好人失败,是否重试?”。 1、怎么生成exe程序。怎么把做好的exe程序发给别人? 在我的电脑里直接进入工程文件夹。工程目录下生成的debug/release文件就是生成好的可执行文件,发给别人就可以。Debug和Release版本区别。怎么生成Release版本。 1、对话框程序 VC6下安装Win32 DialogBased Application http://down1.rupeng.com/download/software/Win32DlgBasedAppWizard.zip VC2008下安装Win32 DialogBased Application http://down1.rupeng.com/download/software/DlgBasedAppWizardVS2008.zipnload/software/DlgBasedAppWizardVS2008.zip 如鹏的Win32 DialogBased Application没有做神奇的事情,只是简化了创建的过程,大家也可以手工创建,创建的代码可以在没有安装Win32 DialogBased Application Wizard的机器上用。演示在2008上从win32application 创建一个Win32 DialogBased Application。 在资源编辑器中编辑对话框界面并且拖放控件上去。试试常用的那些控件 什么是属性。 作业:开发一个注册界面。 2、常见问题 (1)开发Windows程序有什么前途?不要急于求成,用自己最熟悉的语言探索编程的各个方面,内核级开发、数据库、网络、动态网站开发等。学《C语言也能干大事》的目的并不是直接找开发Windows程序的工作,只要锻炼了动手能力和一通百通的数据库、网络、动态网站开发、面向对象等技能,学什么东西、找什么工作都很轻松。 (2)学MFC不是更好?MFC乱七八糟的东西太多,隐藏了太多,隐藏不仅没有有利于初学者学习,反而使得更复杂。MFC只是一个稍微封装的SDK,学会了这里的课程如果又需要再去学MFC的话会发现90%是相同的。 http://www.rupeng.com/forum/thread-338-1-1.html 3、对话框中图片资源的应用在资源视图中,选择“引入”,然后文件过滤器选择“*.*”,找到bmp图片文件。选中图片空间,要点击边缘。拖一个IMAGE控件过来,并且修改IMAGE控件的Type属性为BitMap,在控件的Image属性中选择刚才添加的BITMAP资源。jpg的格式怎么转换为bmp格式的呢?用画图工具(mspaint)。图片被编译到了程序中,不再依赖于源文件 4、菜单资源 制作好菜单资源后,在对话框的Menu属性中选择刚才制作好的对话框。 子菜单项(选中【弹出】)、快捷键(在要担当快捷键的字母前加&)、分隔符 5、只有控件、菜单,可以点击控件、菜单以后的动作怎么做呢?就要写代码了。后面会讲 《C语言也能干大事》第三节 板书: 1、怎么修改程序图标,引入一个ico文件(可以用一些工具制作ico图标,网上搜“制作ico”),然后命名ID为1,重新构建。 2、在编写控制台程序的时候一切 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 都是有先后关系、并行的,而且所有函数都是由我们来调用的,比如下面的实例性代码: printf("确定请输入y,取消输入n"); char c = getchar();//scanf if(c=='y') { /// } else if(c=='n') { /// } Void func1() { MessageBox(NULL,TEXT(“按钮1被按下了”)….); } Void func2() { MessageBox(NULL,TEXT(“按钮2被按下了”)….); } 我们可以用getchar来等待用户输入一个值。但是到了Windows编程中就不一样了,同一时刻用户即可能点击【OK】按钮,又可能点击【Cancel】按钮,又可能在文本框中输入几个字,还可能在窗口上双击几下,这样就无法同时等待用户的这些动作。为了解决这个问题,Windows引入了消息机制(也可以叫做回调机制或者事件机制)。在程序启动的时候把函数func1要响应【OK】按钮1的点击动作、函数func2要响应【Cancel】按钮的点击动作、函数func3要响应窗口的双击动作等等这些信息告诉Windows,然后当用户执行相应操作的时候Windows就会来主动调用你注册的函数,主动通知你。不再是程序调用操作系统的函数,而是操作系统反过来调用你的函数。Don't call me ,I'll call you!(也被人称为“好莱坞法则”)。 2、关于上面的这个问题要慢慢来理解,下面就来通过第一个例子来初步理解这个Don't call me ,I'll call you! //HANDLE_MSG的意思就是告诉Windows,当发生WM_COMMAND消息的时候,请 //通知Main_OnCommand函数 //id这个参数是Windows给咱们“送”过来的 看Main_OnCommand方法,初探windows的消息机制。 void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_OK: { MessageBox(hwnd,TEXT("欢迎访问如鹏网 www.RuPeng.com 大学生计算机学习社区"),TEXT("问好"),MB_OK); } break; default: break; } } 不同的控件要有不同的id,控件的名字,在人类社会中名字有可能重名,但是在windows中id不能重复 按钮被按下的时候Main_OnCommand方法被调用,hwnd是对话框句柄(什么是句柄后面讲,通俗的说就是通过它能够操纵对话框),id是控件的id,后两个参数暂时不关心。 Main_OnCommand方法中根据id,也就是被点击按钮的名字来决定不同的动作。 Hwnd是当前窗口的句柄,句柄就是把柄!操作一个东西,要先抓住他的把柄!通过句柄就可以操作这个对象。 //不要忘了break//不要忘了case中用大括号 3、定制自己的对话框,不同的按钮不同的问好 然后重新添加一个自己的按钮,在属性中修改Name属性为IDC_BTNHELLO。 控件名字的潜规则:所有控件的Name都以“IDC_”开头,然后后边跟着控件类型的简称(按钮简称BTN、文本框简称EDT等等),最后才是控件的真正的名字。修改按钮的Caption属性(也就是按钮上显示的文字)为“问好”。 编辑Main_OnCommand方法: void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { ……………………… case IDC_BTNHELLO: { MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK); } break;//不要忘记break default:break; } } 运行程序,点击“问好”按钮,咱们第一个响应按钮动作的程序就做好了。 4、自己动手写计算器1.0版 (1)、得到控件中用户输入的文本 GetDlgItemText(hwnd,IDC_EDTNAME,str,sizeof(str)); 第一个参数是对话框的句柄;第二参数就是控件的id(name);第三个参数就是字符串数组的指针;第四个参数是指针指向区域的大小. 疑问:为什么不能像MessageBox一样把字符串做为返回值返回呢??? 这就涉及到C语言中函数返回指针的问题了 在函数内部返回函数内构建的指针有可能出现数据混乱. 当f1函数在执行的时候,这段内存是被占用的,一旦函数返回,那么内存就标记为可以被其他人、函数占用。 如果你把这段内存中的指针返回了,那么一旦其他地方用了这段内存,那么你引用的就是错误的数据了。 用GetWindowText、GetDlgItemText的时候为什么要传数组名呢?复习:初学者可以认为数组名就是指针,函数只有得到指针,才能直接操作数组中的数据。 (2)c语言中字符串连接:wsprintf(str,”….”,a1,a2); 还有sprintf,但是在编写windows程序的时候最好使用wsprintf。 //GetDlgItemText(hwnd,IDC_EDITNAME,str,sizeof(str)); //第一参数是窗口的句柄,第二个参数是要取得内容的控件的ID //第三个参数就是字符串指针,第四个参数就是指针指向区域的大小 TCHAR name[256];//为什么不用strlen,sizeof。 //如鹏网站内搜索搜“strlen,sizeof”区别 //Windows编程中一般都用TCHAR代替char。TCHAR有时候就是char。 //解决Unicode、中文编码问题。 GetDlgItemText(hwnd,IDC_EDITNAME,name,sizeof(name)); //printf是打印到屏幕上 //printf("%s你好",name); //sprintf是打印到字符串中 //相当于很多C#、Java语言里的字符串相加 name+"你好" //sprintf(字符串,"...",a1,a2,a3....); TCHAR msg[256]; //sprintf(msg,"%s你好",name); //wsprintf,C语言开发Windows程序的时候用wsprintf代替sprintf //解决中文等问题 wsprintf(msg,"%s你好",name); MessageBox(hwnd,msg,msg,MB_OK); (3)向用户问好 TCHAR name[256]; GetDlgItemText(hwnd,IDC_EDTNAME,name,sizeof(name)/sizeof(TCHAR)); TCHAR msg[256]; wsprintf (msg,"%s你好",name); MessageBox(hwnd, msg,TEXT("问好"),MB_OK); (4) C语言里边字符串转换为数字:atoi:ascii to int (5) 编写windows程序的时候最好用TCHAR来代替char,可以避免中文的问题 case IDC_BTNHELLO: TCHAR name[256]; GetDlgItemText(hwnd,IDC_EDTNAME,name,sizeof(name)/sizeof(TCHAR)); int i = atoi(name); int j=i*2; TCHAR result[256]; itoa(j,result,10); MessageBox(hwnd,result,TEXT("问好"),MB_OK); (6)Get、Set:配对的,设置对话框的值用SetDlgItemText: 代码: case IDC_BTNADD: //取第一个文本框的字符串,然后得到整数表示 // 取第二个文本框的字符串,然后得到整数表示 //计算两个整数的和 //把和重新转换成字符串,然后Messagebox出来。 TCHAR cNumber1[256]; GetDlgItemText(hwnd,IDC_EDTNUM1,cNumber1,sizeof(cNumber1)/sizeof(TCHAR)); int n1 = atoi(cNumber1); TCHAR cNumber2[256]; GetDlgItemText(hwnd,IDC_EDTNUM2,cNumber2,sizeof(cNumber2)/sizeof(TCHAR)); int n2 = atoi(cNumber2); int n3 = n1+n2; TCHAR cResult[256]; itoa(n3,cResult,10); SetDlgItemText(hwnd,IDC_EDTRESULT, cResult); break; //int i1; //int i2; //不能梦想着直接定义两个int类型的参数,就让windows告诉你两个数的值 TCHAR str1[256]; TCHAR str2[256]; GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1)); GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2)); //两个字符串不能直接相加,要先转换成int类型。 //C 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 库函数:atoi,a:ascii to i:int 理解了atoi的简写不用死记硬背了 int i1=atoi(str1); int i2=atoi(str2); int i3=i1+i2; //printf("%i",i3); TCHAR str3[256]; itoa(i3,str3,2);//字符串转换为整数,第三个参数就是进制。 //wsprintf(str3,"%i",i3); SetDlgItemText(hwnd,IDC_EDIT3,str3); (7)代码中有UINT、TCHAR、LRESULT、HWND之类的新的数据类型,其实它们只是一些类型的别名而已,可以通过宏定义看出来。但是考虑到可移植性,尽量不要使用它们的真实类型。Typedef C语言中声明类型别名。 (8)作业:做一个面积计算器,用户输入半径,在另外一个文本框中显示面积。 (10)作业:用户输入十进制整数,在另外一个文本框中显示整数的二进制形式。做一个十进制到二进制的转换小工具。 (10)作业:计算两个数的差。 (11)思考:这个计算两个数的和程序有什么缺陷?没有阻止用户输入非数字。怎么解决。 多练手,光听视频什么用都没有,浪费时间,必须练手,再简单的代码也要自己写,不要眼高手低!!!你没有多牛X。 《C语言也能干大事》第四节 板书: 上节课作业 (8)作业:做一个面积计算器,用户输入半径,在另外一个文本框中显示面积。 (10)作业:用户输入十进制整数,在另外一个文本框中显示整数的二进制形式。做一个十进制到二进制的转换小工具。 (10)作业:计算两个数的差。不要总认为看很多书、学高深技术、看很多视频就是牛人,能把一个最简单的程序快速写出来的才是牛人!!! (11)思考:这个计算两个数的和程序有什么缺陷?没有阻止用户输入非数字。怎么解决。 调试的技巧,断点:执行到断点的时候程序暂停住。 《C语言也能干大事》第五节 板书: 上节课的作业你自己写了吗?比我快吗?如果没有写的话别继续往下看,先回去自己写。 实现“自己动手写计算器2.0版”,允许选择运算符号。 ComboBox的操作 (1)添加项: 填入Combo最简单的方法是借助ComboBox_AddString“函数”(其实是宏): ComboBox_AddString(hwndCtrl,str)                每个控件也有自己的句柄。句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例、窗口、图片、图标等等。控件句柄和控件id的区别:控件句柄在每次运行的时候都是不一样的,而控件id则是确定的。ComboBox_AddString等几乎所有控件函数都可以对整个Windows中的控件进行控制(有的游戏外挂的原理),在一个对话框内id不能重复,但是在不同的对话框内则可以重复,因此需要一个全局的不重复的句柄来表示控件,通过对话框+id联合确定。两个不同的程序(哪怕是同一个程序启动的两个不同的实例,开两个记事本)是找到我爸,然后找我父亲的id=1的儿子,也就是我,然后再打我。这就是通过我父亲的把柄和我的id=1来定义我 GetDlgItem由对话框句柄+id得到控件的句柄。 Main_OnInitDialog对话框初始化的时候被调用。 做一个例子 (2) 确定目前选项的索引:int ComboBox_GetCurSel(     HWND hwndCtl);Cur:CurrentSel:Selection返回值是当前项的编号,从0开始。得到的不是“北京市”这样的字符串,而是索引(编号)如果没有项目被选中,那么从函数中传回的iIndex值为CB_ERR。做一个例子 (3)删除项: int ComboBox_DeleteString(     HWND hwndCtl,    int index); 做一个例子 (4)取得有多少项: int ComboBox_GetCount(     HWND hwndCtl);返回值是个数。(5)选定某一项int ComboBox_SetCurSel(     HWND hwndCtl,    int index);将index设定为-1则取消所有选择 (6)得到某项的值 int ComboBox_GetLBText(     HWND hwndCtl,    int index,    LPCTSTR lpszBuffer); 怎么让Combo不能改?类型:下拉列表(默认是“下移”) 更多ComboBox的用法 http://msdn.microsoft.com/en-us/library/cc656426(VS.85).aspx 是宏,不是函数。SendDlgItemMessage/SendMessage。 额外知识,不讲,自学(不想变成填鸭式教育,课上只讲思想性的东西,会给大家学习资料,希望大家培养自学能力) 实现四则运算器: 作业 (1) 给本节课的小练习提改进建议并且自己实现。 (2)学生管理系统(画原型界面布置)增、删、查(双击)、搜 多练手,光听视频什么用都没有,浪费时间,必须练手,再简单的代码也要自己写,不要眼高手低!!!你没有多牛X。 《C语言也能干大事》第六节 板书: 上节课作业:学生管理系统(画原型界面布置)增、删、查(双击)、搜 接下来我们要实现小时钟。涉及到的主要知识点是定时器的使用,涉及到的C知识就是函数指针(回调函数) 使用定时器 回调就是不是你调别人,而是别人调你。时间到了会叫你,没到的时候不会烦你。 让Windows直接将定时器消息发送给您程序的另一个函数。 我们把以下的callback函数称为TimerProc(您能够选择与其它一些用语不会发生冲突的任何名称),它只处理WM_TIMER消息: VOID CALLBACK TimerProc ( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime); SetTimer (hwnd, iTimerID, iMsecInterval, TimerProc) ;//二、名字ID;第三个参数,毫秒单位,回调时间;四、回调函数指针 19、得到当前日期: void GetLocalTime(LPSYSTEMTIME);//LP一般是指针结构的前缀,SYSTEMTIME是一个结构体 课上练习: SYSTEMTIME stLocal; //声明,传指针 char chBuf[256]; GetLocalTime(&stLocal); //显示时间的间隔。 wsprintf(chBuf,TEXT("%u/%u/%u %u:%u:%u:%u 周%d\r\n"), stLocal.wYear, stLocal.wMonth, stLocal.wDay, stLocal.wHour, stLocal.wMinute, stLocal.wSecond, stLocal.wMilliseconds,stLocal.wDayOfWeek); MessageBox(NULL,chBuf,"",MB_OK); SetTimer(hwnd,1,1000,TimerProc); void CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) { SYSTEMTIME time; GetLocalTime(&time); TCHAR strTime[256]; //%后面的0表示不够的位数补零,5是总位数,就这样 wsprintf(strTime,"%04d-%02d-%02d %02d:%02d:%02d",time.wYear,time.wMonth,time.wDay,time.wHour,time.wMinute,time.wSecond); SetDlgItemText(hwnd,IDC_EDTTIME,strTime); } 作业:定时关机、定时关闭显示器,如何编程实现关机、关显示器。到整天播放音乐。自学!!!“关闭显示器 API”、“关闭显示器 函数” 9、取得复选按钮的是否选中: LRESULT Button_GetCheck(     HWND hwndCtl); BST_CHECKED BST_UNCHECKED //此分别为选中/未选中的返回值 【示例程序段】 switch(id) { case IDOK: { // MessageBox( hwnd, _T("HelloWorld"), _T("OK"), MB_OK ); HWND hwndCheck=GetDlgItem(hwnd,IDC_CHECK1); int checkState=Button_GetCheck(hwndCheck); if (BST_CHECKED==checkState) { MessageBox(hwnd,TEXT("checked"),TEXT(""),MB_OK); } if (BST_UNCHECKED==checkState) { MessageBox(hwnd,TEXT("unchecked"),TEXT(""),MB_OK); } } break; default: break; } 设置复选按钮是否选中: LRESULT Button_SetCheck(     HWND hwndCtl,    int check); BST_CHECKED BST_UNCHECKED //返回值 7、ListBox(和Combo类似) (1)添加项: 如果采用LBS_SORT样式,那么填入清单方块最简单的方法是借助ListBox_AddString: int ListBox_AddString(     HWND hwndCtl,    LPCSTR lpsz);        如果没有采用LBS_SORT,那么可以使用ListBox_InsertString指定一个索引值,将字符串插入到清单方块中: int ListBox_InsertString(     HWND hwndCtl,    int index,    LPCSTR lpsz); (2)删除项: int ListBox_DeleteString(     HWND hwndCtl,    int index); (3)取得有多少项: int ListBox_GetCount(     HWND hwndCtl); (4)选定某一项int ListBox_SetCurSel(     HWND hwndCtl,    int index);将iParam设定为-1则取消所有选择(5) 确定目前选项的索引:int ListBox_GetCurSel(     HWND hwndCtl); 如果没有项目被选中,那么从呼叫中传回的iIndex值为LB_ERR。(6)将某项目复制到文字缓冲区中:int ListBox_GetText(     HWND hwndCtl,    int index,    LPCTSTR lpszBuffer); 9、菜单资源 (1)制作好菜单资源后,在对话框的Menu属性中选择刚才制作好的对话框。 (2)响应菜单操作。菜单点击后也会发送WM_COMMAND消息id就是被选择菜单的id。例子: case IDM_QUIT: EndDialog(hwnd,id); 作业:文件操作。自己动手写记事本。路径写固定的路径。 下节课内容:作业点评,文件对话框、播放音乐 第七讲 板书: 作业点评: 文件操作。自己动手写记事本。 fopen fclose edit-control 选多行multiline 要用ctrl+回车来换行 fopen FILE *fp=fopen("E:/00用®?户¡ì00/1.txt","r"); char line[256]; fgets(line,sizeof(line),fp); fclose(fp); SetDlgItemText(hwnd,IDC_EDIT1,TEXT(line)); 用 循环 读多行文本文件 RichEdit控件。 要使用高级控件,必须把LoadLibrary( "riched32.dll" ); //这句话放在 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { InitCommonControls(); 这里 DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, WinProc); } 参考资料:http://msdn.microsoft.com/en-us/library/bb787605(VS.85).aspx 5、给结构体所有字段置零 复习一下C语言中memset以及结构体的应用。C语言中声明一个结构体变量之后,在使用这个变量之前要首先用memset来把各个位清零。使用C语言内置的函数memset来完成: memset(&s1,sizeof(s1),0); 在这里我们使用ZeroMemory“函数”,ZeroMemory其实并不是函数,其实是memset的宏定义 ZeroMemory其实就是memset,纸老虎而已,不是一个全新的函数。 6、打开文件对话框的使用 首先#include OPENFILENAME ofn; //结构体 char szFile[MAX_PATH]; ZeroMemory(&ofn,sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.lpstrFile = szFile; ofn.lpstrFile[0] = TEXT('\0'); ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0"); ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.hwndOwner = hwnd;//自学能力、探索能力、猜测能力 ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if (GetOpenFileName(&ofn)) { MessageBox(NULL,szFile,"",MB_OK); }                参数太多只能搞Struct。下面将对这段代码作解释: (1)、ZeroMemory的含义见上边 (2)char szFile[MAX_PATH];//定义一个长度为MAX_PATH的char数组。 MAX_PATH是系统定义的一个宏,260。Windows操作系统文件路径的最大长度。 (3)ofn.lpstrFile = szFile; //szFile是一个字符数组,那么szFile这个名字就代表这个字符数组的首地址 (4)文件类型过滤器 *.*就表示所有文件 *.txt就表示所有文本文件 abc*.*就表示所有以abc开头的文件 abc*.txt就表示所有以abc开头的文本文件(txt) ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");用“\0”分割出几个段,每两段是一组过滤器,每组的第一个段代表过滤器的显示的值,而第二段表示真正的过滤器 (5)ofn.nFilterIndex = 2;默认选择第几个过滤器,是1开始的,不是0.这也是试验出来的。 (6)windows的一个惯例:结构体的指针类型别名一般是LP+结构体的名字 GetOpenFileName(&ofn)而不是GetOpenFileName(ofn),因为GetOpenFileName函数要的是OPENFILENAME的指针 (7)用户关闭对话框,GetOpenFileName函数返回,返回值是BOOL,等于TRUE表示用户选择了文件,如果等于FALSE就表示用户选择了【取消】按钮 第三节 1、GetOpenFileName 希望同学们不要只记我教的结果,而是要跟着我的思路进行思考,看解决问题的方式。否则就又变成“我教同学们学”的填鸭式教育了。 (2)课上练习:打开对话框,用户选择一个音乐文件,然后用MCIsendString播放,注意ShortPath的问题。如何让音乐文件跟着文件走,GetModuleFileName、GetCurrentDirectory (3)打开多个文件: 增加OFN_ALLOWMULTISELECT选项后测试一下。发现如果选择一个文件后显示的还是这个文件的路径,可是如果选择多个文件显示的就只有目录的路径,怎么回事? 调试一下,看看szFile在内存中的样子。调试的是发现内存中的样子是目录的路径然后加上各个文件名,中间用“\0”分割,现在明白为啥值显示目录的路径了吗? 大家明白这一点就可以了,有兴趣的可以课后来做多文件选择的处理。做播放器的时候经常需要这个功能,也就是播放列表。有一篇文章可以参考一下:http://xxkkff.blog.51cto.com/162016/26222 2、GetSaveFileName 保存文件对话框 只要把上边函数换成GetSaveFileName。OFN本来是OpenFileName的简写,它SaveFileName也跑来凑热闹,吼吼。如果需要保存文件覆盖提示怎么办呢?看看OFN有选项吗?OFN_OVERWRITEPROMPT Mcisendstring播放音乐,配合GetOpenFileName实现播放器 GetShortPathName mciSendString(“play ***”,"",0,NULL); Mcisendstring更多用法(暂停、继续、录音、播放进度控制)参考 http://baike.baidu.com/view/1622810.htm?fr=ala0_1 http://msdn.microsoft.com/en-us/library/dd743572(VS.85).aspx 作业:提供打开、保存功能的记事本 作业:自己动手写播放器 http://so.rupeng.com/?keyword=C%E8%AF%AD%E8%A8%80+%E6%92%AD%E6%94%BE%E5%99%A8 更多控件用法 http://msdn.microsoft.com/en-us/library/bb773169(VS.85).aspx VC就是全部、VC不是唯一:C-Free、Pelles C、Dev C++、CodeBlocks。C-Free使用演示(Vista、Win7上资源编辑器可能有问题)。 学完第七节就可以开始从第一版11节开始继续学习了、第12节也是旧版的,不用看。第1版1至10节中还有一些在第二版中没有讲的东西,有兴趣的可以去粗略的过一遍,当然不学第一版也能继续向后学。
本文档为【c语言也能干大事(实例教学)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_288434
暂无简介~
格式:doc
大小:99KB
软件:Word
页数:38
分类:互联网
上传时间:2011-09-15
浏览量:24