|
|
1.1 root 1: // This is a part of the Microsoft Foundation Classes C++ library.
2: // Copyright (C) 1992 Microsoft Corporation
3: // All rights reserved.
4: //
5: // This source code is only intended as a supplement to the
6: // Microsoft Foundation Classes Reference and Microsoft
7: // QuickHelp documentation provided with the library.
8: // See these sources for detailed information regarding the
9: // Microsoft Foundation Classes product.
10:
11: #include "minsvr.h"
12:
13: /////////////////////////////////////////////////////////////////////////////
14:
15: CMinItem::CMinItem()
16: {
17: m_data = "example string";
18: }
19:
20: void CMinItem::Serialize(CArchive& ar)
21: {
22: // Customize this to store real data
23: if (ar.IsStoring())
24: {
25: ar << m_data;
26: }
27: else
28: {
29: ar >> m_data;
30: }
31: }
32:
33:
34: OLESTATUS CMinItem::OnShow(BOOL /* bTakeFocus */)
35: {
36: // make sure server is the topmost window
37: AfxGetApp()->m_pMainWnd->BringWindowToTop();
38: return OLE_OK;
39: }
40:
41:
42: BOOL CMinItem::OnGetTextData(CString& rStringReturn)
43: {
44: rStringReturn = m_data;
45: return TRUE;
46: }
47:
48: /////////////////////////////////////////////////////////////////////////////
49: // Simple dialog for changing the string
50:
51: class CChangeDlg : public CModalDialog
52: {
53: protected:
54: CString& m_rString;
55:
56: public:
57: CChangeDlg(CString& rString)
58: : CModalDialog("ChangeDlg"), m_rString(rString)
59: { }
60:
61: BOOL OnInitDialog();
62: void OnOK();
63: };
64:
65: BOOL CChangeDlg::OnInitDialog()
66: {
67: GetDlgItem(IDC_EDIT1)->SetWindowText(m_rString);
68: return TRUE;
69: };
70:
71: void CChangeDlg::OnOK()
72: {
73: GetDlgItem(IDC_EDIT1)->GetWindowText(m_rString);
74: EndDialog(IDOK);
75: }
76:
77:
78: BOOL CMinItem::PromptChangeString()
79: {
80: CChangeDlg dlg(m_data);
81: return (dlg.DoModal() == IDOK);
82: }
83:
84: /////////////////////////////////////////////////////////////////////////////
85: // Drawing items into bitmap or metafile
86:
87: BOOL CMinItem::OnDraw(CMetaFileDC* pDC)
88: {
89: ASSERT_VALID(pDC);
90: CSize textSize;
91:
92: // first calculate the text size in MM_TEXT units
93: {
94: CWindowDC screenDC(NULL);
95: textSize = screenDC.GetTextExtent(m_data, m_data.GetLength());
96: }
97:
98: // if you want the item to always be drawn in a specific mapping
99: // mode set it here.
100:
101: // Otherwise the OLE DLLs will scale the metafile to fit the
102: // client specified size. Setting the viewport size/extent
103: // determines the relative scale of everything.
104:
105: int cx = textSize.cx + 100;
106: int cy = (cx * 4) / 3; // nice aspect ratio
107: TRACE("Item drawing size is %d x %d\n", cx, cy);
108: pDC->SetWindowExt(cx, cy);
109:
110: // Draw a shaded circle
111: pDC->SelectStockObject(LTGRAY_BRUSH);
112: pDC->Ellipse(0, 0, cx, cy);
113:
114: // draw the text in the middle (as best we can)
115: pDC->SetBkMode(TRANSPARENT);
116: pDC->TextOut((cx - textSize.cx) / 2, (cy - textSize.cy) / 2, m_data);
117:
118: return TRUE;
119: }
120:
121: /////////////////////////////////////////////////////////////////////////////
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.