C语言项目windows编程.docx

上传人:b****6 文档编号:4988655 上传时间:2022-12-12 格式:DOCX 页数:14 大小:307.72KB
下载 相关 举报
C语言项目windows编程.docx_第1页
第1页 / 共14页
C语言项目windows编程.docx_第2页
第2页 / 共14页
C语言项目windows编程.docx_第3页
第3页 / 共14页
C语言项目windows编程.docx_第4页
第4页 / 共14页
C语言项目windows编程.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言项目windows编程.docx

《C语言项目windows编程.docx》由会员分享,可在线阅读,更多相关《C语言项目windows编程.docx(14页珍藏版)》请在冰豆网上搜索。

C语言项目windows编程.docx

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)做一个学生管理系统,实现增、删、查(双击)、搜

 

第五节

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1