C语言项目windows编程.docx
- 文档编号:4988655
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:14
- 大小:307.72KB
C语言项目windows编程.docx
《C语言项目windows编程.docx》由会员分享,可在线阅读,更多相关《C语言项目windows编程.docx(14页珍藏版)》请在冰豆网上搜索。
C语言项目windows编程
第一课、
1.新建工程---->创建Windows窗口应用程序-->一个简单的窗口程序
MessageBox(NULL,TEXT(“正文”),TEXT(“标题”),显示板按钮);
在开发windows程序中,几乎所有的字符串都要用TEXT(“”)函数包起来
2.
将MB_OK换成MB_YESNO,就可以显示两个按钮。
MB_YESNOCANCEL则显示三个按钮
这里的MB_其实是Windows已经宏定义的常量,MB表示MessageBox。
有如下的值:
一、可以设置在对话框中显示的按钮
MB_OK
MB_OKCANCEL
MB_YESNO
MB_YESNOCANCEL
MB_ABORTRETRYIGNORE(abort、retry、ignore)
MB_RETRYCANCEL
2、可以设置在对话框中显示的图标
MB_ICONHAND出现一个叉
MB_ICONQUESTION
变成下图
MB_ICONEXCLAMATION出现感叹号表示警告
MB_ICONASTERISK出现信息提示的感叹号
重要:
将函数代码换成(加一条竖线)
MessageBox(NULL,TEXT(“正文”),TEXT(“标题”),MB_YESNO|MB_ICONQUESTION)
就可以既显示图标,有显示yes/no,其他效果类同。
效果如下:
“|”是位运算中的“或”运算
MessageBox的返回值为int,通过MessageBox来判断用户是点了YES还是NO的按钮
具体代码如下:
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);
}
不同按钮对应的返回值宏定义如下:
IDYES、IDNO
IDOK、IDCANCEL
IDABORT、IDRETRY、IDIGNORE
第二课
程序debug版本和release版本的区别:
Debug版本是用来调试用的,在别人的电脑上若他没装c-free或者vc++,则有可能程序无法运行,此外debug版本的程序运行效率较低
最好给别人release版本的程序
2.如何生成release版本的exe程序?
答:
在工程文件上右键---->工程设置--->选择release---->点击应用即可---->点击运行就有了
这边会有所显示的
1、如何开发对话框的程序
新建工程,选择对话框程序
工具---->对话框编辑器(可以操作控件,也就是自己设计对话框)
选中控件,在这里修改名称(标题属性)、颜色等属性(在vc++中是双击即可)
Cfree中编辑对话框功能有限,可以安装resed资源编辑器进行补充,文件保存在(.rc)格式的文件中
解决办法如下:
下载完成后将压缩包中的解压到C-Free的安装目录下,如果你没有修改C-Free的安装路径的话,一般是“C:
/ProgramFiles/C-Free4”。
解压完毕启动C-Free,点击主菜单的【工具】→【工具配置】,
在“工具”列表中选中“对话框编辑器”,将“工具”修改为“资源编辑器”,将“程序”修改为“$(CFRoot)/”,将“参数”修改为“$(FileName)”。
这表示当通过主菜单启动ResEd以后自动打开当前C-Free中正在编辑的资源文件。
修改完成后如下图:
点击【确定】按钮。
以后就可以通过主菜单的【工具】→【资源编辑器】来启动ResEd了,而且如果当前C-Free中有rc、dlg等资源文件被打开的话ResEd还会自动打开此资源文件。
2.配置ResEd
启动ResEd,点击主菜单【工具】→【详细设置】,将“名称输出格式”选择为“C-Defines”,并且选中“保存时自动输出”。
然后点击【确定】按钮,这样每次修改资源文件并保存的时候就会自动生成资源ID的定义文件了。
注意:
要在文件窗口打开resed资源编辑器
2、如何在对话框中插入图片
(似乎只支持bmp格式的图片)选中图片控件要点击边缘、
三、在resed中插入菜单(和操作十分接近)
工程-->添加菜单
注意:
首先添加文件菜单,如图进行设置。
菜单编辑器中做箭头表示将菜单升级,右箭头表示将菜单降级,属于下一级菜单,右键点击一次表示菜单向下降一级,所以二级菜单只需要点一次,上箭头和下箭头用于移动菜单项的位置。
建立三级菜单只要如下图所示:
得到下图的效果
选中这个对话框,其他什么都不选
然后右侧选择menu,就会出现上图的效果
另外,在“文件”后面加上“&F”就会出现右图的效果
3.
不同操作最好都取一个名字
在菜单之间设置分隔符(这操作....我也是醉了)
注意:
在resed中操作时,中文的字体最好别去修改,容易出现乱码(尤其是反复操作时),尽量选择neutral字体
第三节
一、修改程序图标
可以下载使用restorater(资源修改器)来修改图标,用ico格式的图片
(回去再看视频)
2.在以前编写控制台程序(即黑屏白字程序)的时候,一切代码有先后顺序。
但在windows编程中不可以这样。
为了解决这个问题,windows引入了消息机制,即把用户的操作抽象成一个个的事件,编写的程序只要响应这些事件就可以了。
就是说告诉windows,当事件A发生时,调用我写的相应的代码。
类似于“程序中断”的概念,当发生某件事的时候告诉我。
3.在工程的文件中,Main_OnCommand函数被Main_Proc函数中的HANDLE_MSG函数调用:
HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);
这里HANDLE_MSG的意思就是告诉windows当发生WM_COMMAND消息时,请通知Main_OnCommand函数
voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify);
那么这个id到底指的是什么呢?
打开文件就可以看到不同控件的id宏定义。
也可以在文件下打开资源编辑器,在里面修改(注意Name和Caption的区别)
不同的控件要有一个Name唯一的id,我们只需要知道控件的Name就好。
ID值等于多少cfree会自动定义。
Windows中控件的名字一般默认以IDC_开头。
二、下面来看一段Main_OnCommand函数的代码
voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)
{
switch(id)
{
caseIDC_OK:
MessageBox(hwnd,TEXT("你选择了OK!
"),TEXT("111"),MB_OK);
EndDialog(hwnd,id);
break;
caseIDC_CANCEL:
{
MessageBox(hwnd,TEXT("你选择了Cancel!
"),TEXT("111"),MB_OK);
EndDialog(hwnd,id);
}
break;
default:
break;
}
}
当参数是hwnd时,后面的窗口是不能运行的,当参数是NULL时,后面窗口是可以拖动的
这是什么意思呢?
就是说MessageBox第一个参数意味着要阻止哪个对话框窗口运行,当为NULL时,不阻止任何一个。
hwnd表示当前的按钮所在的窗口的句柄(windows传过来的),句柄就是把柄,操作一个东西要先抓住把柄。
通过句柄就可以操作这个对象。
第一个参数为hwnd就表示挡住当前按钮所在的窗口。
三、自己编写计算器程序版本
(1)得到控件中用户输入的文本
用GetDlgItemText函数来完成:
GetDlgItemText(hwnd,IDC_EDITNAME,str,sizeof(str));
注意:
在资源编辑器中编好窗口之后,要把ID的宏定义全部放到文件中,不要放在文件中。
例如编写一个输入名字后点击确定按钮跳出“名字+你好”的窗口的程序:
voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)
{
switch(id)
{
caseIDC_OK:
{
charname[256];
GetDlgItemText(hwnd,IDC_EDITNAME,name,sizeof(name));
/*思考为什么不用strlen,而是用sizeof?
*/
MessageBox(hwnd,name,name,MB_OK);
",a1,a2,a3...);
*/
/*
C语言开发windows程序时用wsprintf代替sprintf,解决中文等问题,用法和sprintf没多大区别
*/
wsprintf(msg,"%s你好",name);
MessageBox(hwnd,msg,name,MB_OK);
count_point+=1;
elseif(!
(str[i]>='0'&&str[i]<='9'))
count_num+=1;
}
if(count_num==0&&count_point<=1)
returnTRUE;
else
returnFALSE;
}
voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)
{
switch(id)
{
caseIDC_OK:
{
TCHARstr1[256],str2[256],str3[256];
GetDlgItemText(hwnd,IDC_EDT1,str1,sizeof(str1));
GetDlgItemText(hwnd,IDC_EDT2,str2,sizeof(str2));
if(str_is_num(str1)==FALSE)
{
这个return使得函数立即返回,不再执行下面的if判断
MessageBox(hwnd,TEXT("第一个输入有问题"),TEXT("警告"),MB_OK|MB_ICONWARNING);
return;
}
if(str_is_num(str2)==FALSE)
{
MessageBox(hwnd,TEXT("第二个输入有问题"),TEXT("警告"),MB_OK|MB_ICONWARNING);
return;
}
doublea1,a2,a3;
a1=atof(str1);
a2=atof(str2);
HWNDhwnd_combo=GetDlgItem(hwnd,IDC_CBO1);
intcursel=ComboBox_GetCurSel(hwnd_combo);
switch(cursel)
{
case0:
a3=a1+a2;break;
case1:
a3=a1-a2;break;
case2:
a3=a1*a2;break;
case3:
{
if(a2==
{
MessageBox(hwnd,TEXT("分母不能为0"),TEXT("警告"),MB_OK|MB_ICONWARNING);
return;
}
else
a3=a1/a2;
}break;
default:
MessageBox(hwnd,TEXT("请选择一项运算"),TEXT("警告"),MB_OK|MB_ICONWARNING);
return;
}
sprintf(str3,"%lf",a3);
SetDlgItemText(hwnd,IDC_EDT3,str3);
//EndDialog(hwnd,id);
}
break;
caseIDC_CANCEL:
MessageBox(hwnd,TEXT("YouclickedCancel!
"),TEXT("lalala"),MB_OK);
EndDialog(hwnd,id);
break;
default:
break;
}
}
(1)做一个学生管理系统,实现增、删、查(双击)、搜
第五节
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 项目 windows 编程