QDlg.cpp
上传用户:cszhwei
上传日期:2007-01-01
资源大小:37k
文件大小:5k
源码类别:

组合框控件

开发平台:

Visual C++

  1. // QDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Q.h"
  5. #include "QDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  14. {
  15. //{{AFX_DATA_INIT(CAboutDlg)
  16. //}}AFX_DATA_INIT
  17. }
  18. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  19. {
  20. CDialog::DoDataExchange(pDX);
  21. //{{AFX_DATA_MAP(CAboutDlg)
  22. //}}AFX_DATA_MAP
  23. }
  24. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  25. //{{AFX_MSG_MAP(CAboutDlg)
  26. //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CQDlg dialog
  30. CQDlg::CQDlg(CWnd* pParent /*=NULL*/)
  31. : CDialog(CQDlg::IDD, pParent)
  32. {
  33. //{{AFX_DATA_INIT(CQDlg)
  34. //}}AFX_DATA_INIT
  35. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  36. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  37. for (int  i = 0; i < 5; i++)
  38. m_pCombo[i] = new CQComboBox(Line, NULL, i);
  39. }
  40. CQDlg::~CQDlg()
  41. {
  42. for (int  i = 0; i < 5; i++)
  43. delete m_pCombo[i];
  44. }
  45. void CQDlg::DoDataExchange(CDataExchange* pDX)
  46. {
  47. CDialog::DoDataExchange(pDX);
  48. //{{AFX_DATA_MAP(CQDlg)
  49. DDX_Control(pDX, IDC_EDIT_TEXT, m_edit);
  50. //}}AFX_DATA_MAP
  51. }
  52. BEGIN_MESSAGE_MAP(CQDlg, CDialog)
  53. //{{AFX_MSG_MAP(CQDlg)
  54. ON_WM_SYSCOMMAND()
  55. ON_WM_PAINT()
  56. ON_WM_QUERYDRAGICON()
  57. //}}AFX_MSG_MAP
  58. END_MESSAGE_MAP()
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CQDlg message handlers
  61. typedef TCHAR (*RNDSTR) (CString* pString);
  62. TCHAR RandomLimited(CString* pString)
  63. {
  64.         return (TCHAR)pString->GetAt(((BYTE)rand()) %
  65. pString->GetLength());
  66. }
  67. TCHAR RandomUnLimited(CString* pString)
  68. {
  69.         return (TCHAR)(BYTE)rand();
  70. }
  71. CString RandomString(int nLength = 16, CString sWhat = _T("0123456789"))
  72. {
  73.         RNDSTR f = sWhat.IsEmpty() ? RandomUnLimited : RandomLimited;
  74.         CString result;
  75.         for (int i = 0; i < nLength; i++)
  76.                 result += f(&sWhat);
  77.         return result;
  78. }
  79. BOOL CQDlg::OnInitDialog()
  80. {
  81. CDialog::OnInitDialog();
  82. // Add "About..." menu item to system menu.
  83. // IDM_ABOUTBOX must be in the system command range.
  84. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  85. ASSERT(IDM_ABOUTBOX < 0xF000);
  86. CMenu* pSysMenu = GetSystemMenu(FALSE);
  87. if (pSysMenu != NULL)
  88. {
  89. CString strAboutMenu;
  90. strAboutMenu.LoadString(IDS_ABOUTBOX);
  91. if (!strAboutMenu.IsEmpty())
  92. {
  93. pSysMenu->AppendMenu(MF_SEPARATOR);
  94. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  95. }
  96. }
  97. // Set the icon for this dialog.  The framework does this automatically
  98. //  when the application's main window is not a dialog
  99. SetIcon(m_hIcon, TRUE); // Set big icon
  100. SetIcon(m_hIcon, FALSE); // Set small icon
  101. for (int i = 0; i < 5 ; i++)
  102. {
  103. int n = 5000 + rand() % 1000;
  104. for (int j = 0; j < n; j++)
  105. m_arItems[i].Add(RandomString());
  106. }
  107. for (i = 0; i < 5; i++)
  108. {
  109. m_pCombo[i]->SubclassDlgItem(IDC_CUSTOM1 + i,this);
  110. m_pCombo[i]->SetCountItems(m_arItems[i].GetSize());
  111. }
  112. return TRUE;  // return TRUE  unless you set the focus to a control
  113. }
  114. void CQDlg::OnSysCommand(UINT nID, LPARAM lParam)
  115. {
  116. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  117. {
  118. CAboutDlg dlgAbout;
  119. dlgAbout.DoModal();
  120. }
  121. else
  122. {
  123. CDialog::OnSysCommand(nID, lParam);
  124. }
  125. }
  126. // If you add a minimize button to your dialog, you will need the code below
  127. //  to draw the icon.  For MFC applications using the document/view model,
  128. //  this is automatically done for you by the framework.
  129. void CQDlg::OnPaint() 
  130. {
  131. if (IsIconic())
  132. {
  133. CPaintDC dc(this); // device context for painting
  134. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  135. // Center icon in client rectangle
  136. int cxIcon = GetSystemMetrics(SM_CXICON);
  137. int cyIcon = GetSystemMetrics(SM_CYICON);
  138. CRect rect;
  139. GetClientRect(&rect);
  140. int x = (rect.Width() - cxIcon + 1) / 2;
  141. int y = (rect.Height() - cyIcon + 1) / 2;
  142. // Draw the icon
  143. dc.DrawIcon(x, y, m_hIcon);
  144. }
  145. else
  146. {
  147. CDialog::OnPaint();
  148. }
  149. }
  150. // The system calls this to obtain the cursor to display while the user drags
  151. //  the minimized window.
  152. HCURSOR CQDlg::OnQueryDragIcon()
  153. {
  154. return (HCURSOR) m_hIcon;
  155. }
  156. CStringArray CQDlg::m_arItems[5];
  157. LPCTSTR CQDlg::Line(int iLine, LPARAM& lParamItem, LPARAM lParam)
  158. {
  159. if (iLine < m_arItems[lParam].GetSize())
  160. return m_arItems[lParam][iLine];
  161. return NULL;
  162. }
  163. LRESULT CQDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  164. {
  165. UINT m_nLoaded = RegisterWindowMessage(_T("QCBN_LOADED"));
  166. if (message == m_nLoaded)
  167. {
  168. CQComboBox* pCombo = ((CQComboBox*)CWnd::FromHandle((HWND)wParam));
  169. CString text; text.Format(_T("QCombo ID = %irn"), pCombo->GetDlgCtrlID());
  170. text += pCombo->m_QuickLoader.GetListNodes() + _T("rn");
  171. CString oldText;
  172. m_edit.GetWindowText(oldText);
  173. oldText = text + oldText;
  174. m_edit.SetWindowText(oldText);
  175. }
  176. return CDialog::WindowProc(message, wParam, lParam);
  177. }