VC开发小技巧(1)

2016-02-19 12:42 5 1 收藏

今天图老师小编给大家展示的是VC开发小技巧(1),精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - 编程语言 】

一、打开CD-ROM
  
  mciSendString("Set cdAudio door open wait",NULL,0,NULL);
  
  二、关闭CD_ROM
  
  mciSendString("Set cdAudio door closed wait",NULL,0,NULL);
  
  三、关闭计算机
  
  OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构
  
  OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  
  GetVersionEx(&OsVersionInfo); //获取操作系统版本信息
  
  if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
  
  {
  
  //Windows98,调用ExitWindowsEx()函数重新启动计算机
  
  DWord dwReserved;
  
  ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、
  
  //关机、关闭电源等操作
  
  // 退出前的一些处理程序
  
  }
  
  四、重启计算机
  
  typedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针
  
  HINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll
  
  SHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针
  
  if(hInst != NULL)
  
  {
  
  //获得函数的地址并调用之
  
  ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);
  
  
  
  (*ShutDownDialog)(0);
  
  }
  
  五、枚举所有字体
  
  LOGFONT lf;
  
  lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT strUCture
  
  strcpy(lf.lfFaceName,"");
  
  CClientDC dc (this);
  
  // Enumerate the font families
  
  ::EnumFontFamiliesEx((HDC) dc,&lf, (FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);
  
  //枚举函数
  
  int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,
  
  LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
  
  
  
  {
  
  // Create a pointer to the dialog window
  
  CDay7Dlg* pWnd = (CDay7Dlg*) lparam;
  
  // add the font name to the list box
  
  pWnd -m_ctlFontList.AddString(lpelf -elfLogFont.lfFaceName);
  
  // Return 1 to continue font enumeration
  
  return 1;
  
  }
  
  //其中m_ctlFontList是一个列表控件变量
  
  六、一次只运行一个程序实例,假如已运行则退出
  
  if( FindWindow(NULL,"程序标题")) exit(0);
  
  七、得到当前鼠标所在位置
  
  CPoint pt;
  
  GetCursorPos(&pt); //得到位置
  
  八、上下文菜单事件触发事件:OnContextMenu事件
  
  九、显示和隐藏程序菜单
  
  CWnd *pWnd=AfxGetMainWnd();
  
  if(b_m) //隐藏菜单
  
  {
  
  pWnd-SetMenu(NULL);
  
  pWnd-DrawMenuBar();
  
  b_m=false;
  
  }
  
  else
  
  {
  
  CMenu menu;
  
  menu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项
  
  pWnd-SetMenu(&menu);
  
  pWnd-DrawMenuBar();
  
  b_m=true;
  
  menu.Detach();
  
  }
  
  十、获取可执行文件的图标
  
  HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
  
  if (hIcon &&hIcon!=(HICON)-1)
  
  {
  
  pDC-DrawIcon(10,10,hIcon);
  
  
  
  }
  
  DestroyIcon(hIcon);
  
  
  
  十一、窗口自动靠边程序演示
  
  BOOL AdjustPos(CRect* lpRect)
  
  {//自动靠边
  
  int iSX=GetSystemMetrics(SM_CXFULLSCREEN);
  
  int iSY=GetSystemMetrics(SM_CYFULLSCREEN);
  
  RECT rWorkArea;
  
  BOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &rWorkAre
  
  a, 0);
  
  CRect rcWA;
  
  if(!bResult)
  
  {//假如调用不成功就利用GetSystemMetrics获取屏幕面积
  
  rcWA=CRect(0,0,iSX,iSY);
  
  }
  
  else
  
  rcWA=rWorkArea;
  
  int iX=lpRect-left;
  
  int iY=lpRect-top;
  
  
  
  if(iX rcWA.left + DETASTEP && iX!=rcWA.left)
  
  {//调整左
  
  //pWnd-SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);
  
  lpRect-OffsetRect(rcWA.left-iX,0);
  
  AdjustPos(lpRect);
  
  return TRUE;
  
  }
  
  if(iY rcWA.top + DETASTEP && iY!=rcWA.top)
  
  {//调整上
  
  //pWnd-SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);
  
  lpRect-OffsetRect(0,rcWA.top-iY);
  
  AdjustPos(lpRect);
  
  return TRUE;
  
  }
  
  if(iX + lpRect-Width() rcWA.right - DETASTEP && iX !=rcWA.right-lpRect-Width())
  
  {//调整右
  
  //pWnd-SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);
  
  lpRect-OffsetRect(rcWA.right-lpRect-right,0);
  
  AdjustPos(lpRect);
  
  return TRUE;
  
  }
  
  if(iY + lpRect-Height() rcWA.bottom - DETASTEP && iY !=rcWA.bottom-lpRect
  
  -Height())
  
  {//调整下
  
  //pWnd-SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);
  
  lpRect-OffsetRect(0,rcWA.bottom-lpRect-bottom);
  
  return TRUE;
  
  }
  
  return FALSE;
  
  }
  
  //然后在ONMOVEING事件中使用所下过程调用
  
  CRect r=*pRect;
  
  AdjustPos(&r);
  
  *pRect=(RECT)r;
  
  十二、给系统菜单添加一个菜单项给系统菜单添加一个菜单项需要进行下述三个步骤://首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显
  
  //示该对话)定义菜单项ID,该ID应大于0x0F而小于0xF000;
  
  //其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单
  
  //项添加到菜单中。下例给系统菜单添加两个新的int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)
  
  {
  
  //…
  
  //Make sure system menu item is in the right range.
  
  ASSERT(IDM_MYSYSITEM0xF000);
  
  //Get pointer to system menu.
  
  CMenu* pSysMenu=GetSystemMenu(FALSE);
  
  ASSERT_VALID(pSysMenu);
  
  //Add a separator and our menu item to system menu.
  
  CString StrMenuItem(_T ("New menu item"));
  
  pSysMenu-AppendMenu(MF_SEPARATOR);
  
  pSysMenu-AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);
  
  //…
  
  }
  
  十三、运行其它程序
  
  1、运行EMAIL或网址
  
  char szMailAddress[80];
  
  strcpy(szMailAddress,"mailto:netvc@21cn.com");
  
  ShellExecute(NULL, "open", szMailAddress, NULL, NULL, SW_SHOWNORMAL);
  
  2、运行可执行程序
   WinExec("notepad.exe",SW_SHOW); //运行计事本
  
  十四、动态增加或删除菜单
  
  1、 增加菜单
  
  //添加
  
  CMenu *mainmenu;
  
  mainmenu=AfxGetMainWnd()-GetMenu(); //得到主菜单
  
  (mainmenu-GetSubMenu (0))-AppendMenu (MF_SEPARATOR);//添加分隔符
  
  (mainmenu-GetSubMenu (0))-AppendMenu(MF_STRING,ID_APP_ABOUT,
  
  _T("Always on &Top")); //添加新的菜单项
  
  DrawMenuBar(); //重画菜单
  
  2、 删除菜单
  
  //删除
  
  CMenu *mainmenu;
  
  mainmenu=AfxGetMainWnd()-GetMenu(); //得到主菜单
  
  CString str ;
  
  for(int i=(mainmenu-GetSubMenu (0))-GetMenuItemCount()-1;i=0;i--) //取得菜单的项数。
  
  {
  
  (mainmenu-GetSubMenu (0))-GetMenuString(i,str,MF_BYPOSITION);
  
  //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。
  
  if(str=="Always on &Top") //假如是刚才我们增加的菜单项,则删除。
  
  {
  
  (mainmenu-GetSubMenu (0))-DeleteMenu(i,MF_BYPOSITION);
  
  break;
  
  }
  
  }
  
  十五、改变应用程序的图标静态更改:
  
  //修改图标资源IDR_MAINFRAME。它有两个图标,一个是16*16的,另一个是32*32的,注重要一起修改。
  
  //动态更改: 向主窗口发送WM_SETICON消息.代码如下:
  
  HICON hIcon=AfxGetApp()-LoadIcon(IDI_ICON);
  
  ASSERT(hIcon);
  
  AfxGetMainWnd()-SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
  
  
   十六、另一种改变窗口标题的方法
  
  //使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowText()函数:
  
  SetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CString类的变量。
  
  十七、剪切板上通过增强元文件拷贝图像数据下面代码拷贝通过元文件拷贝图像数据到任何应用程序//其可以放置在CView派生类的函数中。
  
  CMeta

