Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > vc技巧集锦二
【标  题】:vc技巧集锦二
【关键字】:vc
【来  源】:http://www.cublog.cn/u/21400/showart.php?id=147460

vc技巧集锦二

Your Ad Here
1.窗口的动画效果
一.在文档的框架类中(或在对话框中的OnInitDialog()函数中)添加WM_CREATE消息响应代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  // TODO:Add your creation code here
  AnimateWindow(GetSafeHwnd(), 1000, AW_BLEND); //淡入淡出
  return 0;
}
二.添加WM_CLOSE消息处理代码:
void CMainFrame::OnClose()
{
  AnimateWindow(GetSafeHwnd(), 1000, AW_HIDE|AW_CENTER); //四周向中间收缩
  CFrameWnd::OnClose();
}
三.最后在文件StdAfx.h文件的开头加入如下代码以使AnimateWindow函数能够被正确调用:
#undef WINVER
#define WINVER 0x500
2.制作圆角矩形窗口
在文档的框架类中添加WM_SIZE消息响应代码:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
  CRgn m_rgn;
  CRect rc;
  GetWindowRect(&rc); //获得窗口矩形
  rc -= rc.TopLeft();
  m_rgn.CreateRoundRectRgn(rc.left, rc.top, rc.right, rc.bottom, 100, 100); //根据窗口矩形创建一个圆角矩形
  SetWindowRgn(m_rgn, TRUE); //根据圆角矩形指定的区域改变窗口的形状
}
3.为对话框添加右键菜单
一.在资源创建对话框中选择Menu项并单击New按钮自动创建ID为IDR_MENU1的菜单,为该菜单添加一个菜单项File,并在File菜单项下添加Cut,Copy和Paste三个菜单(为这三个菜单添加消息响应代码)
如:
void CExampleDlg::OnCut()
{
  AfxMessageBox("Cut"); //弹出对话框
}
void CExampleDlg::OnCopy()
{
  AfxMessageBox("Copy"); //弹出对话框
}
void CExampleDlg::OnPaste()
{
  AfxMessageBox("Paste"); //弹出对话框
}
二.当在窗口内右击时,窗口将接收到WM_CONTEXTMENU消息,在该消息的处理函数中装载右键菜单,并调用CMenu::TrackPopupMenu函数便可显示右键菜单,添加对话框WM_CONTEXTMENU消息处理函数的响应代码如下:
void CExampleDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
  CMenu menu;
  menu.LoadMenu(IDR_MENU1); //读取资源
  menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, point.x, point.y, this) //弹出自定义右键菜单
}
4.动态设置窗口的图标
方法一:
首先import一个ID为IDI_ICON1的图标,然后在对话框的OnInitDialog()函数中添加如下代码:
BOOL CLangziDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  // TODO: Add extra initialization here
  HICON hlcon = AfxGetApp()->LoadIcon(IDI_ICON1); //读取图标资源
  ASSERT(hlcon);
  AfxGetMainWnd()->SendMessage(WM_SETICON, FALSE, (LPARAM)hlcon);
 
  return TRUE;   
}
方法二: 把对话框的构造函数中的这句m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);里的IDR_MAINFRAME改成IDI_ICON1即你要设置的图标 
5.为对话框添加状态条
一.在资源创建对话框中选择String Table项并单击New按钮自动创建一个String Table资源,打开String Table资源,并且添加四个ID分别为IDS_panel1,IDS_panel2,IDS_panel3,IDS_panel4的字符串资源
二.为对话框类添加一个成员变量
   public:
         CStatusBar m_wndStatusBar;
