VC小技巧20个
VC小技巧20个 1. 打开CD-ROM mciSendString(Set cdAudio door openwait,NULL,0,NULL); 2. 关闭CD_ROM mciSendString(Set cdAudio door closedwait,NULL,0,NULL); 3. 关闭计算机 OSVERSIONINFO OsVersionInfo; // 包含操作系统版本信息的数据结构 OsVersionIn
VC小技巧20个
1. 打开CD-ROM
mciSendString("Set cdAudio door openwait",NULL,0,NULL);
2. 关闭CD_ROM
mciSendString("Set cdAudio door closedwait",NULL,0,NULL);
3. 关闭计算机
OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构
OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OsVersionInfo); //获取操作系统版本信息
if(OsVersionInfo.dwPlatformId ==VER_PLATFORM_WIN32_WINDOWS)
{
//Windows98,调用ExitWindowsEx()函数重新启动计算机
DWORD dwReserved;
ExitWindowsEx(EWX_REBOOT,dwReserved);//可以改变第一个参数,实现注销用户、
//关机、关闭电源等操作
// 退出前的一些处理程序
}
4. 重启计算机
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);
}
5. 枚举所有字体
LOGFONT lf;
lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONTstructure
strcpy(lf.lfFaceName,"");
CClientDC dc (this);
//Enumerate the font families
::EnumFontFamiliesEx((HDC) dc,&lf,
(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);
//枚举函数
int CALLBACK EnumFontFamProc(LPENUMLOGFONTlpelf,LPNEWTEXTMETRIC
lpntm,DWORD nFontType,long lparam)
{
// Create a pointer to the dialogwindow
CDay7Dlg* pWnd = (CDay7Dlg*) lparam;
// add the font name to the list box
pWnd->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName);
// Return 1 to continue fontenumeration
return 1;
}
其中m_ctlFontList是一个列表控件变量
6. 一次只运行一个程序实例,如果已运行则退出
if( FindWindow(NULL,"程序标题")) exit(0);
7. 得到当前鼠标所在位置
CPoint pt;
GetCursorPos(&pt); //得到位置
8. 上下文菜单事件触发事件:
OnContextMenu事件
9. 显示和隐藏程序菜单
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();
}
10. 获取可执行文件的图标
HICON
hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
if (hIcon &&hIcon!=(HICON)-1)
{
pDC->DrawIcon(10,10,hIcon);
}
DestroyIcon(hIcon);
11. 窗口自动靠边程序演示
BOOL AdjustPos(CRect* lpRect)
{
//自动靠边
intiSX=GetSystemMetrics(SM_CXFULLSCREEN);
intiSY=GetSystemMetrics(SM_CYFULLSCREEN);
RECT rWorkArea;
BOOL bResult =SystemParametersInfo(SPI_GETWORKAREA,
sizeof(RECT), &rWorkArea, 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
{
//调整左
//pWnd->SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);
lpRect->OffsetRect(rcWA.left-iX,0);
AdjustPos(lpRect);
return TRUE;
}
if(iY
{
//调整上
//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;
12. 给系统菜单添加一个菜单项
给系统菜单添加一个菜单项需要进行下述三个步骤:
首先,使用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 theright range.
ASSERT(IDM_MYSYSITEM
//Get pointer to system menu.
CMenu* pSysMenu=GetSystemMenu(FALSE);
ASSERT_VALID(pSysMenu);
//Add a separator and our menu item tosystem menu.
CString StrMenuItem(_T ("New menuitem"));
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_MYSYSITEM, StrMenuItem);
…
}
13. 运行其它程序
//运行EMAIL或网址
char szMailAddress[80];
strcpy(szMailAddress,"");
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(); //得到主菜单
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;
}
}
15. 测试ALT键是否按下:
GetKeyState(VK_MENU);
GetAlt();
16. 检查是否按下鼠标左键
if((nFlags&MK_LBUTTON)==MK_LBUTTON)
17. 检查键盘输入
在OnKeyDown中的参数nChar是一个数值,当显示的时候,需要转换成字符,使用如下的命令:
char lsChar;
lsChar=char(nChar);
if(lsChar=='A');
{
.......
}
18. 调用另一个函数::GetKeyState(),用一个特定的键代码来确定法键是否被按下。如果::GetKeyState函数的返回值是负的,表示该键被按下。如果返回值是非负的,表示该留未被按下。例如:如果要确定shift键是否被按下,可以使用下面的代码:
if(::GetKeyState(VK_SHIFT)
{
AfxMessageBox("shift ispressed");
}
19. 如何在编程的过程中随时结束应用程序(常规)
1)需要向窗口发送 WM_CLOSE/WM_QUIT消息,
调用 CWnd::OnClose成员函数并允许对用户提示是否保存修改过的数据.
AfxGetMainWnd()->SendMessage(WM_CLOSE); //别忘了先得到当前窗口的指针
2)使用函数: void PostQuitMessage( int nExitCode // exit code );
3)使用标准函数:void exit( int status ); //尽量不要在MFC中使用
20. 得到屏幕的尺寸大小
HWND hWnd;
CRect Rect;
hWnd = ::GetDesktopWindow();
::GetClientRect(hWnd, &Rect);
//---------------------------------------------------------
如何查询和设置系统参数
在Windows 3.1SDK中介绍过SDK函数SystemParametersInfo,调用该函数可以查询和设置系统参数,诸如按键的重复速率设置、鼠标双击延迟时间、图标字体以及桌面覆盖位图等等。
//Create a font that is used for icon titles.
LOGFONT stFont; :: SystemParametersInfo(SPIF_GETICONTITLELOGFONT,
sizeof (LOGFONT), &stFont,SPIF_SENDWININICHANGE);
m_font.CreateFontIndirect (&stFont); //Change thewallpaper to leaves.bmp.
:: SystemParametersInfo (SPI_SETDESKWALLPAPER, 0,
_T("forest.bmp"),SPIF_UPDATEINIFILE);
//---------------------------------------------------------
如何使用一个预定义的Windows光标?调用CWinApp:: LoadStandardCursor并传送光标标识符。
BOOL CSampleDialog:: OnSetCursor(CWnd* pWnd, UINT nHitTest,
UINT message) { //Display wait cursor if busy.
if (m_bBusy) {
SetCursor (AfxGetApp () ->LoadStandardCursor(IDC_WAIT));
return TRUE; }
return CDialog:: OnSetCursor (pWnd. nHitTest,message); }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

