学习心得:杂记一

 一、加入右键弹出菜单:

 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));

 

                                                                                                                

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值