在对话框的初始化函数OnInitDialog()中添加一下代码来加载状态条:
BOOL CLangziDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
        CRect rect;
 GetClientRect(rect); //获得客户区的大小
 //状态条
 if (!m_wndStatusBar.Create(this) ||
             !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT))) //创建状态栏
 {
  TRACE0("未能创建状态栏!\n");
  return -1;
 }
 m_wndStatusBar.MoveWindow(0, rect.bottom-20, rect.right, 20); //移动状态栏
 return TRUE; 
}
三.在对话框类的实现文件中欲编译头的后面定义上面的indicators(在文档中indicators已自动生成在框架类CMainFrame中,修改之即可)
   static UINT indicators[] = {
 IDS_panel1,
 IDS_panel2,
 IDS_panel3,
 IDS_panel4,
};
5.1.在窗口的状态栏中显示时间
一.在资源String Table 中添加一个新的字符串ID为IDS_clock,并把字符串标题(caption)改成:00-00-00 00:00:00
二.修改对话框实现文件中的indicators如下:
static UINT indicators[] = {
 IDS_panel1,
 IDS_panel2,
 IDS_panel3,
 IDS_panel4,
        IDS_clock,
};
三.在对话框的初始化函数OnInitDialog()中添加以下程序以设置一个500ms刷新一次的定时器:
SetTimer(1, 500, NULL);
通过ClassWizard为对话框类添加WM_TIMER消息响应代码,这样每隔500ms就会在状态栏中显示系统当前时间:
如:
void CLangziDlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 if (nIDEvent==1)
 {
  CTime t;
  t = CTime::GetCurrentTime(); //取得当前时间
         CString str;
                str = t.Format("%Y-%m-%d %H:%M:%S"); //设置时间格式,转换为字符串
  m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(IDS_clock), str);
 }
 
 CDialog::OnTimer(nIDEvent);
}
最后要添加WM_CLOSE消息响应代码来销毁定时器:
void CLangziDlg::OnClose() //销毁定时器
{
 KillTimer(1);
 
 CDialog::OnClose();
}
6. 在菜单中显示图标
新建一个单文档(或对话框)应用程序,然后为视类(获为对话框类)添加三个成员变量:
public:
       CBitmap bm_New;
       CBitmap bm_Open;
       CBitmap bm_Save;
向程序中添加三个位图资源,他们ID分别为IDB_BMP_NEW,IDB_BMP_OPEN,IDB_BMP_SAVE,然后在视类(或在对话框类)的构造函数中将三个位图资源读取到bm_New,bm_Open和bm_Save中:
CLangziView::CLangziView()
{
  bm_New.LoadBitmap(IDB_BMP_NEW);
  bm_New.LoadBitmap(IDB_BMP_OPEN);
  bm_New.LoadBitmap(IDB_BMP_SAVE); //读取位图资源
}
最后在视类的OnDraw函数中(或在对话框类的OnPaint函数中)通过SetMenuItemBitmaps函数向菜单中增加位图
CWND* parent = GetParent();
CMenu* pmenubar = parent->GetMenu();
CMenu* pmenu = pmenubar->GetSubMenu(0); //得到第1个主菜单
pmenu->SetMenuItemBitmaps(0, MF_BYPOSITION, &bm_New, &bm_New);
pmenu->SetMenuItemBitmaps(1, MF_BYPOSITION, &bm_Open, &bm_Open);
pmenu->SetMenuItemBitmaps(2, MF_BYPOSITION, &bm_Save, &bm_Save);
(JS)Ch6 - DOM Basics:【上一篇】
计算机编码大全(ZT):【下一篇】
【相关文章】
  • 用Struts开发基于MVC的Web应用
  • 一.VC常用数据类型列表
  • 孙鑫VC++笔记
  • 最常见的20种VC++编译错误信息
  • vc技巧集锦
  • vc++中如何实现位图按钮
  • vc中给对话框添加位图背景
  • vc中改变对话框的背景色
  • 如何在VC++中制作按钮提示
  • Spring.MVC.and.Web.Flow.Feb.2006
  • 【随机文章】
  • DTS开发记录(8)-- 主键的影响
  • apache2 php5 mysql5安装配置
  • 宝宝过敏体质父母怎么做呢?康本让一切问题迎刃而解!
  • 与不良习惯做斗争
  • 传奇3G 战国2稀释物品解析
  • [公告]由Bruce Zhang负责博客园的出书工作
  • 实验八 单臂路由
  • linux下iptables 你能看懂吗
  • 3ds Max 7 多边形建模从入门到进阶(10)
  • eclipse 与 myEclipse
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.