来源:http://www.tulaoshi.com/n/20160219/1601607.html

延伸阅读
在CSS网页布局开发中,会有很多小技巧,新手朋友往往对此很不熟悉。在某一两个小问题上,或许纠缠很长时间才能搞明白,虽然在很多的文档中,多次提及过这方面的内容,但依然有很多朋友在这些问题上犯错。我们今天看看这些CSS技巧,认真读一读,或许您并不能完全理解,您可以在本站进行搜索,扩展您所想要得到的知识,相信您会有很多收获! ...
在Windows操作系统上,我们最常见的浏览器有两种:文件浏览器(eXPloer.exe,应用于文件系统)和Internet浏览器(iexplore.exe,应用于互联网资源)。由于这两个浏览器功能强大,而且又与Windows操作系统捆绑销售,最终也就成为了浏览器的标准。但有时候,为了给浏览器加入一些新的特性,我们往往会重新设计一个自己的浏览器。新的浏览器模拟标...
Struts开发技巧 在经历了《中国电信大客户贴心服务》项目的开发以及目前正在进行开发中的《中国电信总部经营分析》项目,累计了一些对于Struts1.1和Tiles开发的一些技术和技巧,特写出来,方便以后的开发,同时也相信能给读者在开发Struts提供一些帮助 模块配置 1. Struts配置文件定义 对于系统中的某个模块,需要在开发...
1.users是用户表,userid是从sequence得到的唯一序号,作为主键,下面的触发器方便每次插入分配唯一的序列,其他表也可以参考于此. CREATE OR REPLACE TRIGGER users_trig before insert on users for each row declare seq_val number; begin select s_userid.nextval into seq_val from dual; :new.userid := seq_val; end; 2.org是部...
1.检测程序中的括号是否匹配     把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号)前面,键入快捷键“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。 [注:当一个函数体的内容过长时,全部选中,可以把光标移动到函数体的{处,按下Ctrl+},即可全...

经验教程

362

收藏

17
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部