当前位置:  编程技术>c/c++/嵌入式
本页文章导读:
    ▪关于在MFC中将窗口最小化到托盘      摘要:关于在MFC中将窗口最小化到托盘~~步骤/方法   (一) 原理  1、最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标。  2、恢复的原理:将窗口显示,再将托盘中的图.........
    ▪集合的所有分割方式---2013年1月28日             问题描述:分割集合成多个子集合,这几个子集合间没有交集且他们的并集是原集合。       思路:将包含n个元素的集合set的分割表示为n个数字。比如set[]={1,2,.........
    ▪MFC中获取窗口句柄及相关函数      转自:http://blog.csdn.net/xiaoyun8822/article/details/7939605一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针和句柄获取和操作问题。本文中将针对.........

[1]关于在MFC中将窗口最小化到托盘
    来源:    发布时间: 2013-10-17

摘要:关于在MFC中将窗口最小化到托盘~~
步骤/方法
   (一) 原理
  1、最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标。
  2、恢复的原理:将窗口显示,再将托盘中的图片删除。


  (二)程序实现
  1、自定义消息WM_SHOWTASK:
  #define WM_SHOWTASK (WM_USER +1)
  2、在MFC的
  ::OnSysCommand(UINT nID, LPARAM lParam) 函数体中增加一个命令响应
  if(nID==SC_MINIMIZE)
  ToTray(); //最小化到托盘的函数
  3、在消息映射中添加
  ON_MESSAGE(WM_SHOWTASK,OnShowTask); //其中WM_SHOWTASK是消息名,
  OnShowTask是自己定义的消息响应函数,后面有说明。

  (三)具体函数内容
  1、最小化到托盘函数
  void CMyDlg::ToTray()
  {
  NOTIFYICONDATA nid;
  nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
  nid.hWnd=this->m_hWnd;
  nid.uID=IDR_MAINFRAME;
  nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
  nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
  nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
  strcpy(nid.szTip,"程序名称"); //信息提示条
  Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
  ShowWindow(SW_HIDE); //隐藏主窗口
  }
  2、恢复界面函数
  在头文件中定义消息响应函数
  afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;
  //wParam接收的是图标的ID,而lParam接收的是鼠标的行为
  LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam)
  {
  if(wParam!=IDR_MAINFRAME)
  return 1;
  switch(lParam)
  {
  case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
  {
  LPPOINT lpoint=new tagPOINT;
  ::GetCursorPos(lpoint);//得到鼠标位置
  CMenu menu;
  menu.CreatePopupMenu();//声明一个弹出式菜单


  menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭"); //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。
  menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //确定弹出式菜单的位置
  HMENU hmenu=menu.Detach();
  menu.DestroyMenu(); //资源回收
  delete lpoint;
  } break;
  case WM_LBUTTONDBLCLK: //双击左键的处理
  {
  this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
  DeleteTray();
  } break;
  default: break;
  }
  return 0;
  }

  删除托盘图标函数
  void CMyDlg::DeleteTray()
  {
  NOTIFYICONDATA nid;
  nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
  nid.hWnd=this->m_hWnd;
  nid.uID=IDR_MAINFRAME;
  nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
  nid.uCallbackMessage=WM_SHOWTASK; //自定义的消息名称
  nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
  strcpy(nid.szTip,"程序名称"); //信息提示条为“计划任务提醒”
  Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标
  }

本文链接


    
[2]集合的所有分割方式---2013年1月28日
    来源:    发布时间: 2013-10-17

       问题描述:分割集合成多个子集合,这几个子集合间没有交集且他们的并集是原集合。

       思路:将包含n个元素的集合set的分割表示为n个数字。比如set[]={1,2,3,4},那么{1,2},{3,4}就可以表示为1122,这4个数分别表示set[0]在第一个分割集合,set[1]在第一个分割集合,set[2]在第二个分割集合,set[3]在第二个分割集合。将这个过程称为编码。

       然后抓住两个要点:

       1.第i个元素的编码一定小于或者等于i。约定一下,set原集合已经从小到大排列好,分割的集合也是这样排好。然后,很容易理解,第1个元素的编码肯定为1。接着,第2个元素如果在第一个分割集合中,那么他的编码也是1;但如果不是在第一个分割集合中,那么第2个元素的编码肯定是2,因为在第二个分割集合中,最小的数最少也是2;依次类推,可以很容易用数学归纳法证明。

       2.第i个元素的编码一定小于等于1,2,3,....i-1这些元素的编码中的最大值再加1。这也很容易想到,也很容易用数学归纳法证明。

       抓住这个要点后,就用深度搜索构造一颗子集合树就可以解决问题了。但是,我在构造子集树的过程中出现了一个思维上的错误,导致浪费了不少调试的时间。具体的错误见代码注释的描述。

       代码如下:

1 #include <stdio.h>
2 #define MAX 1000
3
4 int set[MAX]={1,2,3,4};
5 int n=4;
6 int code[MAX]={1,1,1,1};
7
8 //prototype
9 void DFS(int index);
10
11 void print_set()
12 {
13 int index;
14 int max=-1;
15 printf("{");
16 for(index=0;index<n;index++)
17 {
18 if(code[index]==1)
19 printf("%d ",set[index]);
20 if(max<code[index])
21 max=code[index];
22 }
23 printf("},{");
24 for(index=2;index<=max;index++)
25 {
26 int index_2;
27 for(index_2=0;index_2<n;index_2++)
28 if(code[index_2]==index)
29 printf("%d ",set[index_2]);
30 printf("},{");
31 }
32 printf("\n");
33 }
34
35 //find out the max code of 1,2,3...i-1 and plus 1
36 int max_pre(int i)
37 {
38 int index;
39 int max=-1;
40 for(index=0;index<i;index++)
41 if(code[index]>max)
42 max=code[index];
43 return (max+1);
44 }
45
46 int main()
47 {
48 int i;
49 DFS(1);
50 return 0;
51 }
52
53 void DFS(int index)
54 {
55 print_set();
56 if(index==n)
57 return ;
58
    
[3]MFC中获取窗口句柄及相关函数
    来源:    发布时间: 2013-10-17

转自:http://blog.csdn.net/xiaoyun8822/article/details/7939605

一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针和句柄获取和操作问题。本文中将针对各类句柄的获得、指针的获得以及MFC中常见应用进行阐述并举例。

 

本文内容索引:

=========================================================

MFC中获取常见类句柄<视图类,文档类,框架类,应用程序类>

MFC中获取窗口句柄及相关函数 

MFC获取控件句柄

MFC各类中获取类指针详解

 MSDN关于应用程序信息和管理的各个函数

==========================================================

 

MFC中获取常见类句柄<视图类,文档类,框架类,应用程序类>

 

本节为VC中常用的文档类,视图类,框架类,应用程序类,自定义类中获取其它四个类的方法: 
GET App 
   AfxGetInstanceHandle() 
   AfxGetApp() 
GET Frame->View->Document 
    SDI   AfxGetMainWnd() -> GetActiveView() -> GetDocument() 
    MDI   AfxGetMainWnd() -> MDIGetActive() -> GetActiveView() -> GetDocument() 
GET Menu 
     CMenu *pMenu=AfxGetApp()->m_pMainWnd->GetMenu(); 
GET ToolBar,StatusBar 
      (CMainFrame *)GetParent()->m_wndToolBar; 
      (CMainFrame *)GetParent()->m_wndStatusBar; 
      CStatusBar * pStatusBa=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR); 
      CToolBar * pToolBar=(CtoolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR); 
Get View from Document 
      GetFirstViewPosition 和 GetNextView 函数得到指针。 



 

 

MFC中获取窗口句柄及相关函数 

首先,窗口句柄,在窗口类中直接使用成员变量m_hWnd,在窗口外最常见是用AfxGetMainWnd (获取主窗口指针,其成员变量m_hWnd为主窗口句柄):

 

HWND hWnd = AfxGetMainWnd()->m_hWnd;

 

与其相关的函数说明如下,这些函数对于获取窗口句柄非常有用:

GetTopWindow 函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。 函数原型:HWND GetTopWindow(HWND hWnd); 参数:   hWnd:被查序

    
最新技术文章:
▪C++单例模式应用实例
▪C++设计模式之迭代器模式
▪C++实现动态分配const对象实例
▪C++设计模式之中介者模式
▪C++设计模式之备忘录模式
▪C++插入排序算法实例
▪C++冒泡排序算法实例
▪C++选择排序算法实例
▪C++归并排序算法实例
▪C++设计模式之观察者模式
▪C++中复制构造函数和重载赋值操作符总结
▪C++设计模式之状态模式
▪C++设计模式之策略模式
▪C++设计模式之访问者模式
▪C++设计模式之模板方法模式
▪C++实现下载的代码
▪C++模板之特化与偏特化详解
▪C++实现查壳程序代码实例
▪C语言、C++内存对齐问题详解
▪C语言、C++中的union用法总结
▪C++基于CreateToolhelp32Snapshot获取系统进程实例
▪C++中memcpy和memmove的区别总结
▪C++通过TerminateProess结束进程实例
▪C++内存查找实例
▪C++实现CreatThread函数主线程与工作线程交互的...
▪C++设计模式之桥接模式
▪C++中关键字Struct和Class的区别
▪C++设计模式之组合模式
▪C++ COM编程之什么是组件?
▪C++ COM编程之什么是接口?
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3