www.pudn.com > ntshell.rar > inputdlg.h


// inputdlg.h: interface for the CInputDlg class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_INPUTDLG_H__C511A281_1524_4679_B534_FE9A1847CF72__INCLUDED_) 
#define AFX_INPUTDLG_H__C511A281_1524_4679_B534_FE9A1847CF72__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#define INPUT_BUFFER_SIZE 280 
 
template  
class CInputDlg : public CDialogImplBase 
{ 
public: 
	int DoModal(HWND hWndParent = ::GetActiveWindow(), LPARAM dwInitParam = NULL) 
	{ 
		ATLASSERT(m_hWnd == NULL); 
		_Module.AddCreateWndData(&m_thunk.cd, (CDialogImplBase*)this); 
		int nRet = ::DialogBoxParam(_Module.GetResourceInstance(), 
			MAKEINTRESOURCE(t_wDlgTemplateID), hWndParent, (DLGPROC)StartDialogProc, dwInitParam); 
		m_hWnd = NULL; 
		return nRet; 
	} 
 
	typedef CInputDlg thisClass; 
	BEGIN_MSG_MAP(thisClass) 
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 
		COMMAND_ID_HANDLER(IDOK, OnOK) 
		COMMAND_ID_HANDLER(IDCLOSE, OnClose) 
		COMMAND_ID_HANDLER(IDCANCEL, OnClose) 
	END_MSG_MAP() 
 
	LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) 
	{ 
		if (t_bCenter) 
			CenterWindow(GetParent()); 
 
		LPTSTR lpText = (LPTSTR)lParam, p1, p2; 
 
		SetWindowLong(GWL_USERDATA, (LONG)lpText); 
 
		if (lpText == NULL) 
			return FALSE; 
 
		TCHAR tx0[INPUT_BUFFER_SIZE]; 
		TCHAR tx1[16] = "", tx2[16] = ""; 
 
		switch (t_iType) 
		{ 
		case 1: 
			SetDlgItemText(IDC_EDITTEXT, lpText); 
			SendMessage(GetDlgItem(IDC_EDITTEXT), EM_SETSEL, 0, strlen(lpText)); 
			break; 
		case 2: 
			p1 = strrchr(lpText, ':'); 
			p2 = strrchr(p1, '-'); 
 
			if (p1 != NULL) 
			{ 
				strncpy(tx0, lpText, p1 - lpText); 
				tx0[p1 - lpText] = '\0'; 
			} 
 
			if (p2 != NULL) 
			{ 
				strncpy(tx1, p1 + 1, p2 - p1); 
				tx1[p2 - p1 - 1] = '\0'; 
				strcpy(tx2, p2 + 1); 
			} 
 
			SetDlgItemText(IDC_EDITTEXT, tx0); 
			SetDlgItemText(IDC_NUMBER1, tx1); 
			SetDlgItemText(IDC_NUMBER2, tx2); 
			break; 
		} 
 
		return TRUE; 
	} 
 
	LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
	{ 
		if (::GetWindowTextLength(GetDlgItem(IDC_EDITTEXT)) <= 0) 
			return TRUE; 
 
		LPTSTR lpText = (LPTSTR)GetWindowLong(GWL_USERDATA); 
 
		if (lpText == NULL) 
		{ 
			::EndDialog(m_hWnd, FALSE); 
			return TRUE; 
		} 
 
		switch (t_iType) 
		{ 
		case 1: 
			GetDlgItemText(IDC_EDITTEXT, lpText, INPUT_BUFFER_SIZE); 
			break; 
		case 2: 
			GetDlgItemText(IDC_EDITTEXT, lpText, INPUT_BUFFER_SIZE); 
			strcat(lpText, ":"); 
			GetDlgItemText(IDC_NUMBER1, strrchr(lpText, '\0'), INPUT_BUFFER_SIZE - strlen(lpText)); 
			strcat(lpText, "-"); 
			GetDlgItemText(IDC_NUMBER2, strrchr(lpText, '\0'), INPUT_BUFFER_SIZE - strlen(lpText)); 
			break; 
		} 
 
		::EndDialog(m_hWnd, TRUE); 
 
		return TRUE; 
	} 
 
	LRESULT OnClose(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
	{ 
		::EndDialog(m_hWnd, FALSE); 
 
		return TRUE; 
	} 
}; 
 
#endif // !defined(AFX_INPUTDLG_H__C511A281_1524_4679_B534_FE9A1847CF72__INCLUDED_)