学习心得:杂记一

 一、加入右键弹出菜单:

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

 

                                                                                                                

内容概要:《学术研究提示设计 50 招》是一份详尽的指南,旨在帮助研究人员提高学术写作和研究效率。该文档涵盖了从论文撰写、润色、翻译、查重降重、参考文献管理、投稿审稿到文献阅读等多个方面的具体操作指令。每一章节均针对特定任务提供了详细的步骤和注意事项,例如如何撰写标题、摘要、致谢,如何进行英文润色、中英翻译,以及如何优化逻辑结构等。文档还介绍了如何利用AI工具进行文献分析、术语表提取和研究方向探索等内容,为研究者提供了全面的支持。 适合人群:适用于学术研究人员,特别是那些需要撰写、润色和提交学术论文的研究者,包括研究生、博士生及高校教师等。 使用场景及目标:① 提供一系列具体的指令,帮助研究者高效完成论文的各个部分,如撰写标题、摘要、致谢等;② 提供润色和翻译的详细指导,确保论文语言的准确性和专业性;③ 提供查重降重的方法,确保论文的原创性;④ 提供参考文献管理和投稿审稿的指导,帮助研究者顺利发表论文;⑤ 利用AI工具进行文献分析、术语表提取和研究方向探索,提高研究效率。 阅读建议:此资源不仅提供了具体的指令和方法,更重要的是引导研究者如何思考和解决问题。因此,在学习过程中,不仅要关注具体的步骤,还要理解背后的原理和逻辑,结合实际案例进行实践和反思。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值