学习心得:杂记一

原创 2007年09月21日 13:08:00
 一、加入右键弹出菜单:

 CPoint pointMouse;
 CPoint point;
 CMenu menu;

 GetCursorPos(&pointMouse);
 point= pointMouse;

 ::ScreenToClient(pNMHDR->hwndFrom, &pointMouse);

menu.LoadMenu(IDR_MENU);  
 CMenu* popup = menu.GetSubMenu(0);        
 ASSERT(popup != NULL);  
 popup->TrackPopupMenu(
  TPM_LEFTALIGN|TPM_RIGHTBUTTON,
  point.x,
  point.y,
  this,
  NULL); 

二、查找硬盘个数,并在仿系统目录树中加入硬盘(注:不支持98以下)

首先,用CreatFile遍历获取硬盘个数,直到返回INVALID_HANDLE_VALUE时结束。

int CDlg::GetDiskNum()
{
 int   nPhysicalHardDisk=0;  
 CHAR   szDevicePath[_MAX_PATH]={0};  
 for(int index=0;;++index)  
 {  
  wsprintf(szDevicePath,"////.//PHYSICALDRIVE%d",index);   //根据PHYSICALDRIVE%d寻找
  HANDLE  hDevice = CreateFile( 
   szDevicePath,    
   0,                                  
   FILE_SHARE_READ | FILE_SHARE_WRITE,    
   NULL,                            
   OPEN_EXISTING,        
   0,                                
   NULL );  
  if(NULL!=hDevice   &&   INVALID_HANDLE_VALUE!=hDevice)  
  {  
   CloseHandle(hDevice);  
   ++nPhysicalHardDisk;  
  }  
  else   
   break;   
 } 
 return   nPhysicalHardDisk;  
 }

然后,就根据hParent和个数插入树视图

void CDlg::AttachDiskNode(HTREEITEM hParent, int nDiskNum)
{
 if (0 != nDiskNum)
 {
  HTREEITEM hItem = NULL;
  TCHAR szName[MAX_PATH];
  SHFILEINFO  shif;
  CString     str;

  str.LoadStringA(IDS_HARD_DISK);    //为了方便多语言版本
  ::SHGetFileInfo("C://", 0, &shif, sizeof(shif), SHGFI_SYSICONINDEX);
  int nIcon = shif.iIcon;                          //用c:的图标
  ::SHGetFileInfo("C://", 0, &shif, sizeof(shif), SHGFI_SYSICONINDEX|SHGFI_OPENICON);
  int nSelectedIcon = shif.iIcon;
  
  for (int i = 0; i < nDiskNum; i++)
  {
   LPNODEINFO lpNodeInfo = new NODEINFO;  // 你所要保存在节点中的信息
   wsprintf(szName,str+"%d",i);  
   TVINSERTSTRUCT tvis;
   tvis.item.mask = TVIF_TEXT | TVIF_IMAGE  | TVIF_SELECTEDIMAGE | TVIF_PARAM;
   tvis.hInsertAfter = TVI_LAST;
   tvis.hParent = hParent;
   tvis.item.iImage =nIcon;;
   tvis.item.iSelectedImage = nSelectedIcon;
   tvis.item.cchTextMax =MAX_PATH;
   tvis.item.pszText = szName;
   tvis.item.lParam = (LPARAM)lpNodeInfo;
   hItem = m_ctrlTree.InsertItem(&tvis);
  }
 }
}

三、多视图文档中加入一些控件,以及对右键消息捕获的几点注意

在mainfrm中加入各变量(控件),然后在OnCreate中填加如下代码

if (!m_wndToolBar.CreateEx(this) ||
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  return -1;       
 if (!m_wndTabBar.Create(this, IDR_MAINFRAME,
  CBRS_ALIGN_BOTTOM, AFX_IDW_DIALOGBAR))
  return -1;  

if(!m_wndReBar.Create(this) ||
  !m_wndReBar.AddBar(&m_wndToolBar))
  return -1;     

 if (!m_wndReBar2.Create(this) ||
  !m_wndReBar2.AddBar(&m_wndTabBar))
    return -1;     

 if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators,
    sizeof(indicators)/sizeof(UINT)))
  return -1;     

…………

注意:在CMainFrame::OnNotify中可以捕获NM_RCLICK,但要判断是谁发出的进行相对应的处理。开始时没注意控件自己的事务消息,结果……    。

还有就是对Tab的右键的一个小处理,当右键点击不是当前活动的子窗口时,(右键菜单有一个关闭选项)选择关闭时关闭的时当前活动的窗口,所以 一个处理就是点击有键是把点击的那一页激活作为当活动窗口,也就是在右键消息处理函数中发送“激活消息”:

::SendMessage(…… WM_LBUTTONDOWN,……)
  
 ::SendMessage(……  WM_LBUTTONUP,MK_LBUTTON, MAKELPARAM(pointMouse.x, pointMouse.y));

 

                                                                                                                

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

建模学习心得

  • 2015-08-03 17:20
  • 14KB
  • 下载

算法导论学习心得1-----插入排序及两种不同插入方法的效率比较

插入排序的思想不多说了,就和打扑克牌时一样,拿到一张牌时从左到右比较后插入,不同的地方在于我们插入扑克牌是不用考虑移动顺序的。 按照书上第一个算法的代码,插入排序的算法如下: 插入排序1: int...

Hibernate学习心得

  • 2017-03-20 22:28
  • 24KB
  • 下载

Fortran学习心得与总结

  • 2013-11-09 15:40
  • 331KB
  • 下载

java面向对象学习心得

一开始接触的语言是C语言,面向过程,感觉还是比较简单的。以为java的学习会比较困难,但是对于面向对象的这种语言还是比较容易上手的。感觉比C语言还要简单,花又说回来,对于语言没有容易简单,只要掌握了其...

mfc学习心得

  • 2013-12-03 20:17
  • 60KB
  • 下载

spring acegi 学习心得

C++虚函数表学习心得之由类实例地址到虚函数表再到虚函数地址中各种地址解析

C++虚函数是继承多态的核心,常规语法相信很多朋友都很熟悉了,这里有一篇牛人关于C++虚函数表很好的博客:http://blog.csdn.net/haoel/article/details/1948...

SFTP学习心得

  • 2013-09-27 10:55
  • 280KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)