win编程Get、SetDlgItemText…

原文地址: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、

[转载]win编程Get、SetDlgItemText及itoa、wsprintf 

 

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

 

//通知Main_OnCommand函数 

 

 

 

 

 

 

 

4、

[转载]win编程Get、SetDlgItemText及itoa、wsprintf 

 

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

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

 

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

hwnd是对话框句柄 

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

 

 

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

 

    

 

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

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

 

 

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

 

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

 

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

 

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

 

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

 

编辑Main_OnCommand方法: 

[转载]win编程Get、SetDlgItemText及itoa、wsprintf 

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

 

[转载]win编程Get、SetDlgItemText及itoa、wsprintf 

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

[转载]win编程Get、SetDlgItemText及itoa、wsprintf 

 

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

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

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

 

 

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

 

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

 

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

 

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

 

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

 

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

 

 

GetWindowTextGetDlgItemText 的时候为什么要传数组名呢?

 

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

 

数据。 

 

7

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

 

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

 

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

 

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

 

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

 

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

//如鹏网站内搜索搜“strlensizeof”区别 

 

 

TCHAR str1[265]

//Windows编程中一般都用TCHAR代替charTCHAR有时候就是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+"你好及“····你好”

 

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

 

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

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

 

 

8

[转载]win编程Get、SetDlgItemText及itoa、wsprintf 

TCHAR name[256]; 

 

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

 

TCHAR msg[256]; 

 

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

 

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

 

 

9

 

[转载]win编程Get、SetDlgItemText及itoa、wsprintf 

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);//字符串转换为数字atoiascii to int    

//数字转换为字符串itoaint to ascii   itoa(int,char,int(进制)) 第三个参数就是进制。

   //使用itoaatoi时添加#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语言里边字符串转换为数字:atoiascii to int 

 

 

 

 

 

Egint i2=atoistr1);

Itoai2str1,10);itoaintcharint);//字符串转换为整数,第三个参数就是进制。

 

 

 

 

 

10GetSet:配对的,设置对话框的值用SetDlgItemText

 

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

 

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

[转载]win编程Get、SetDlgItemText及itoa、wsprintf 

 

 

 

 

你可能感兴趣的:(#)