C语言也能干大事~part 3

250 阅读4分钟

小知识:怎么修改程序图标

在资源窗口里,右击其中的一个文件夹选择“引入”,然后文件过滤器选择“*.*”,找到一个ico 文件。然后命名 ID 为 1,重新组建。

运行时图标就变成你所设置的了

ico图标在线制作有很多网站

例如:

www.ico51.cn/

www.bitbug.net/

www.mx19.cn/

例1:当按下其中一个命令按钮时,弹出相应的对话框

学习目标:NULL和hwnd的区别

  1. 添加一个命令按钮(pushbutton),改ID为IDC_ZXC,标题为周星驰

2. 编写代码:

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. 当用户在文本框中输入文字后,单击确定对话框弹出所输入的文字

学习目标:

  1. GetDlgItemText的用法

  2. sprintf的用法

操作步骤:

  1. 添加一下控件,并改标题

  1. 将文本框的ID改为IDC_EDITNAME

  1. 编写代码
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;
    }
}

注:

  1. GetDlgItemText( hwnd, IDC_EDITNAME, str, sizeof (str) );

    第一个参数是控制句柄,第二个参数是获得焦点的控件ID, 第三个是字符串指针,第四个是指针指向字符串的长度

    GetDlgItemText ——>Get Dialog(对话框) Item Text 的简写

为什么第四个参数使用sizeof而不使用strlen呢?

note.youdao.com/noteshare?i…

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"
  1. c标准库函数:atoi(字符串转整型) a:ascii to i:int

      int i1 = atoi(str1);                    // 【有返回值】
    
  2. c标准库函数:itoa(整型以某种进制转换成字符串)

      itoa(s, str3, 10);    // 第三个参数是进制   【无返回值】
    

运行结果:

单击等号=按钮后

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

运行结果:

成品:pan-yz.chaoxing.com/share/info/…

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