84 lines
2.7 KiB
C++
84 lines
2.7 KiB
C++
////////////////////////////////////////////////////////////////
|
|
// PixieLib(TM) Copyright 1997-2005 Paul DiLascia
|
|
// If this code works, it was written by Paul DiLascia.
|
|
// If not, I don't know who wrote it.
|
|
// Compiles with Visual Studio.NET 7.1 or greater. Set tabsize=3.
|
|
//
|
|
|
|
//////////////////
|
|
// Helper class to build a dialog template in memory. Only supports what's
|
|
// needed for CStringDialog.
|
|
//
|
|
class CDlgTemplateBuilder {
|
|
protected:
|
|
WORD* m_pBuffer; // internal buffer holds dialog template
|
|
WORD* m_pNext; // next WORD to copy stuff
|
|
WORD* m_pEndBuf; // end of buffer
|
|
|
|
// align ptr to nearest DWORD
|
|
WORD* AlignDWORD(WORD* ptr) {
|
|
ptr++; // round up to nearest DWORD
|
|
LPARAM lp = (LPARAM)ptr; // convert to long
|
|
lp &= 0xFFFFFFFC; // make sure on DWORD boundary
|
|
return (WORD*)lp;
|
|
}
|
|
|
|
void AddItemTemplate(WORD wType, DWORD dwStyle, const CRect& rc,
|
|
WORD nID, DWORD dwStyleEx);
|
|
|
|
public:
|
|
// Windows predefined atom names
|
|
enum { BUTTON=0x0080, EDIT, STATIC, LISTBOX, SCROLLBAR, COMBOBOX };
|
|
|
|
CDlgTemplateBuilder(UINT nBufLen=1024);
|
|
~CDlgTemplateBuilder();
|
|
|
|
DLGTEMPLATE* GetTemplate() { return (DLGTEMPLATE*)m_pBuffer; }
|
|
|
|
// functions to build the template
|
|
DLGTEMPLATE* Begin(DWORD dwStyle, const CRect& rc, LPCTSTR caption, DWORD dwStyleEx=0);
|
|
WORD* AddText(WORD* buf, LPCTSTR text);
|
|
void AddItem(WORD wType, DWORD dwStyle, const CRect& rc,
|
|
LPCTSTR text, WORD nID=-1, DWORD dwStyleEx=0);
|
|
void AddItem(WORD wType, DWORD dwStyle, const CRect& rc,
|
|
WORD nResID, WORD nID=-1, DWORD dwStyleEx=0);
|
|
};
|
|
|
|
//////////////////
|
|
// Class to implement a simple string input dialog. Kind of like MessageBox
|
|
// but it accepts a single string input from user. You provide the prompt. To
|
|
// use:
|
|
//
|
|
// CStringDialog dlg; // string dialog
|
|
// dlg.m_bRequired = m_bRequired; // if string is required
|
|
// dlg.Init(_T("Title"), _T("Enter a string:"), this, IDI_QUESTION);
|
|
// dlg.DoModal(); // run dialog
|
|
// CString result = dlg.m_str; // whatever the user typed
|
|
//
|
|
class CInputDialog : public CDialog {
|
|
public:
|
|
CString m_str; // the string returned [in,out]
|
|
BOOL m_bRequired; // string required?
|
|
HICON m_hIcon; // icon if not supplied
|
|
|
|
CInputDialog() { }
|
|
~CInputDialog() { }
|
|
|
|
// Call this to create the template with given caption and prompt.
|
|
BOOL Init(LPCTSTR caption, LPCTSTR prompt, CWnd* pParent=NULL, BOOL bIsOk = TRUE,CString str = "",
|
|
WORD nIDIcon=(WORD)IDI_QUESTION);
|
|
BOOL m_bIsOk;
|
|
protected:
|
|
CDlgTemplateBuilder m_dtb; // place to build/hold the dialog template
|
|
enum { IDICON=1, IDEDIT }; // control IDs
|
|
|
|
// MFC virtual overrides
|
|
virtual BOOL OnInitDialog();
|
|
virtual void OnOK();
|
|
virtual void DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
DDX_Text(pDX, IDEDIT, m_str);
|
|
}
|
|
};
|
|
|