Click here to Skip to main content
15,894,460 members
Articles / Desktop Programming / WTL

AutoCompleteML - auto completion for multiline edit box

Rate me:
Please Sign up or sign in to vote.
3.80/5 (6 votes)
14 Oct 20044 min read 50.3K   1.6K   29  
COM object for easy user input in multiline edit boxes
// maindlg.h : interface of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_MAINDLG_H__D0947DE9_4DE3_477B_82AF_11D43DE03E5A__INCLUDED_)
#define AFX_MAINDLG_H__D0947DE9_4DE3_477B_82AF_11D43DE03E5A__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
	enum { IDD = IDD_MAINDLG };

	CEdit m_editml;
	ACMPLLib::IAutoCompleteMLPtr m_spac;
	ACMPLLib::IStringStoragePtr m_spStrings;
	MSXML::IXMLDOMDocumentPtr m_spdoc;

	CTrackBarCtrl m_slider;
	CTrackBarCtrl m_slider2;

	BEGIN_MSG_MAP(CMainDlg)
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
		COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
		COMMAND_ID_HANDLER(IDOK, OnOK)
		COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
		COMMAND_RANGE_HANDLER(IDC_CHKENABLE, IDC_CHKTT, OnClickedCheckBox)
		COMMAND_HANDLER(IDC_EDITLINES, EN_CHANGE, OnChangeEditlines)
		COMMAND_HANDLER(IDC_BTNINIT, BN_CLICKED, OnClickedBtninit)
		COMMAND_HANDLER(IDC_BTNLOAD, BN_CLICKED, OnClickedBtnload)
		COMMAND_HANDLER(IDC_BTNSAVE, BN_CLICKED, OnClickedBtnsave)
		COMMAND_HANDLER(IDC_BTNLOAD2, BN_CLICKED, OnClickedBtnload2)
		COMMAND_HANDLER(IDC_BTNSAVE2, BN_CLICKED, OnClickedBtnsave2)
		COMMAND_HANDLER(IDC_BTNLOAD3, BN_CLICKED, OnClickedBtnload3)
		COMMAND_HANDLER(IDC_BTNSAVE3, BN_CLICKED, OnClickedBtnsave3)
		MESSAGE_HANDLER(WM_HSCROLL, OnHScroll)
		MESSAGE_HANDLER(WM_VSCROLL, OnVScroll)
	END_MSG_MAP()


	LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
	{
		// center the dialog on the screen
		CenterWindow();

		// set icons
		HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
			IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
		SetIcon(hIcon, TRUE);
		HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
			IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
		SetIcon(hIconSmall, FALSE);

		try {
			_com_util::CheckError(m_spac.CreateInstance(__uuidof(ACMPLLib::AutoCompleteML)));
			_com_util::CheckError(m_spStrings.CreateInstance(__uuidof(ACMPLLib::StringStorage)));

			_com_util::CheckError(m_spdoc.CreateInstance(__uuidof(MSXML::DOMDocument)));
			_bstr_t bsdoc(L"<root></root>");
			m_spdoc->loadXML(bsdoc);


			m_editml.m_hWnd = GetDlgItem(IDC_EDIT1);
			m_spac->Init( (long)m_editml.m_hWnd, m_spStrings );
		}
		catch (_com_error&) {
			MessageBox("com error occured",_T(""),MB_OK|MB_ICONERROR);
		}

		// init sliders
		m_slider.m_hWnd = GetDlgItem(IDC_SLIDER1);
		CRect rcs;
		m_slider.GetWindowRect(rcs);
		m_slider.SetRange( 40, 40+rcs.Width() );
		m_slider.SetPos(40+rcs.Width());

		m_slider2.m_hWnd = GetDlgItem(IDC_SLIDER2);
		m_slider2.GetWindowRect(rcs);
		m_slider2.SetRange( 40, 40+rcs.Height() );
		m_slider2.SetPos(40+rcs.Height());

		BOOL bh;
		OnClickedBtninit(0,0,0,bh);
		m_editml.SetFocus();
		UpdateACMLSettings();
		return FALSE;
	}

	LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		CSimpleDialog<IDD_ABOUTBOX, FALSE> dlg;
		dlg.DoModal();
		return 0;
	}

	LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		// TODO: Add validation code 
		EndDialog(wID);
		return 0;
	}

	LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		EndDialog(wID);
		return 0;
	}

	BOOL UpdateACMLSettings(BOOL bLoad=TRUE);
	LRESULT OnClickedCheckBox(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
	{
		if (wNotifyCode == BN_CLICKED) UpdateACMLSettings(FALSE);
		return 0;
	}
	LRESULT OnChangeEditlines(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
	{
		UpdateACMLSettings(FALSE);
		return 0;
	}
	LRESULT OnClickedBtninit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnClickedBtnload(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnClickedBtnsave(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnClickedBtnload2(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnClickedBtnsave2(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnClickedBtnload3(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnClickedBtnsave3(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnHScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnVScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
};


/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MAINDLG_H__D0947DE9_4DE3_477B_82AF_11D43DE03E5A__INCLUDED_)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions