ÀÌ ¼½¼ÇÀÇ ¿¹Á¦¿¡¼´Â â ÇÁ·Î½ÃÀú¸¦ »ç¿ë ÇÏ ¿© ¾ÏÈ£¸¦ ÀÔ·Â ÇÏ ¶ó´Â ¸Þ½ÃÁö¸¦ Ç¥½Ã ÇÏ´Â ´ëÈ »óÀÚ¸¦ »ý¼º ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù.
¾ÏÈ£ ´ëÈ »óÀÚ¿¡¼ ´ÜÀÏ ÁÙ ÆíÁý ÄÁÆ®·Ñ¿¡ ES_PASSWORD ½ºÅ¸ÀÏÀÔ´Ï´Ù. ±âº»ÀûÀ¸·Î »ç¿ëÀÚ°¡ ½ºÅ¸ÀÏ Ç¥½Ã °¢ ¹®ÀÚ¿¡ ´ë ÇÑ º°Ç¥¸¦ »ç¿ë ÇÏ ¿© ÄÁÆ®·ÑÀ» ÆíÁý ÇÕ´Ï´Ù. ±×·¯³ªÀÌ ¿¹Á¦¿¡¼´Â, º°Ç¥¿¡¼ ´õÇϱ⠱âÈ£ (+) ±âº» ¹®ÀÚ¸¦ º¯°æ ÇÏ·Á¸é EM_SETPASSWORDCHAR ¸Þ½ÃÁö¸¦ »ç¿ë.
ÀÌ Ã¢ ÇÁ·Î½ÃÀú ±âº» ´©¸§ ´ÜÃß¿¡¼¿¡¼ º¯°æ Ãë¼Ò È®ÀÎ ÇÏÀÚ¸¶ÀÚ ÆíÁý ÄÁÆ®·Ñ¿¡ ÅØ½ºÆ®¸¦ ÀÔ·Â ÇÕ´Ï´Ù. â ÇÁ·Î½ÃÀú EM_LINELENGTH ¹× EM_GETLINE ¸Þ½ÃÁö¸¦ »ç¿ë ÇÏ ¿© ÅØ½ºÆ®¸¦ °Ë»ö ÇÏ·Á¸é »ç¿ëÀÚ°¡ È®ÀÎ ´ÜÃ߸¦ ´©¸¦ °æ¿ì.
LRESULT CALLBACK PassProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
CHAR lpszPassword[16];
WORD cchPassword;
switch (message)
{
case WM_INITDIALOG:
// Set password character to a plus sign (+)
SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_SETPASSWORDCHAR,
(WPARAM) '+',
(LPARAM) 0);
// Set the default push button to "Cancel."
SendMessage(hDlg,
DM_SETDEFID,
(WPARAM) IDCANCEL,
(LPARAM) 0);
return TRUE;
case WM_COMMAND:
// Set the default push button to "OK" when the user
// enters text.
if(HIWORD (wParam) == EN_CHANGE &&
LOWORD(wParam) == IDE_PASSWORDEDIT)
{
SendMessage(hDlg,
DM_SETDEFID,
(WPARAM) IDOK,
(LPARAM) 0);
}
switch(wParam)
{
case IDOK:
// Get number of characters.
cchPassword = (WORD) SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_LINELENGTH,
(WPARAM) 0,
(LPARAM) 0);
if (cchPassword >= 16)
{
MessageBox(hDlg,
"Too many characters.",
"Error",
MB_OK);
EndDialog(hDlg, TRUE);
return FALSE;
}
else if (cchPassword == 0)
{
MessageBox(hDlg,
"No characters entered.",
"Error",
MB_OK);
EndDialog(hDlg, TRUE);
return FALSE;
}
// Put the number of characters into first word
// of buffer.
*((LPWORD)lpszPassword) = cchPassword;
// Get the characters.
SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_GETLINE,
(WPARAM) 0, // line 0
(LPARAM) lpszPassword);
// Null-terminate the string.
lpszPassword[cchPassword] = 0;
MessageBox(hDlg,
lpszPassword,
"Did it work?",
MB_OK);
// Call a local password-parsing function.
ParsePassword(lpszPassword);
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, TRUE);
return TRUE;
}
return 0;
}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}