getdlgitemtext java_win编程Get、SetDlgItemText及itoa、wsprintf、TCHAR的应用

1、怎么修改程序图标

引入一个ico文件(可以用一些工具制作ico图标,网上搜“制作ico”)

然后命名ID为1

重新构建

2、在dos下我们可以用getchar来等待用户输入一个值。但是到了Windows编程中就不一样 了,同一时刻用户即可能点击【OK】按钮,又可能点击【Cancel】按钮,又可能在文本框中输入几个字,还可能在窗口上双击几下,这样就无法同时等待用户的这些动作。

为了解决这个问题,Windows引入了消息机制(也可以叫做回调机制 或者事件机制)。

在程序启动的时候把函数func1要响应【OK】按钮1的点击动作、函数func2要响应【Cancel】按钮的点击动作、函数func3要响应窗口的双击动作等等这些信息告诉Windows,然后当用户执行相应操作的时候Windows就 会来主动调用你注册的函数,主动通知你。不再是程序调用操作系统的函数而 是操作系统反过来调用你的函数。Don't call me ,I'll call you!(也被人称 为“好莱坞法则”)。

3、

a4c26d1e5885305701be709a3d33442f.png

//HANDLE_MSG的意思就是告诉Windows,当发生WM_COMMAND消息的时候,请

//通知Main_OnCommand函数

4、

a4c26d1e5885305701be709a3d33442f.png

//id这个参数是Windows给咱们“送”过来的

不同的控件要有不同的id,控件的名字,在人类社会中名字有可能重名, 但是在windows中id不能重复

按钮被按下的时候Main_OnCommand方法被调用

hwnd是对话框句柄

Hwnd是当前窗口的句柄,句柄就是把柄!操作一个东西,要先抓住他的把 柄!通过句柄就可以操作这个对象。

Main_OnCommand方法中根据id,也就是被点击按钮的名字来决定不同的动作。

//不要忘了每个case后面都有break

//不要忘了case中用大括号

5、 定制自己的对话框,不同的按钮不同的问好

然后重新添加一个自己的按钮,在属性中修改Name属性为IDC_BTNHELLO。

控件名字的潜规则:所有控件的Name都以“IDC_”开头,然后后边跟着控

件类型的简称(按钮简称BTN、文本框简称EDT等等),最后才是控件的真正的

名字。修改按钮的Caption属性(也就是按钮上显示的文字)为“问好”。

编辑Main_OnCommand方法:

a4c26d1e5885305701be709a3d33442f.png

.................................................................................................................

a4c26d1e5885305701be709a3d33442f.png

..................................................................................................................

a4c26d1e5885305701be709a3d33442f.png

6、得到控件中用户输入的文本

GetDlgItemText(hwnd,IDC_EDTNAME,str,sizeof(str));

第一个参数是对话框的句柄;第二参数就是控件的id(name);第三个参数就是字符串数组的指针;

疑问:为什么不能像MessageBox一样把字符串做为返回值返回呢???

这就涉及到C语言中函数返回指针的问题了

在函数内部返回函数内构建的指针有可能出现数据混乱.

当f1函数在执行的时候,这段内存是被占用的,一旦函数返回,那么内存

就标记为可以被其他人、函数占用。如果你把这段内存中的指针返回了,那么一旦其他

地方用了这段内存,那么 你引用的就是错误的数据了。

用GetWindowText、GetDlgItemText的时候为什么要传数组名呢?

复习:初学者可以认为数组名就是指针,函数只有得到指针,才能直接操作数组中的

数据。

7、

c 语言中字符串连接:wsprintf(str,”….”,a1,a2);(用于window编程的时候)

还有sprintf,但是在编写windows程序的时候最好使用wsprintf。

//GetDlgItemText(hwnd, IDC_EDITNAME ,str, sizeof(str));

//第一参数是窗口的句柄,第二个参数是要取得内容的控件的ID

//第三个参数就是字符串指针,第四个参数就是指针指向区域的大小

//为什么不用strlen而用sizeof。

//如鹏网站内搜索搜“strlen,sizeof”区别

TCHARstr1[265]

//Windows编程中一般都用TCHAR代替char。TCHAR有时候就是char。

//解决Unicode、中文编码问题。

GetDlgItemText(hwnd,IDC_EDITNAME,name,sizeof(name));

//printf是打印到屏幕上

//printf("%s你好",name);

//sprintf是打印到字符串中

//sprintf(字符串,"...",a1,a2,a3....);

TCHAR name[256]

····

TCHAR msg[256];

sprintf(msg,"%s你好",name);

//相当于很多C#、Java语言里的字符串相加name+"你好"及“····你好”

//wsprintf,C语言开发Windows程序的时候用wsprintf代替sprintf

//解决Unicode、中文编码问题

wsprintf(msg,"%s你好",name);

8、

a4c26d1e5885305701be709a3d33442f.png

TCHAR name[256];

GetDlgItemText(hwnd,IDC_EDTNAME,name,sizeof(name)));

TCHAR msg[256];

wsprintf (msg,"%s你好",name);

MessageBox(hwnd, msg,TEXT("问好"),MB_OK);

9、

a4c26d1e5885305701be709a3d33442f.png

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{

switch(id)

{

case IDC_OK:

{

TCHAR str1[265];

TCHAR str2[256];

GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));

GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));

int i1=atoi(str1);//字符串转换为数字atoi:ascii to int

//数字转换为字符串itoa:int to ascii itoa(int,char,int(进制))

第三个参数就是进制。

//使用itoa和atoi时添加#include头文件

int i2=atoi(str2);

//取第一、二个文本框的字符串,然后得到整数表示

int i3=i1+i2;

TCHAR str3[265];

itoa(i3,str3,10);

SetDlgItemText(hwnd,IDC_EDIT3,str3);

}

break;

default:

break;

}

}

C语言里边字符串转换为数字:atoi:ascii to int

Eg:int i2=atoi(str1);

Itoa(i2,str1,10);itoa(int,char,int);//字符串转换为整数,第三个参数就是进制。

10、Get、Set:配对的,设置对话框的值用SetDlgItemText:

GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));(获得对话框的字符)

SetDlgItemText(hwnd,IDC_EDIT3,str3); (向对话框输出字符)

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值