#define BUF_LEN MAX_PATH
#define IDC_TEXT (100)
class CInputBox: public CIndirectDialogImpl< CInputBox >{private:
LPCTSTR szPrompt_;
LPCTSTR szTitle_;
LPCTSTR szDefaultText_;
TCHAR strResult[BUF_LEN];public:
BEGIN_DIALOG(0, 0, 257, 62)
DIALOG_CAPTION(szTitle_!= nullptr ? szTitle_ : _T(""))
DIALOG_STYLE(DS_MODALFRAME| WS_POPUP | WS_CAPTION |WS_SYSMENU)
DIALOG_FONT(9, _T("SimSun"))
END_DIALOG()
BEGIN_CONTROLS_MAP()
CONTROL_DEFPUSHBUTTON(_T("OK"), IDOK, 200, 11, 50, 14, 0, 0)
CONTROL_PUSHBUTTON(_T("Cancel"), IDCANCEL, 200, 31, 50, 14, 0, 0)
CONTROL_LTEXT(szPrompt_!= nullptr ? szPrompt_ : _T("Please input:"), IDC_STATIC, 7, 7, 158, 14, 0, 0)
CONTROL_EDITTEXT(IDC_TEXT,7, 31, 180, 14, 0, 0)
END_CONTROLS_MAP()
BEGIN_MSG_MAP(CInputBox)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
END_MSG_MAP()
CInputBox::CInputBox() : szPrompt_(nullptr), szTitle_(nullptr), szDefaultText_(nullptr){
memset(strResult,0, sizeof(TCHAR)*BUF_LEN);
}static bool InputBox(LPCTSTR szPrompt, LPTSTR strResult, LPCTSTR szTitle = _T(""), LPCTSTR szDefaultText = _T(""), HWND hParent =nullptr){
CInputBox dlg;
dlg.szPrompt_=szPrompt;
dlg.szTitle_=szTitle;
dlg.szDefaultText_=szDefaultText;if (IDOK ==dlg.DoModal(hParent)) {//get return string.
lstrcpyn(strResult, dlg.strResult, BUF_LEN);return true;
}return false;
}
LRESULT OnInitDialog(UINT/*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CenterWindow(GetParent());if(szDefaultText_) {
::SetWindowText(::GetDlgItem(m_hWnd, IDC_TEXT), szDefaultText_);
}//set focus to edit control item.
::SetFocus(::GetDlgItem(m_hWnd, IDC_TEXT));//return false to prevent setfocus in dialogproc.
return false;
}
LRESULT OnCloseCmd(WORD/*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{if (wID ==IDOK) {
::GetWindowText(::GetDlgItem(m_hWnd, IDC_TEXT), strResult, BUF_LEN- 1);
}
EndDialog(wID);return 0;
}
};
voiddemo()
{
TCHAR strPassWd[MAX_PATH];if (CInputBox::InputBox(_T("请输入加密密码:"), strPassWd, _T("输入密码"))) {//}return;
}