- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《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就会来主动调用你注册的函数,主动通知你。不再是程序调用操作系统的函数,而是操作系统反过来调用你的函数。Dont call me ,Ill call you!(也被人称为“好莱坞法则”)。
2、关于上面的这个问题要慢慢来理解,下面就来通过第一个例子来初步理解这个Dont call me ,Ill 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.RuP 大学生计算机学习社区),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函数在执行的时候,这段内存是被占用的,一旦函数返
文档评论(0)