posts - 1,  comments - 1,  trackbacks - 0
http://blog.csdn.net/jznsmail/archive/2004/12/01/200944.aspx
原文在:
http://www.codeproject.com/KB/wtl/tips.aspx
这篇文章将介绍十个开发WTL应用程序的小技巧。这些技巧内容涉及从怎么控制和放置应用程序主窗口到怎么在控件中显示字符串和整数等系列问题。你可以到http://www.codeproject.com/wtl/Tips/TipsProject.zip下载使用这十个技巧的示例程序。十个技巧包括:
·设置主窗口的大小
·启动时在屏幕中央显示主窗口
·设置主窗口的最小/最大尺寸
·动态加载主窗口标题
·将工具栏设置成平面风格
·设置对话框文字和背景的颜色
·交换对话框按钮位置
·设置平面风格的ListView头
·在控件中显示整数
·在控件中显示资源字符串

主窗口技巧

下面的技巧能够同时使用在SDI和MDI应用程序中:

1.设置窗口生成时的大小
  在程序.CPP文件的Run()函数中使用下面的技术可以控制窗口生成时的大小尺寸。用你想要的窗口大小设置rect的值,然后将这个值作为第二个函数传递给CreateEx()函数,如下所示:
  RECT rc = {0, 0, 380, 265};
  if(wndMain.CreateEx(NULL, rc) == NULL)
2.将主窗口在桌面中央显示
  要让主窗口在桌面中央显示,只要在应用程序的.CPP文件的Run()的函数的ShowWindow()命令前增加下面的一行代码:
  wndMain.CenterWindow();
3.设置最小/最大尺寸
  如果你想要控制你的主窗口的最大最小尺寸,你要在在头文件mainframe.h的CMainFrame消息映射表中增加下面的消息处理过程。
  MESSAGE_HANDLER(WM_GETMINMAXINFO, OnGetMinMaxInfo)
  完全实现功能,还需要在文件中增加处理函数:
  LRESULT OnGetMinMaxInfo(UINT, WPARAM, LPARAM lParam, BOOL&)
  { // lParam传递MINMAXINFO结构的指针
    LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam;

    // 改变size结构中的相应的值为我们想要的窗口大小值
    lpMMI->ptMinTrackSize.x = 200; // 最小宽度
    lpMMI->ptMinTrackSize.y = 150; // 最小高度
    lpMMI->ptMaxTrackSize.x = 600; // 最大宽度
    lpMMI->ptMaxTrackSize.y = 450; // 最大高度

    return 0; }
4.动态设置标题
  是可以通过加载资源中的字符串生成Cstring对象,然后通过这个对象实现动态设置窗口标题。把下面的代码加入到OnCreate()函数中就可以  完成实现这个功能。另外需要在项目中#include “atlmisc.h”,这个文件定义了Cstring类。你能够用LoadString()加载最长255个字符的  字符串。
  CString str;
  str.LoadString(IDS_EDITSTRING);
  SetWindowText(str);
5. Flat-style Toolbar 平面风格工具栏
  使用WTL AppWizard生成程序的时候,如果没有选择rebar的话,生成的工具栏是标准立体按钮。如果你想在没有rebar时工具栏有平面风格,  只要在主框架OnCreate函数的创建工具栏的代码后边增加以下代码就可以了:
  CToolBarCtrl tool = m_hWndToolBar;
  tool.ModifyStyle(0, TBSTYLE_FLAT);
  Dialog Tips 对话框技巧
  以下的技巧可以使用在对话框或者基于对话框的应用程序中。下边的图显示了我们的示例函数的About对话框,其中使用了两个技巧


