运行以后弹出询问对话框(有【是】、【否】两个按钮以及问号图标)“你是好人吗?”,如果点击【是】,则弹出对话框(只有一个【确定】按钮以及一个警告图标)“你看你就不像好人,点击【确定】开始格式化C盘!”;如果点击【否】,则弹出对话框(有【重试】、【取消】两个按钮)“尝试把你变成好人失败,是否重试?”。

1、怎么生成exe程序。怎么把做好的exe程序发给别人?

在我的电脑里直接进入工程文件夹。工程目录下生成的debug/release文件就是生成好的可执行文件,发给别人就可以。Debug和Release版本区别。怎么生成Release版本。

对话框程序:

VC6下安装Win32 DialogBased Applicationhttp://dl.dbank.com/c0jbqq9j02

VC2008下安装Win32 DialogBased Applicatiohttp://dl.dbank.com/c0d7wbe576

如鹏的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、只有控件、菜单,可以点击控件、菜单以后的动作怎么做呢?就要写代码了。后面会讲

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!

3、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);(格式化输出,可以用atoi函数),还有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);(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标准库函数: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)作业:用户输入十进制整数,在另外一个文本框中显示整数的二进制形式。做一个十进制到二进制的转换小工具。

(11)作业:计算两个数的差。

(12)思考:这个计算两个数的和程序有什么缺陷?没有阻止用户输入非数字。怎么解决。

C语言也能干大事第七节(如鹏基础)相关推荐

  1. c语言开发网站教程,C语言也能干大事之C语言开发网站教程

    教程名称:C语言也能干大事之C语言开发网站教程 课程简介: 本章主干知识点:现在做桌面窗口程序开发的工作已经不多了,目前企业需求量最大的技术是"网站开发".因此发布一套<C语 ...

  2. 如鹏网C语言也能干大事精华帖

    如鹏网 http://www.rupeng.com/ 1.尘封 俄罗斯方块    hity 俄罗斯方块    小马_xiao   由写俄罗斯方块引发的种种 2.Diao_Cow   很funny的程序 ...

  3. 啊哈C语言 第五章 第七节

    第七节 项目一 问题与代码 /*copyright (啊哈C语言), 学习C *All rights reserved. *文件名称:myfirstc. *作者:JohnLu *完成日期:2020年3 ...

  4. 【C语言也能干大事】第五讲 组合框控件,下拉列表

    获得组合框控件的句柄 HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO1); 确定目前选项的索引 int curSel = ComboBox_GetCurSel ...

  5. C 语言究竟能干什么

    C语言究竟能干什么 序言 鉴于现在已经大三了,很多同学很迷茫,自己学的东西到底能做什么,将来自己到底能干什么?我不想看着同学迷茫的面孔, 特别是几个好兄弟,有几个想学习编程,但又苦苦找不到门路的兄弟, ...

  6. php能做的事,PHP也能干大事 随机函数

    写在前面 PHP也能干大事是我总结的PHP语法特性及相关函数类库的经典用法,并不一定是真正能实现四两拨千斤的功效,但是掌握这些方法,可以在你的工作和学习上有一些帮助,希望大家能集思广益,将<PH ...

  7. win7php一键,批处理也能干大事之——如何实现Win7系统一键切换用户

    <批处理也能干大事之--如何实现Win7系统一键切换用户>要点: 本文介绍了批处理也能干大事之--如何实现Win7系统一键切换用户,希望对您有用.如果有疑问,可以联系我们. 我们在使用电脑 ...

  8. Vue.js实战之系统学习第七节

    想看上一节的请点击: Vue.js实战之系统学习第六节 接下来我们要学习第七节了,时间过的好快. 组件详解 组件是Vue.js的核心功能,也是整个框架设计最精彩的地方,当然也是最难掌握的.本章节将带你 ...

  9. Python编程基础:第七节 字符串切片String Slicing

    第七节 字符串切片String Slicing 前言 实践 前言 我们有时候需要对一个字符串进行切片,取其一部分作为新的字符串进行处理.例如从姓名中分别提取姓和名,从网站域名中提取网站名称等等. 实践 ...

  10. ACM公选课第七节DP基础2+3 2020.4.21-5.10补

    文章目录 核心思想:只计算一次 nefu16 RUNFUN 记忆化数组 nefu91 Recaman Sequence 类似桶排,记忆数组 classic 先全算一遍呗 类似素数打表 nefu18 滑 ...

最新文章

  1. 通过oracle任务计划定期备份数据库
  2. unity3d鼠标拖拽模型,旋转模型
  3. android 8.0手机无法更新版本,安卓手机升级安卓8.0后 系统以后可能都无法回退
  4. 01.HTML基础命令笔记
  5. spring注解大全
  6. Cell子刊主编:文章被编辑拒稿,主要是这4大原因
  7. OJ1090: 整数幂(多实例测试)(C语言)
  8. java extern的作用_学习笔记之20-static和extern关键字2-对变量的作用
  9. nginx模块使用详解
  10. jquery.form 异步校验_利用jQuery.validate异步验证用户名是否存在
  11. Android Wifi 调试
  12. unity button 通过事件改变物体颜色
  13. echarts 3d地球js特效代码
  14. [漏洞分析] CVE-2021-3560 PolKit条件竞争本地提权分析
  15. Vue - 实现复制内容到剪贴板(一键复制)
  16. 敏捷DoD和DoR的多种形态
  17. 谢耳朵获艾美奖最佳男主角 三夺视帝感谢男友
  18. list数组遍历时能不能使用remove()方法,要注意什么
  19. 【计算机科学】【2020.05】基于深度学习的计算蛋白质结构预测
  20. YTU OJ 1329: 手机尾号评分

热门文章

  1. js 实现新年倒计时 定时器使用
  2. 51单片机开发板、usb写代码、pcb版
  3. 《Dreamweaver CS6 完全自学教程》笔记 第九章:插入多媒体对象
  4. 一文理清集成运算放大器 ---- 总结篇
  5. 默纳克主板c2图纸+底座图纸。维修利器
  6. php机器人聊天对话框,PHP实现QQ聊天机器人
  7. 联想启天m428进入bios安装ubuntu
  8. 2020年上半年信息安全工程师上午选择题及解析
  9. Java serialVersionUID
  10. powerDesign导出word操作步骤