来自:http://blog.csdn.net/yiyefangzhou24/article/details/7460761
很多人纠结如何在win32 application下显示一个类似这样的输入框。而win32下又不兼容MFC的内容怎么办?可能我们就需要自己写这个对话框了。
首先将这个对话框画好作为资源保存到我们的win32程序中,具体做法如下:
1, 创建一个空的win32 Application程序。
2, 点击菜单栏上的Insert(插入)->Resource(资源),选择对话框资源,然后选择New(新建),就会跳出一个对话框,这时我们就可以对这个对话框进行操作,比如拖动一个Edit控件啊,等等,和MFC中的对话框程序一样。
3, 对话框画好后单击保存,会跳出一个资源保存位置窗口,我们将这个对话框资源保存到我们的win32 Application的目录下,文件名定为Dialog.rc。我们会看到后缀是一个.rc的文件,这是资源文件。
这个对话框资源就做好了,回到win32 Application的工程下,因为他是一个空项目,当然你要为他添加一个c++文件了,否则你程序写哪?下面我们要做的是如何应用这个对话框资源。首先在Source File中添加刚才的资源文件,右击Source File选择Add Files To Folder,选择刚才我们保存的资源文件Dialog.rc,同理在Header File中添加刚才同目录下的Resource.h,回到你的win32 Application的工程下在你需要跳出这个输入框的程序位置使用这样一个函数DialogBox,这个函数是使用资源中的对话框。MSDN上有,请参见MSDN。
下面的问题是如何获得输入框中的输入内容。这里我们不能使用MFC的获得方式UpDateData()函数,因为这是个win32的项目,我们只能在这个DialogBox函数中编写这个对话框的回调函数,在这个回调函数中对IDOK消息进行处理,用SendMessage获得Edit Control控件中的内容,具体代码如下,我写的是一个密码框的获取。
- BOOL GetTex(HWND hWnd,char key[10])
- {
- HWND h;
- h=GetDlgItem(hWnd,IDC_EDIT1);
- char temp[255]={0};
- char c;
- PostMessage (h,EM_SETPASSWORDCHAR,0,0);//取消密码属性
- Sleep(10);
- SendMessage(h,WM_GETTEXT,255,(LPARAM)temp);
- PostMessage (h,EM_SETPASSWORDCHAR,c,0);//恢复密码属性
- if(!strcmp(key,temp))
- {
- MessageBox(NULL,key,"ÃÜÂëÕýÈ·£¡",MB_OK);
- return TRUE;
- }
- else
- return FALSE;
- }
- BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- char key[10]="";//对比密码
- switch(uMsg)
- {
- case WM_INITDIALOG:
- return TRUE;
- case WM_COMMAND:
- switch(LOWORD(wParam))
- {
- case IDOK:
- if(GetTex(hWnd,key))
- return TRUE;
- else
- {
- MessageBox(NULL,"ÃÜÂë²»ÕýÈ·£¡","",MB_OK);
- EndDialog(hWnd,1);
- return FALSE;
- }
- case IDCANCEL:
- EndDialog(hWnd,1);
- return FALSE;
- }
- }
- return FALSE;
- }
- void PassWord(HINSTANCE hlnstance)
- {
- DialogBox(hlnstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,Main_Proc);
- }
至此,我们所有的工作就完成了,这个win32的项目就可以弹出这个一个输入框,并获得输入内容了。
菜鸟言论,仅供娱乐。