JMultiColSampleDlg.cpp
上传用户:xzhdjhq
上传日期:2007-01-01
资源大小:46k
文件大小:9k
源码类别:

组合框控件

开发平台:

Visual C++

  1. // JMultiColSampleDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "JMultiColSample.h"
  5. #include "JMultiColSampleDlg.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. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // Dialog Data
  18. //{{AFX_DATA(CAboutDlg)
  19. enum { IDD = IDD_ABOUTBOX };
  20. //}}AFX_DATA
  21. // ClassWizard generated virtual function overrides
  22. //{{AFX_VIRTUAL(CAboutDlg)
  23. protected:
  24. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  25. //}}AFX_VIRTUAL
  26. // Implementation
  27. protected:
  28. //{{AFX_MSG(CAboutDlg)
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  33. {
  34. //{{AFX_DATA_INIT(CAboutDlg)
  35. //}}AFX_DATA_INIT
  36. }
  37. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CAboutDlg)
  41. //}}AFX_DATA_MAP
  42. }
  43. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  44. //{{AFX_MSG_MAP(CAboutDlg)
  45. // No message handlers
  46. //}}AFX_MSG_MAP
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CJMultiColSampleDlg dialog
  50. CJMultiColSampleDlg::CJMultiColSampleDlg(CWnd* pParent /*=NULL*/)
  51. : CDialog(CJMultiColSampleDlg::IDD, pParent)
  52. {
  53. //{{AFX_DATA_INIT(CJMultiColSampleDlg)
  54. // NOTE: the ClassWizard will add member initialization here
  55. //}}AFX_DATA_INIT
  56. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  57. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  58. }
  59. void CJMultiColSampleDlg::DoDataExchange(CDataExchange* pDX)
  60. {
  61. CDialog::DoDataExchange(pDX);
  62. //{{AFX_DATA_MAP(CJMultiColSampleDlg)
  63. DDX_Control(pDX, IDC_COMBO4, m_jcbCheckBox);
  64. DDX_Control(pDX, IDC_COMBO3, m_jcbShowTitletip);
  65. DDX_Control(pDX, IDC_COMBO2, m_jcbHideColumn);
  66. DDX_Control(pDX, IDC_COMBO1, m_jcbSearch);
  67. //}}AFX_DATA_MAP
  68. }
  69. BEGIN_MESSAGE_MAP(CJMultiColSampleDlg, CDialog)
  70. //{{AFX_MSG_MAP(CJMultiColSampleDlg)
  71. ON_WM_SYSCOMMAND()
  72. ON_WM_PAINT()
  73. ON_WM_QUERYDRAGICON()
  74. ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
  75. ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
  76. //ON_CBN_DROPDOWN(IDC_COMBO2, OnDropdownCombo2)
  77. //}}AFX_MSG_MAP
  78. END_MESSAGE_MAP()
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CJMultiColSampleDlg message handlers
  81. BOOL CJMultiColSampleDlg::OnInitDialog()
  82. {
  83. CDialog::OnInitDialog();
  84. // Add "About..." menu item to system menu.
  85. // IDM_ABOUTBOX must be in the system command range.
  86. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  87. ASSERT(IDM_ABOUTBOX < 0xF000);
  88. CMenu* pSysMenu = GetSystemMenu(FALSE);
  89. if (pSysMenu != NULL)
  90. {
  91. CString strAboutMenu;
  92. strAboutMenu.LoadString(IDS_ABOUTBOX);
  93. if (!strAboutMenu.IsEmpty())
  94. {
  95. pSysMenu->AppendMenu(MF_SEPARATOR);
  96. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  97. }
  98. }
  99. // Set the icon for this dialog.  The framework does this automatically
  100. //  when the application's main window is not a dialog
  101. SetIcon(m_hIcon, TRUE); // Set big icon
  102. SetIcon(m_hIcon, FALSE); // Set small icon
  103. ///////////////////////////////////////////////////////////////
  104. // TODO: Add extra initialization here
  105. //////////////////////////////////////////////
  106. // We start here ......
  107. OnInitSearchComboBox();
  108. OnInitShowTitletip();
  109. OnInitCheckBox();
  110. OnInitHideColumn();
  111. return TRUE;  // return TRUE  unless you set the focus to a control
  112. }
  113. void CJMultiColSampleDlg::OnSysCommand(UINT nID, LPARAM lParam)
  114. {
  115. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  116. {
  117. CAboutDlg dlgAbout;
  118. dlgAbout.DoModal();
  119. }
  120. else
  121. {
  122. CDialog::OnSysCommand(nID, lParam);
  123. }
  124. }
  125. // If you add a minimize button to your dialog, you will need the code below
  126. //  to draw the icon.  For MFC applications using the document/view model,
  127. //  this is automatically done for you by the framework.
  128. void CJMultiColSampleDlg::OnPaint() 
  129. {
  130. if (IsIconic())
  131. {
  132. CPaintDC dc(this); // device context for painting
  133. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  134. // Center icon in client rectangle
  135. int cxIcon = GetSystemMetrics(SM_CXICON);
  136. int cyIcon = GetSystemMetrics(SM_CYICON);
  137. CRect rect;
  138. GetClientRect(&rect);
  139. int x = (rect.Width() - cxIcon + 1) / 2;
  140. int y = (rect.Height() - cyIcon + 1) / 2;
  141. // Draw the icon
  142. dc.DrawIcon(x, y, m_hIcon);
  143. }
  144. else
  145. {
  146. CDialog::OnPaint();
  147. }
  148. }
  149. // The system calls this to obtain the cursor to display while the user drags
  150. //  the minimized window.
  151. HCURSOR CJMultiColSampleDlg::OnQueryDragIcon()
  152. {
  153. return (HCURSOR) m_hIcon;
  154. }
  155. void CJMultiColSampleDlg::OnInitSearchComboBox()
  156. {
  157. m_jcbSearch.FormatList(4,DT_LEFT,FALSE,EDGE,0); //number of columns
  158. // fill up the combo
  159. CString str;
  160. for (int row=0;row<5;row++)
  161. {
  162. for (int col=0;col<4;col++)
  163. {
  164. str.Format("%d-%d",col,row);
  165. if (col==3) switch(row)
  166. {
  167. case 0:
  168. str = "Swan";
  169. break;
  170. case 1:
  171. str = "Dog0123456789012345678901234567890123456789";
  172. break;
  173. case 2:
  174. str = "Walla";
  175. break;
  176. case 3:
  177. str = "Wombat";
  178. break;
  179. case 4:
  180. str = "KuKu";
  181. break;
  182. }
  183. m_jcbSearch.AddItem(str,col,row);
  184. }
  185. }
  186. //select one for example
  187. //m_jcbSearch.SelectString("Column:1 ,row:2");
  188. //set the default text to display
  189. CWnd::GetDlgItem(IDC_EDIT1)->SetWindowText( "KuKu");
  190. OnChangeEdit1();
  191. }
  192. void CJMultiColSampleDlg::OnChangeEdit1() 
  193. {
  194. // TODO: If this is a RICHEDIT control, the control will not
  195. // send this notification unless you override the CDialog::OnInitDialog()
  196. // function and call CRichEditCtrl().SetEventMask()
  197. // with the ENM_CHANGE flag ORed into the mask.
  198. // TODO: Add your control notification handler code here
  199. CString rString;
  200. CWnd::GetDlgItem(IDC_EDIT1)->GetWindowText( rString );
  201. m_jcbSearch.SelectString(rString); 
  202. UpdateData(FALSE);
  203. }
  204. void CJMultiColSampleDlg::OnButton1() 
  205. {
  206. OnChangeEdit1();
  207. }
  208. void CJMultiColSampleDlg::OnInitHideColumn()
  209. {
  210. ///////////////////////////////////////////////////////
  211. //HEY, YOU MUST READ THE COMMENT CAREFULLY
  212. //     TO BE ABLE TO USE ALL MY TRICKY FUNCTIONS.  (-:
  213. ////// Total column can only have 1 , tCol=1
  214. //ColDisplay = 0 , is the selected column you want to display
  215. //m_jcbHideColumn.ResetContent(1,DT_LEFT,FALSE,NORMAL,0);
  216. // Total column can only have 1 , tCol=1
  217. //ColDisplay = 1 , is the selected column you want to display
  218. m_jcbHideColumn.ResetContent(1,DT_LEFT,FALSE,NORMAL,1);
  219. // Total column can only have 1 , tCol=1
  220. //ColDisplay = 2 , is the selected column you want to display
  221. //m_jcbHideColumn.ResetContent(1,DT_LEFT,FALSE,NORMAL,2);
  222. // Total column can only have 1 , tCol=1
  223. //ColDisplay = 3 , is the selected column you want to display
  224. //m_jcbHideColumn.ResetContent(1,DT_LEFT,FALSE,NORMAL,3);
  225. /////////////////////////////////////////////////////////
  226. // fill up the combo
  227. CString str;
  228. for (int row=0;row<250;row++)
  229. {
  230. for (int col=0;col<4;col++) //Although, I have 4 columns....
  231. { //***You can have as many column, 
  232. //but you can only display one at a time
  233. str.Format("Column:%d ,row:%d",col,row);
  234. m_jcbHideColumn.AddItem(str,col,row);
  235. }
  236. }
  237. // Must call this Function here to terminate the link-list.
  238. //if you want to search for everything
  239. m_jcbHideColumn.SetCurSel(0);
  240. }
  241. void CJMultiColSampleDlg::OnInitCheckBox()
  242. {
  243. m_jcbCheckBox.ResetContent(2,DT_LEFT,TRUE,EDGE,0);
  244. // fill up the combo
  245. CString str;
  246. for (int row=0;row<5;row++)
  247. {
  248. for (int col=0;col<2;col++)
  249. {
  250. str.Format("Column:%d ,row:%d",col,row);
  251. m_jcbCheckBox.AddItem(str,col,row);
  252. }
  253. }
  254. m_jcbCheckBox.SetCurSel(2);
  255. }
  256. void CJMultiColSampleDlg::OnInitShowTitletip()
  257. {
  258. m_jcbShowTitletip.ResetContent(4,DT_LEFT,FALSE,EDGE,0);
  259. // fill up the combo
  260. CString str;
  261. for (int row=0;row<5;row++)
  262. {
  263. for (int col=0;col<4;col++)
  264. {
  265. str.Format("Column:%d ,row:%d",col,row);
  266. m_jcbShowTitletip.AddItem(str,col,row);
  267. }
  268. }
  269. // Must call this Function here to terminate the link-list.
  270. //if you want to search for everything
  271. m_jcbShowTitletip.SetCurSel(0); 
  272. }
  273. /*
  274. void CJMultiColSampleDlg::DisplayPopdownWindow()
  275. {
  276. //I am trying to do a popup-dropdown window like Aravind Corera. 
  277. //but, it doesn't work properly in VC++6.0
  278. //Get the combo's alignment
  279. CRect rectCombo;
  280. m_jcbHideColumn.GetWindowRect(&rectCombo); //if window is already present delete it
  281. if(m_pWndPopDown) delete m_pWndPopDown; ///Register class and create window
  282. LPCTSTR lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW);
  283. m_pWndPopDown = new CWnd();
  284. m_pWndPopDown->CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW|WS_EX_PALETTEWINDOW,
  285.                         lpszClass,                          
  286. _T(""),
  287.                         WS_POPUP | WS_VISIBLE,
  288.                         rectCombo.left,rectCombo.bottom, 
  289.                         rectCombo.Width(),200,
  290.                         m_jcbHideColumn.GetSafeHwnd(),
  291.                         NULL,                         NULL);
  292. }
  293. void CJMultiColSampleDlg::OnDropdownCombo2() 
  294. {
  295. // prevent drop down of the combo
  296. m_jcbHideColumn.ShowDropDown(FALSE);  
  297. // Display our own popdown window instead 
  298. DisplayPopdownWindow(); 
  299. }
  300. */