6. Dialog Text and Background Color 对话框文字和背景的颜色
  这个技巧提供了简单快速改变对话框的文字或背景颜色的方法。这篇文章示例程序的About对话框里,我们使用SetTextColor设置文字颜色为  白色。北京颜色使用“Stock brush”设置成黑色。第一步是在对话框消息映射表中增加以下的两行代码:
  MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtrlColor)
  MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtrlColor)
  第二步是在OnCtrlColor函数中改变文字和背景的颜色。将背景模式设置为透明,这样可以正确显示静态控件和group box控件文字。接着,  将文字设置成我们想要的颜色,最后设置背景brush。
  在项目中增加atlmisc.h头文件,因为AtlGetStockBrush()函数在这个头文件中定义。有几种Stock brusk可以选择WHITE_BRUSH,   LTGRAY_BRUSH, GRAY_BRUSH, DKGRAY_BRUSH, 和BLACK_BRUSH,如果使用其它颜色,你需要生成新的brush,
  LRESULT OnCtrlColor(UINT, WPARAM, LPARAM, BOOL&)
  { // 设置背景模式和文字颜色
    SetBkMode((HDC)wParam, TRANSPARENT); // 透明背景
    SetTextColor((HDC)wParam, RGB(255, 255, 255)); // 白色文字

    return (LRESULT)AtlGetStockBrush(BLACK_BRUSH); }
7.动态交换按钮位置
  下面的代码来自About对话框的OnInitDialog()函数中,用来交换OK和Cancel按钮的位置。其中关键点是将屏幕位置如何转换成相对于Client  的位置。
  CButton bOk = GetDlgItem(IDOK));
  CButton bCancel = GetDlgItem(IDCANCEL));

  // 取得按钮位置
  RECT rcOk, rcCancel;
  bOk.GetWindowRect(&rcOk);
  ScreenToClient(&rcOk);
  bCancel.GetWindowRect(&rcCancel);
  ScreenToClient(&rcCancel);

  // 交换按钮位置
  bOk.SetWindowPos(NULL, &rcCancel, SWP_NOZORDER | SWP_NOSIZE);
  bCancel.SetWindowPos(NULL, &rcOk, SWP_NOZORDER | SWP_NOSIZE);
  控件技巧
  技巧8适用于报表类型的listview控件,技巧9和10适用于接受text的任何控件,如edit控件和richedit控件等。
8.平面风格的ListView头
  将报表型的listview的头控件改成平面外观,只要如下取得头控件对象,并且修改它的类型
  CHeaderCtrl hdr = MyListView.GetHeader();
  hdr.ModifyStyle(HDS_BUTTONS, 0);
9.显示整数
  在项目中增加atlmisc.h文件,这个文件定义了Cstring类。然后使用下面的代码在控件中显示整数值
  int nValue = 9999;
  CString sInteger;
  sInteger.Format("%i", nValue);
  MyControl.SetWindowText(sInteger);
10.显示资源字符串
  使用atlmisc.h头文件中的辅助函数AtlLoadString加载长度可以超过255个字符的字符串,然后将这个字符串显示到控件中。示例程序中使用  下面的代码实现在edit控将中显示字符串。当在资源字符串表中输入字符串时,要使用\r\n来分行,仅仅\n不能正确分行。
  TCHAR cArray[1000];
  AtlLoadString(IDS_EDITSTRING, cArray, 1000 + 1);
  MyControl.SetWindowText(cArray);
  附加技巧
  下面的技巧可以使用在所有的控件中
11.缺省字体
  当一个控件被放置在对话框上时,控件就采用对话框的缺省字体。然而,当一个控件如视图或者分割面板被使用在窗口中时,将使用SYSTEM_FONT字体,这种字体不是很漂亮。要改变字体的话,只要在工程中增加atlmisc.h文件,然后调用AtlGetStockFont取得truetype字体DEFAULT_GUI_FONT,将控件设置成这种字体:
  MyControl.SetFont(AtlGetStockFont(DEFAULT_GUI_FONT), TRUE);
使用条款
  本文章的示例程序是免费的,你可以在任何地方使用。
  THIS SOFTWARE IS DISTRIBUTED AS-IS, WITHOUT WARRANTIES OF ANY KIND.
posted on 2009-05-20 12:49 Aiscanf 阅读(530) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

  • 1. re: wince中消息处理
  • winCE同样不接受窗口非客户区产生的消息,如WM_NCMOUSEMOVE
    我想当鼠标在非客户区移动是写些代码你有办法处理吗?有的话给我指点指点,
    crow024@163.com
  • --as