小知识:怎么修改程序图标
在资源窗口里,右击其中的一个文件夹选择“引入”,然后文件过滤器选择“*.*”,找到一个ico 文件。然后命名 ID 为 1,重新组建。
运行时图标就变成你所设置的了

ico图标在线制作有很多网站
例如:
例1:当按下其中一个命令按钮时,弹出相应的对话框
学习目标:NULL和hwnd的区别
- 添加一个命令按钮(pushbutton),改ID为IDC_ZXC,标题为周星驰

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) //hwnd:获得当前窗口的句柄 id :获得你控件的(ID)名称
{
switch(id)
{
case IDC_OK:
{
MessageBox(hwnd,TEXT("欢迎进入周星驰直播间"),TEXT("问好"),MB_OK);
// MessageBox(NULL,TEXT("欢迎进入周星驰直播间"),TEXT("问好"),MB_OK); 当hwnd换成NULL时,各窗口之间互不影响
}
break;
case IDC_ZXC:
{
MessageBox(hwnd,TEXT("喜剧之王"), TEXT("周星驰"), MB_OK);
}
break;
default:
break;
}
}
注:
1. // hwnd:获得当前窗口的句柄
2. // id :获得你控件的ID(名称)
3. // 当hwnd换成NULL时,打开的各窗口之间互不影响(也就是可以同时存在)
运行结果


单击周星驰

例2. 当用户在文本框中输入文字后,单击确定对话框弹出所输入的文字
学习目标:
-
GetDlgItemText的用法
-
sprintf的用法
操作步骤:
- 添加一下控件,并改标题

- 将文本框的ID改为IDC_EDITNAME

- 编写代码
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK: //当用户按下确定按钮时,执行以下事件
{
TCHAR name[256]; //windows编程通常用TCHAR代替char,因为vs中可能不识别
GetDlgItemText(hwnd, IDC_EDITNAME, name, sizeof(name)); //ID为IDC_EDITNAME的文本框获得焦点,可以进行输入
/*
第一种:
MessageBox(hwnd, name, name, MB_OK);
*/
//第二种
TCHAR msg[256];
wsprintf(msg, "%s你好", name); //windows编程通常用wsprintf代替sprintf
MessageBox(hwnd, msg, msg, MB_OK);
}
break;
default:
break;
}
}
注:
-
GetDlgItemText( hwnd, IDC_EDITNAME, str, sizeof (str) );
第一个参数是控制句柄,第二个参数是获得焦点的控件ID, 第三个是字符串指针,第四个是指针指向字符串的长度
GetDlgItemText ——>Get Dialog(对话框) Item Text 的简写
为什么第四个参数使用sizeof而不使用strlen呢?
2. //sprintf(字符串指针,"%s%i...字符串",a, b...);
作用:将字符串以某种格式打印到字符串指针中
运行结果:

输入小帅,并单击确定(或者按键盘的enter键)

例3. 单击确定按钮,自动在文本框生成文字
学习目标:SetDlgItemText的用法
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK:
{
SetDlgItemText(hwnd, IDC_EDITNAME,"小帅");
}
break;
default:
break;
}
}
注:
1. SetDlgItemText(hwnd, IDC_EDITNAME, "字符串"); //将字符串生成到文本框中
第一个参数是控制句柄,第二个参数是获得焦点的控件ID, 第三个是想要显示的字符串
SetDlgItemText ——>Set Dialog(对话框) Item Text 的简写
运行结果:

单击确定时

例4. 小型计算器1.0版
1.先创建如下界面

三个文本框,一个标签(+),一个命令按钮(=)
学习目标:
GetDlgItemText和SetDlgItemText ,atoi和itoa的综合用法
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK: //当用户按下确定按钮时发生以下事件
{
TCHAR str1[256];
TCHAR str2[256];
GetDlgItemText(hwnd, IDC_EDIT1, str1, sizeof(str1)); //得到ID_EDIT1文本框的焦点,进行输入字符串
GetDlgItemText(hwnd, IDC_EDIT2, str2, sizeof(str2)); //得到ID_EDIT2文本框的焦点,进行输入字符串
//由于两个字符串不能直接相加,要先转换成int类型
//c标准库函数:atoi(字符串转整型) a:ascii to i:int
int i1 = atoi(str1);
int i2 = atoi(str2);
int s = i1 + i2;
TCHAR str3[256];
itoa(s, str3, 10);// c标准库函数itoa(整型以某种进制转换成字符串), 第三个参数是进制
SetDlgItemText(hwnd, IDC_EDIT3, str3); //将字符串str3生成到IDC_EDIT3文本框中
}
break;
default:
break;
}
}
注:
| 1. 在使用atoi和itoa函数时要加头文件#include "stdlib.h" |
-
c标准库函数:atoi(字符串转整型) a:ascii to i:int
int i1 = atoi(str1); // 【有返回值】 -
c标准库函数:itoa(整型以某种进制转换成字符串)
itoa(s, str3, 10); // 第三个参数是进制 【无返回值】
运行结果:

单击等号=按钮后

当itoa(s, str3, 10); 以二进制生成时: 即(s, str3, 2);
运行结果:

成品:pan-yz.chaoxing.com/share/info/…
思考:这个计算两个数的和程序有什么缺陷?没有能够阻止用户输入非数字。怎么解决。