WTL 学习笔记 -- ResizeDialog

来源:互联网 发布:女生长高知乎 编辑:程序博客网 时间:2024/05/17 04:41
导读:
  WTL 学习笔记-- ResizeDialog
  
  记得以前写过一个ActiveX控件,只要把它放在对话框上,它遍历对话框上的所有控件,并把它们管理起来,只要对话框大小变化时,它自动调整各个控件的大小和位置。这可能是我写的第一个ActiveX控件,比较失败,虽然功能实现了,但只是无条件的缩放控件的大小和位置,结果是有的控件变得很难看。
  
  WTL里已经内置这种功能,不用我们自己实现了。它提供了一个CdialogResize类,帮助实现自动调整对话框上控件的大小和位置。这个功能很好用,简单有效。可以按下列步骤进行:
  
  1. 让对话框从CdialogResize类继承过来:
  classCMainDlg: publicCDialogImpl, public CDialogResize
  2. 定义自动调整大小的控件列表
  BEGIN_DLGRESIZE_MAP(CMainDlg)
  DLGRESIZE_CONTROL(IDC_LIST, DLSZ_SIZE_Y)
  DLGRESIZE_CONTROL(IDC_EDIT, DLSZ_SIZE_X| DLSZ_SIZE_Y)
  DLGRESIZE_CONTROL(IDOK, DLSZ_MOVE_X)
  DLGRESIZE_CONTROL(IDCANCEL, DLSZ_MOVE_X)
  DLGRESIZE_CONTROL(ID_APP_ABOUT, DLSZ_MOVE_X)
  END_DLGRESIZE_MAP()
  3. 在消息处理中加入消息转发功能
  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)
  CHAIN_MSG_MAP(CDialogResize)
  END_MSG_MAP()
  4. 在OnInitDialog里做点初始化工作
  LRESULTOnInitDialog(UINT/*uMsg*/, WPARAM/*wParam*/, LPARAM/*lParam*/, BOOL&/*bHandled*/)
  {
  // center the dialog on the screen
  CenterWindow();
  
  // set icons
  HICONhIcon= (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
  IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
  SetIcon(hIcon, TRUE);
  HICONhIconSmall= (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
  IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
  SetIcon(hIconSmall, FALSE);
  
  ATLASSERT(GetDlgItem(IDOK) != NULL);
  ATLASSERT(GetDlgItem(ID_APP_ABOUT) != NULL);
  
  DlgResize_Init();
  returnTRUE
  }
  
  OK,搞定!
  
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=659499

本文转自
http://blog.csdn.net/absurd/archive/2006/04/11/659499.aspx
原创粉丝点击