本节中的示例演示了如何使用窗口过程来生成一个提示用户输入密码的对话框。
密码对话框中的单行编辑控件具有ES_PASSWORD样式。默认情况下,使用此样式编辑控件会为用户键入的每个字符显示一个星号。但是,此示例使用EM_SETPASSWORDCHAR消息将默认字符从星号更改为加号(+)。
一旦用户在编辑控件中输入文本,此窗口过程将默认按钮从“取消”更改为“确定”。如果用户按OK按钮,则窗口过程使用EM_LINELENGTH和EM_GETLINE消息来检索文本。
LRESULT CALLBACK PassProc(hDlg,message,wParam,lParam)
HWND hDlg; /* window handle of the dialog box */
UINT message; /* type of message */
UINT wParam; /* message-specific information */
LONG lParam;
{
CHAR lpszPassword[16];
WORD cchPassword;
switch(message){
case WM_INITDIALOG:
/ *将密码字符设置为加号(+)* /
SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_SETPASSWORDCHAR,
(WPARAM) '+',
(LPARAM) 0);
/ *将默认按钮设置为“取消”。 * /
SendMessage(hDlg,
DM_SETDEFID,
(WPARAM) IDCANCEL,
(LPARAM) 0);
return TRUE;
case WM_COMMAND:
/*
*用户将默认按钮设置为“OK”
*输入文字。
*/
if(HIWORD (wParam) == EN_CHANGE &&
LOWORD(wParam) == IDE_PASSWORDEDIT)
SendMessage(hDlg,
DM_SETDEFID,
(WPARAM) IDOK,
(LPARAM) 0);
开关(wParam){
case IDOK:
/ *获取字符数。*/
cchPassword = (WORD) SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_LINELENGTH,
(WPARAM) 0,
(LPARAM) 0);
if (cchPassword >= 16) {
MessageBox(hDlg,
“太多的人物”,
“错误”,
MB_OK);
EndDialog(hDlg, TRUE);
return FALSE;
}
else if (cchPassword == 0) {
MessageBox(hDlg,
“没有人输入”,
“错误”,
MB_OK);
EndDialog(hDlg, TRUE);
return FALSE;
}
/*
*将字符数放入第一个字
*的缓冲区。
*/
*((LPWORD)lpszPassword) = cchPassword;
/ *获取字符。*/
SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_GETLINE,
(WPARAM)0,/ *行0 * /
(LPARAM) lpszPassword);
/ *空 - 终止字符串。*/
lpszPassword[cchPassword] = 0;
MessageBox(hDlg,
lpszPassword,
“它有效吗?”
MB_OK);
/ *调用本地密码解析功能。*/
ParsePassword(lpszPassword);
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, TRUE);
return TRUE;
}
return 0;
}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}