热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

VC小技巧20个

VC小技巧20个1.打开CD-ROMmciSendString(SetcdAudiodooropenwait,NULL,0,NULL);2.关闭CD_ROMmciSendString(SetcdAudiodoorclosedwait,NULL,0,NULL);3.关闭计算机OSVERSIONINFOOsVersionInfo;包含操作系统版本信息的数据结构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; // 包含操作系统版本信息的数据结构 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<0xF000);

//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是一个数&#20540;,当显示的时候,需要转换成字符,使用如下的命令:

char lsChar;

lsChar=char(nChar);

if(lsChar=='A');

{

.......

}

18. 调用另一个函数::GetKeyState(),用一个特定的键代码来确定法键是否被按下。如果::GetKeyState函数的返回&#20540;是负的,表示该键被按下。如果返回&#20540;是非负的,表示该留未被按下。例如:如果要确定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); }

推荐阅读
  • NanoPi2 使用体验深入解析(续篇)
    随着Raspberry Pi的问世,开源硬件领域迎来了前所未有的发展,激发了全球范围内的创新热潮。在中国,这一趋势同样催生了一系列类似的开发板,例如NanoPi 2。本文作为前篇的延续,将深入探讨NanoPi 2的实际使用体验,从性能、兼容性到应用场景,进行全面分析。 ... [详细]
  • 教程:使用Source Monitor进行代码质量分析
    Source Monitor 是一款强大的代码分析工具,能够对 Java、C++、C、C# 和 Delphi 等多种编程语言进行复杂度分析,帮助开发者有效评估和提升代码质量。通过详细的指标和报告,该工具可辅助团队识别潜在问题并优化代码结构。 ... [详细]
  • 压缩工具全面对比:Bandizip、7-Zip与WinRAR,哪一款最符合你的需求?
    压缩工具全面对比:Bandizip、7-Zip与WinRAR,哪一款最符合你的需求? ... [详细]
  • 题目要求在给定的数组中找到一个连续子数组,使其乘积最大。本文详细介绍了使用动态规划算法解决这一问题的方法,包括状态定义、状态转移方程和初始化步骤。通过具体的例子和代码实现,帮助读者深入理解该算法的核心思想和实现细节。 ... [详细]
  • 本文将详细介绍如何利用JMeter高效执行API接口测试,涵盖JMeter的基础介绍、安装方法、中文环境配置、主要元件及其作用域和执行顺序等内容,并分享一系列实用的测试技巧,帮助读者全面掌握JMeter接口测试的全过程。 ... [详细]
  • Windows 10 WSL2 中 Linux 子系统文件路径详解与优化建议
    在Windows 10的WSL2环境中,Linux子系统的文件路径结构及其优化方法对于Golang开发者而言尤为重要。本文详细解析了WSL2中Linux子系统的文件目录路径,并提供了针对Go语言开发者的实用优化建议,帮助提升开发效率和系统性能。 ... [详细]
  • 如何在Windows 10操作系统中设置程序自动启动? ... [详细]
  • 如何在官方网站安全下载并安装免费的Windows 7系统
    如果您希望为电脑安装或更换Windows 7操作系统,可以通过软科小院官方网站免费获取正版系统镜像。下载后,根据个人电脑的具体配置和需求,按照官方提供的详细步骤进行安装。这样不仅确保了系统的安全性,还能有效避免潜在的兼容性问题。 ... [详细]
  • 如何配置计算机以指定下载文件的默认保存位置?
    如何配置计算机以指定下载文件的默认保存位置? ... [详细]
  • 如何使用专业软件打开和编辑PHP电影文件?
    如何使用专业软件打开和编辑PHP电影文件? ... [详细]
  • Dapper:一款高效轻量的ORM框架
    Dapper 是一个高效且轻量级的 ORM(对象关系映射)框架,由 StackExchange 开发并维护。它旨在提供快速的数据访问性能,同时保持代码的简洁性和易用性。Dapper 可以显著提高开发效率,特别适用于需要高性能数据操作的应用场景。更多详细信息可参考其官方文档和 GitHub 仓库。 ... [详细]
  • 在处理Java程序时,中文乱码是一个常见的问题。本文将详细探讨导致中文乱码的原因,并分享有效的解决方案,帮助开发者在实际工作中避免这一问题。通过具体的代码示例和最佳实践,本文旨在提供全面的指导,确保中文字符在不同环境下的正确显示。 ... [详细]
  • 在Tomcat启动过程中,遇到了 `java.io.EOFException` 异常,具体表现为 `ObjectInputStream$PeekInputStream.readFully` 方法读取数据时出现不完整的情况。该问题通常由输入流提前结束或数据传输不完整引起,需要检查数据源的完整性和网络连接的稳定性。 ... [详细]
  • Linux 系统中软链接与硬链接的创建及删除方法详解
    在Linux操作系统中,每当创建新文件时,内核会为其分配一个唯一的inode(索引节点)。inode中存储了文件的属性信息,如权限、所有者、大小和时间戳等。通过软链接和硬链接,用户可以方便地在文件系统中创建指向目标文件的引用。软链接类似于Windows中的快捷方式,而硬链接则是直接指向同一个inode的多个文件名。了解如何创建和删除这两种链接对于高效管理和维护文件系统至关重要。 ... [详细]
  • 本文深入探讨了 AdoDataSet RecordSet 的序列化与反序列化技术,详细解析了将 RecordSet 转换为 XML 格式的方法。通过使用 Variant 类型变量和 TStringStream 流对象,实现数据集的高效转换与存储。该方法不仅提高了数据传输的灵活性,还增强了数据处理的兼容性和可扩展性。 ... [详细]
author-avatar
mobiledu2502879793
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有