鱼C论坛

 找回密码
 立即注册

高级对话框使用总结

已有 472 次阅读2013-8-19 21:44 |个人分类:WIN32学习

1、模仿主对话框中创建对话框所需的各种函数:
        HANDLE_MSG(hwnd, WM_INITDIALOG, Login_OnInitDialog);
HANDLE_MSG(hwnd, WM_COMMAND, Login_OnCommand);
HANDLE_MSG(hwnd, WM_CLOSE, Login_OnClose);

2、使用DialogBoxParam 函数创建新的对话框, 最后一个参数可以供传递参数用。
DialogBoxParam 是默认阻塞运行的,模态对话框,执行完才会继续下一条
INT_PTR DialogBoxParam(
  HINSTANCE hInstance, // handle to module
  LPCTSTR lpTemplateName, // dialog box template
  HWND hWndParent, // handle to owner window 
  DLGPROC lpDialogFunc, // dialog box procedure
  LPARAM dwInitParam // 可以在窗口之间传递参数 
);
dwInitParam : 可以传递的参数
1) LONG a; 
DialogBoxParam(...,a);
2) TCHAR a[20]; 
DialogBoxParam(...,(LPARAM)a);
3) struct Login
{ TCHAR *user; TCHAR *pass;};
  Login data; 
DialogBoxParam(...,(LPARAM)&data);
LPARAM就是LONG型,4个字节,指针类型本身所占内存,4个字节,所以可以互相转换,传递。

3、在新创建的对话框函数中:Login_OnInitDialog的最后一个参数lParam 就是传递过来的参数。
对应的使用方法。
1) TCHAR s[256]; 
  sprintf(s , "%i" , lParam);//直接使用lParam即可。 
  MessageBox(hwnd , s ,s , MB_OK);
2) TCHAR *s = (TCHAR *)lParam;//转化成char *型的指针即可
MessageBox(hwnd , s ,s , MB_OK);
3) Login *s = (Login *)lParam;//转化成Login * 指针使用
TCHAR s[256];
sprintf( s ,“%s” , s->user);
MessageBox(hwnd , s, s ,MB_OK);
4、 SetWindowLong函数可以将参数 与某个窗口句柄关联, 从而通过GetWindowLong函数获取该参数。 SetWindowLong(hwnd , GWL_USERDATA , (LONG)b);
Login *b = (Login *)GetWindowLong(hwnd , GWL_USERDATA);
5、 TCHAR user[256]; 
  TCHAR pass[256];
TCHAR *user1; 
  TCHAR *pass1; 
  user1 = user; 
  pass1 = pass; 
 【问题】为何数组头地址赋值给 TCHAR型指针,输出会是乱码?什么样的内存分配结构? 

TCHAR *user;
  TCHAR *pass; 
  user = (TCHAR *)malloc(20 ); 
  pass = (TCHAR *)malloc(20 );
  GetDlgItemText(hwnd , IDC_EDITUSER , user , 20); 
  GetDlgItemText(hwnd , IDC_EDITPASS , pass , 20);
  如此动态分配内存,能够容纳的字符数只有三个?
  答: 与GetDlgItemText 中最后一个参数有关,使用sizeof(user)只是TCHAR指针的大小 ,4个字节, 只能容纳三个字 符 abc\0 
  而当user是一个数组头地址的时候,sizeof(user)代表数组最大的内存长度

 6、EndDialog 的第二个参数 将作为DialogBoxParam 的返回值,可以根据这个值判断点击哪个按钮。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 15:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部