vc常用技巧.docx
- 文档编号:16084646
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:15
- 大小:23.77KB
vc常用技巧.docx
《vc常用技巧.docx》由会员分享,可在线阅读,更多相关《vc常用技巧.docx(15页珍藏版)》请在冰点文库上搜索。
vc常用技巧
一、打开CD-ROM
mciSendString("SetcdAudiodooropenwait",NULL,0,NULL);
二、关闭CD_ROM
mciSendString("SetcdAudiodoorclosedwait",NULL,0,NULL);
三、关闭计算机
OSVERSIONINFOOsVersionInfo;//包含操作系统版本信息的数据结构
OsVersionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&OsVersionInfo);//获取操作系统版本信息
if(OsVersionInfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
{
//Windows98,调用ExitWindowsEx()函数重新启动计算机
DWORDdwReserved;
ExitWindowsEx(EWX_REBOOT,dwReserved);//可以改变第一个参数,实现注销用户、
//关机、关闭电源等操作
//退出前的一些处理程序
}
四、重启计算机
typedefint(CALLBACK*SHUTDOWNDLG)(int);//显示关机对话框函数的指针
HINSTANCEhInst=LoadLibrary("shell32.dll");//装入shell32.dll
SHUTDOWNDLGShutDownDialog;//指向shell32.dll库中显示关机对话框函数的指针
if(hInst!
=NULL)
{
//获得函数的地址并调用之
ShutDownDialog=(SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);
(*ShutDownDialog)(0);
}
五、枚举所有字体
LOGFONTlf;
lf.lfCharSet=DEFAULT_CHARSET;//InitializetheLOGFONTstructure
strcpy(lf.lfFaceName,"");
CClientDCdc(this);
//Enumeratethefontfamilies
:
:
EnumFontFamiliesEx((HDC)dc,&lf,
(FONTENUMPROC)EnumFontFamProc,(LPARAM)this,0);
//枚举函数
intCALLBACKEnumFontFamProc(LPENUMLOGFONTlpelf,LPNEWTEXTMETRIClpntm,DWORDnFontType,longlparam)
{
//Createapointertothedialogwindow
CDay7Dlg*pWnd=(CDay7Dlg*)lparam;
//addthefontnametothelistbox
pWnd->m_ctlFontList.AddString(lpelf->elfLogFont.lfFaceName);
//Return1tocontinuefontenumeration
return1;
}
其中m_ctlFontList是一个列表控件变量
六、一次只运行一个程序实例,如果已运行则退出
if(FindWindow(NULL,"程序标题"))exit(0);
七、得到当前鼠标所在位置
CPointpt;
GetCursorPos(&pt);//得到位置
八、上下文菜单事件触发事件:
OnContextMenu事件
九、显示和隐藏程序菜单
CWnd*pWnd=AfxGetMainWnd();
if(b_m)//隐藏菜单
{
pWnd->SetMenu(NULL);
pWnd->DrawMenuBar();
b_m=false;
}
else
{
CMenumenu;
menu.LoadMenu(IDR_MAINFRAME);////显示菜单也可改变菜单项
pWnd->SetMenu(&menu);
pWnd->DrawMenuBar();
b_m=true;
menu.Detach();
}
十、获取可执行文件的图标
HICONhIcon=:
:
ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
if(hIcon&&hIcon!
=(HICON)-1)
{
pDC->DrawIcon(10,10,hIcon);
}
DestroyIcon(hIcon);
十一、窗口自动靠边程序演示
BOOLAdjustPos(CRect*lpRect)
{
//自动靠边
intiSX=GetSystemMetrics(SM_CXFULLSCREEN);
intiSY=GetSystemMetrics(SM_CYFULLSCREEN);
RECTrWorkArea;
BOOLbResult=SystemParametersInfo(SPI_GETWORKAREA,sizeof(RECT),&rWorkArea,0);
CRectrcWA;
if(!
bResult)
{
//如果调用不成功就利用GetSystemMetrics获取屏幕面积
rcWA=CRect(0,0,iSX,iSY);
}
else
rcWA=rWorkArea;
intiX=lpRect->left;
intiY=lpRect->top;
if(iX =rcWA.left) { //调整左 //pWnd->SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE); lpRect->OffsetRect(rcWA.left-iX,0); AdjustPos(lpRect); returnTRUE; } if(iY =rcWA.top) { //调整上 //pWnd->SetWindowPos(NULL,iX,rcWA.top,0,0,SWP_NOSIZE); lpRect->OffsetRect(0,rcWA.top-iY); AdjustPos(lpRect); returnTRUE; } 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); returnTRUE; } 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); returnTRUE; } returnFALSE; } //然后在ONMOVEING事件中使用所下过程调用 CRectr=*pRect; AdjustPos(&r); *pRect=(RECT)r; 十二、给系统菜单添加一个菜单项 给系统菜单添加一个菜单项需要进行下述三个步骤: 首先,使用ResourceSymbols对话(在View菜单中选择ResourceSymbols...可以显示该对话)定义菜单项ID,该ID应大于 0x0F而小于0xF000; 其次,调用CWnd: : GetSystemMenu获取系统菜单的指针并调用CWnd: : Appendmenu将菜单项添加到菜单中。 下例给系统菜单添加 两个新的菜单项。 intCMainFrame: : OnCreate(LPCREATESTRUCTlpCreateStruct) { … //Makesuresystemmenuitemisintherightrange. ASSERT(IDM_MYSYSITEM<0xF000); //Getpointertosystemmenu. CMenu*pSysMenu=GetSystemMenu(FALSE); ASSERT_VALID(pSysMenu); //Addaseparatorandourmenuitemtosystemmenu. CStringStrMenuItem(_T("Newmenuitem")); pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_MYSYSITEM,StrMenuItem); … } 13、运行其它程序 //运行EMAIL或网址 charszMailAddress[80]; strcpy(szMailAddress,"mailto: netvc@"); ShellExecute(NULL,"open",szMailAddress,NULL,NULL,SW_SHOWNORMAL); //2、运行可执行程序 WinExec("notepad.exe",SW_SHOW);//运行计事本 14、动态增加或删除菜单 (1)、增加菜单 //添加 CMenu*mainmenu; mainmenu=AfxGetMainWnd()->GetMenu();//得到主菜单 (mainmenu->GetSubMenu(0))->AppendMenu(MF_SEPARATOR);//添加分隔符 (mainmenu->GetSubMenu(0))->AppendMenu(MF_STRING,ID_APP_ABOUT,_T("Alwayson&Top"));//添加新的菜单项 DrawMenuBar();//重画菜单 (2)、删除菜单 //删除 CMenu*mainmenu; mainmenu=AfxGetMainWnd()->GetMenu();//得到主菜单 CStringstr; for(inti=(mainmenu->GetSubMenu(0))->GetMenuItemCount()-1;i>=0;i--)//取得菜单的项数。 { (mainmenu->GetSubMenu(0))->GetMenuString(i,str,MF_BYPOSITION); //将指定菜单项的标签拷贝到指定的缓冲区。 MF_BYPOSITION的解释见上。 if(str=="Alwayson&Top")//如果是刚才我们增加的菜单项,则删除。 { (mainmenu->GetSubMenu(0))->DeleteMenu(i,MF_BYPOSITION); break; } } 15、测试ALT键是否按下: GetKeyState(VK_MENU); GetAlt(); 16、检查是否按下鼠标左键 if((nFlags&MK_LBUTTON)==MK_LBUTTON) 17、检查键盘输入 在OnKeyDown中的参数nChar是一个数值,当显示的时候,需要转换成字符,使用如下的命令: charlsChar; lsChar=char(nChar); if(lsChar=='A'); { ....... } 18、调用另一个函数: : GetKeyState(),用一个特定的键代码来确定法键是否被按下。 如果: : GetKeyState函数的返回值是负的,表示该键被按下。 如果返回值是非负的,表示该留未被按下。 例如: 如果要确定shift键是否被按下,可以使用下面的代码: if(: : GetKeyState(VK_SHIFT) { AfxMessageBox("shiftispressed"); } 19.如何在编程的过程中随时结束应用程序(常规) 1)需要向窗口发送WM_CLOSE/WM_QUIT消息, 调用CWnd: : OnClose成员函数并允许对用户提示是否保存修改过的数据. AfxGetMainWnd()->SendMessage(WM_CLOSE);//别忘了先得到当前窗口的指针 2)使用函数: voidPostQuitMessage(intnExitCode//exitcode); 3)使用标准函数: voidexit(intstatus);//尽量不要在MFC中使用 20.得到屏幕的尺寸大小 HWNDhWnd; CRectRect; hWnd=: : GetDesktopWindow(); : : GetClientRect(hWnd,&Rect); //--------------------------------------------------------- 如何查询和设置系统参数 在Windows3.1SDK中介绍过SDK函数SystemParametersInfo,调用该函数可以查询和设置系统参数,诸如按键的重复速率设置、鼠标双击延迟时间、图标字体以及桌面覆盖位图等等。 //Createafontthatisusedforicontitles. LOGFONTstFont; : : SystemParametersInfo(SPIF_GETICONTITLELOGFONT, sizeof(LOGFONT),&stFont,SPIF_SENDWININICHANGE); m_font.CreateFontIndirect(&stFont); //Changethewallpapertoleaves.bmp. : : SystemParametersInfo(SPI_SETDESKWALLPAPER,0,_T("forest.bmp"),SPIF_UPDATEINIFILE); //--------------------------------------------------------- 如何使用一个预定义的Windows光标 调用CWinApp: : LoadStandardCursor并传送光标标识符。 BOOLCSampleDialog: : OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage) { //Displaywaitcursorifbusy. if(m_bBusy) { SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT)); returnTRUE; } returnCDialog: : OnSetCursor(pWnd.nHitTest,message); } 得到CListCtrl控件点击事件时点击的位置: ----------------------------------------------- voidCTest6Dlg: : OnClickList1(NMHDR*pNMHDR,LRESULT*pResult) { NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem! =-1) { CStringstrtemp; strtemp.Format("单击的是第%d行第%d列", pNMListView->iItem,pNMListView->iSubItem); AfxMessageBox(strtemp); } *pResult=0; } 如何在clistctrl的单元格里添加图片? 自己处理按键响应函数: ------------------------------------------------- BOOLCTest6Dlg: : PreTranslateMessage(MSG*pMsg) { if(pMsg->message==WM_KEYDOWN) if(pMsg->hwnd==GetDlgItem(IDC_EDIT1)->m_hWnd)//判断当前控件是不是编辑框 { switch(pMsg->wParam) { caseVK_RETURN: //如果是回车键的话 Onbutton1();//就调用Button1的响应函数 } } returnCDialog: : PreTranslateMessage(pMsg); } 如何在VC中操纵word: 两个像素(用RGB表示)如何确定亮度等级: 加权算出灰度值: R*0.21+Green*0.70+Blue*0.09,或: ((红色值X299)+(绿色值X587)+(蓝色值X114))/1000 自己写了个函数,用来获得ANSI字符串中真实字符的个数,如“I服了U”的长度返回4: -------------------------------------------------- intGetCount(CStringstr) { inttotal=0; for(inti=0;i{ if(127<(unsignedint)str.GetAt(i)) { total++; i++; } else total++; } returntotal; } 删除非空文件夹: ------------------------------------------------ SHFILEOPSTRUCTshfileop; shfileop.hwnd=NULL; shfileop.wFunc=FO_DELETE; shfileop.fFlags=FOF_SILENT|FOF_NOCONFIRMATION; shfileop.pFrom="c: \\temp";//要删除的文件夹 shfileop.pTo=""; shfileop.lpszProgressTitle=""; shfileop.fAnyOperationsAborted=TRUE; intnOK=SHFileOperation(&shfileop); 有关控件的一些常见问答: <==========================很不错的地方哦 用VC++6.0实现PC机与单片机之间串行通信 刷新屏幕局部: 刷新控件区域: 控件ID: IDC_STATIC_STATIC ------------------------------------ CRectstatic_rect; CWnd*pwnd=GetDlgItem(IDC_STATIC_STATIC); if(pwnd==NULL) { return; } pwnd->GetWindowRect(&static_rect); ScreenToClient(&static_rect); InvalidateRect(&static_rect);//注意这个函数,会调用OnEraseBkgnd 在标题栏上画图: 如何精确延时: 怎样给TreeView控件中的结点重命名: 从内存中加载并启动一个exe: 在程序中使用console窗口显示: http: //www.codeg
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vc 常用 技巧