抖音是一款流行的短视频社交应用程序,用户不仅能观看、分享各种类型的短视频内容,还提供一系列小游戏供你玩。那么抖音小游戏从哪进呢?抖音小游戏入口在哪?下面就来看看详细教程。 方法一:小程序打开 1、点击我选项 进到抖音的主页之后,点击我选项进入。 2、点击三横线 进入到我界面之后,点击上面的三横线按钮。 3、点击小程序 打开三横线选项之后,点击里面的小程序。 4、点击抖音小游戏 进入到小程序界面之后,点击抖音小游戏那个选项即可打开。 方法二:搜索打开 1、点击放大镜 进

Win11小技巧分享:一招跳过微软账户登录Windows11是微软最新推出的操作系统,具有全新的设计风格和许多实用的功能。然而,对于一些用户来说,在每次启动系统时都要登录微软账户可能会感到有些烦扰。如果你是其中一员,不妨尝试一下以下的技巧,让你能够跳过微软账户登录,直接进入桌面界面。首先,我们需要在系统中创建一个本地账户,来代替微软账户登录。这样做的好处是

C语言中,表示指针,存储其他变量的地址;&表示地址运算符,返回变量的内存地址。指针的使用技巧包括定义指针、解引用指针,需确保指针指向有效地址;地址运算符&的使用技巧包括获取变量地址,获取数组元素地址时返回数组第一元素地址。实战案例说明了使用指针和地址运算符反转字符串。

我们经常在excel中制作和编辑表格,但是作为一个刚刚接触软件的新手来讲,如何使用excel制作表格,并没有我们使用起来那么轻松。下边,我们针对新手,也就是初学者需要掌握的表格制作的一些步骤进行一些演练,希望对需要的人有些帮助。新手表格示例样板如下图:我们看看如何来完成!1,新建excel文档,有两种方法。可以在【桌面】空白位置,点击鼠标右键-【新建】-【xls】文件。也可以【开始】-【所有程序】-【MicrosoftOffice】-【MicrosoftExcel20**】2,双击我们新建的ex

扫雷怎么打开?扫雷是一款经典的单人游戏,玩家的目标是揭开方格内的数字,以便确定哪些方格中隐藏着地雷。如果揭开的方格没有地雷,则游戏将继续进行;如果揭开的方格中有地雷,则游戏将立即结束。接下来将详细介绍扫雷游戏的进入方式。第一步:打开电脑首先,需要打开计算机。扫雷是一个电脑游戏,只有在电脑上才能运行。如果还没有打开电脑,请长按电源键,直到电脑开机并显示桌面。第二步:找到扫雷游戏在桌面中寻找扫雷游戏的图标。如果已经安装了扫雷游戏,那么它应该会出现在桌面上。如果没有,请在计算机的开始菜单中搜索扫雷游戏

VSCode(VisualStudioCode)是一款由微软开发的开源代码编辑器,具有强大的功能和丰富的插件支持,成为开发者们的首选工具之一。本文将为初学者们提供一个入门指南,帮助他们快速掌握VSCode的使用技巧。在本文中,将介绍如何安装VSCode、基本的编辑操作、快捷键、插件安装等内容,并为读者提供具体的代码示例。1.安装VSCode首先,我们需

标题:PHP编程技巧:如何实现3秒内跳转网页在Web开发中,经常会遇到需要在一定时间内自动跳转到另一个页面的情况。本文将介绍如何使用PHP实现在3秒内实现页面跳转的编程技巧,并提供具体的代码示例。首先,实现页面跳转的基本原理是通过HTTP的响应头中的Location字段来实现。通过设置该字段可以让浏览器自动跳转到指定的页面。下面是一个简单的例子,演示如何在P

Win11技巧大揭秘:如何绕过微软账户登录近期,微软公司推出了全新的操作系统Windows11,引起了广泛关注。相比之前的版本,Windows11在界面设计、功能改进等方面做出了许多新的调整,但也引发了一些争议,其中最引人关注的一点就是强制要求用户使用微软账户登录系统。对于一些用户来说,他们可能更习惯于使用本地账户登录,而不愿意将个人信息与微软账户绑定。
