VC中常用的20种方法

vc++ 不同对话框中传递信息的方法(基于自定义消息SendMessage) 也是花了一天时间才搞定的。 背景: 新建了一个基于对话框的MFC程序,在主对话框中添加tabcontrol控件,又新建了两个Dialog(CDialog1和CDialog2),将它们设为tabcontrol控件的子对话框。 目的: 两个子对话框之间传递消息,子对话框与主对话框 阅读详情

 

一、打开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->W 

idth()) 
{//调整右 
//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_MYSYSITEM
<0xF000); 
//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的,另一个是3 

2*32的,注意要一起修改。 
动态更改: 向主窗口发送WM_SETICON消息.代码如下: 
HICON hIcon
=AfxGetApp()->LoadIcon(IDI_ICON); 
ASSERT(hIcon); 
AfxGetMainWnd()
->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon); 
十六、另一种改变窗口标题的方法 
使用语句 CWnd
* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowTe 
xt()函数: 
SetWindowText( 
*m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CSt 
ring类的变量。 
十七、剪切板上通过增强元文件拷贝图像数据 
下面代码拷贝通过元文件拷贝图像数据到任何应用程序,其可以放置在CView派生类的函 

数中。 
CMetaFileDC 
* m_pMetaDC = new CMetaFileDC(); 
m_pMetaDC
->CreateEnhanced(GetDC(),NULL,NULL,"whatever"); 
//draw meta file 
//do what ever you want to do: bitmaps, lines, text... 
//close meta file dc and prepare for clipboard; 
HENHMETAFILE hMF = m_pMetaDC->CloseEnhanced(); 
//copy to clipboard 
OpenClipboard(); 
EmptyClipboard(); 
::SetClipboardData(CF_ENHMETAFILE,hMF);                                                                                 
CloseClipboard(); 

//DeleteMetaFile(hMF); 
delete m_pMetaDC; 
十八、剪切板上文本数据的传送 
把文本放置到剪接板上: 
CString source; 
//put your text in source 
if(OpenClipboard()) 
{ 
HGLOBAL clipbuffer; 
char * buffer; 
EmptyClipboard(); 
clipbuffer 
= GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1); 
buffer 
= (char*)GlobalLock(clipbuffer); 
strcpy(buffer, LPCSTR(source)); 
GlobalUnlock(clipbuffer); 
SetClipboardData(CF_TEXT,clipbuffer); 
CloseClipboard(); 
}
 
从剪接板上获取文本: 

char * buffer; 
if(OpenClipboard()) 
{ 
buffer 
= (char*)GetClipboardData(CF_TEXT); 
//do something with buffer here 
//before it goes out of scope 
}
 
CloseClipboard(); 
十九、将捕捉屏幕图像到剪切版中 
void CShowBmpInDlgDlg::OnCutScreen() 
{ 
ShowWindow(SW_HIDE); 
RECT r_bmp
={0,0,::GetSystemMetrics(SM_CXSCREEN), 
::GetSystemMetrics(SM_CYSCREEN)}
;                                                                                       
HBITMAP hBitmap; 
hBitmap
=CopyScreenToBitmap(&r_bmp); 

//hWnd为程序窗口句柄 
if (OpenClipboard()) 
{ 
EmptyClipboard(); 
SetClipboardData(CF_BITMAP, hBitmap); 
CloseClipboard(); 
}
 
ShowWindow(SW_SHOW); 
}
 
HBITMAP CShowBmpInDlgDlg::CopyScreenToBitmap(LPRECT lpRect) 
{ 
//lpRect 代表选定区域 
{ 
HDC hScrDC, hMemDC; 
// 屏幕和内存设备描述表 
HBITMAP hBitmap, hOldBitmap; 
// 位图句柄 
int nX, nY, nX2, nY2; 
// 选定区域坐标 
int nWidth, nHeight; 
// 位图宽度和高度 
int xScrn, yScrn; 
// 屏幕分辨率 

// 确保选定区域不为空矩形 
if (IsRectEmpty(lpRect)) 
return NULL; 
//为屏幕创建设备描述表 
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); 
//为屏幕设备描述表创建兼容的内存设备描述表 
hMemDC = CreateCompatibleDC(hScrDC); 
// 获得选定区域坐标 
nX = lpRect->left; 
nY 
= lpRect->top; 
nX2 
= lpRect->right; 
nY2 
= lpRect->bottom; 
// 获得屏幕分辨率 
xScrn = GetDeviceCaps(hScrDC, HORZRES); 
yScrn 
= GetDeviceCaps(hScrDC, VERTRES); 
//确保选定区域是可见的 
if (nX<0) 

nX 
= 0; 
if (nY<0) 
nY 
= 0; 
if (nX2>xScrn) 
nX2 
= xScrn; 
if (nY2>yScrn) 
nY2 
= yScrn; 
nWidth 
= nX2 - nX; 
nHeight 
= nY2 - nY; 
// 创建一个与屏幕设备描述表兼容的位图 
hBitmap = CreateCompatibleBitmap 
(hScrDC, nWidth, nHeight); 
// 把新位图选到内存设备描述表中 
hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap); 
// 把屏幕设备描述表拷贝到内存设备描述表中 
BitBlt(hMemDC, 0, 0, nWidth, nHeight, 
hScrDC, nX, nY, SRCCOPY); 
//得到屏幕位图的句柄 
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap); 

//清除 
DeleteDC(hScrDC); 
DeleteDC(hMemDC); 
// 返回位图句柄 
return hBitmap; 
}
 
}
 
二十、如何将位图缩放显示在Static控件中 
//在Staic控件内显示位图 
void CShowBmpInDlgDlg::ShowBmpInStaic() 
{ 
CBitmap hbmp; 
HBITMAP hbitmap; 
//将pStatic指向要显示的地方 
CStatic *pStaic; 
pStaic
=(CStatic*)GetDlgItem(IDC_IMAGE); 
//装载资源 MM.bmp是我的一个文件名,用你的替换 
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"MM.bmp", 
IMAGE_BITMAP,
0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 

hbmp.Attach(hbitmap); 
//获取图片格式 
BITMAP bm; 
hbmp.GetBitmap(
&bm); 
CDC dcMem; 
dcMem.CreateCompatibleDC(GetDC()); 
CBitmap 
*poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp); 
CRect lRect; 
pStaic
->GetClientRect(&lRect); 
//显示位图 
pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Heigh 
t(), 
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); 
dcMem.SelectObject(
&poldBitmap); 
}
 



VOS3000线路对接、路由配置与路由分析操作教程 通过本教程,你应该已经掌握了VOS3000的线路对接、路由配置和路由分析的基本操作。添加备用路由:为常用前缀添加备用路由,确保在主路由失效时呼叫仍能正常进行。进入线路管理:点击“系统管理” -> “线路管理” -> “添加线路”。查看日志:在“系统日志”中查看路由选择情况,确保路由配置正确。失败原因:查看失败呼叫的原因(如“无应答”、“线路忙”等)。线路选择:选择之前添加的线路(如“供应商A”)。保存并启用:填写完毕后,点击“保存”并启用路由。路由名称:自定义一个名称(如“路由A”)。 阅读详情

相关推荐

【BAT32G113-仿真器及脱机烧录器教程-A3-2024/9/19】

提示:此壁纸收集于互联网,如有侵权,请联系作者!今日下班,闲来无事,就与生活中在乎的人闲日常,互相彼此增进一些友谊或爱意情愫!在座的朋友看到这里,有时间,抽抽空,多多联系一下,身边重要的人哟!四种指示灯和一个按钮:MODE->代表红色POWER->代表黄色ACTIVE->代表蓝色STATUS->代表XX(不记得了)黑色按钮:按键上电,会进入升级模式,这里我们一般默认不需要改变!仿真工具-ICE8-PRO介绍隶属于产品分支里。烧写工具-CMS-WRITER8 LITE介绍点击。

星新计划的博客 8265

vc使用技巧集

1、控件随窗口大小而自动缩放void CDVRDlg::OnSize(UINT nType, int cx, int cy) { RECT rcClient;  if (GetDlgItem(IDC_STATIC_aa))  {   GetClientRect(&rcClient);   rcClient.left+=10;   rcClient.right-=10;   rcClient.top

飞鹰 2544

第3章 zynq MII转GMII的配置和EMIO UART0的配置

本文介绍了在Vivado工程中实现MII转GMII接口适配的过程,同时配置EMIO UART0接口。主要内容包括:修改PS IP核添加UART0接口,使用concat IP核进行信号整合,调整GMII信号引脚连接,添加约束文件定义引脚映射,并最终生成bit流文件。通过详细的操作截图和TCL约束代码,展示了从硬件配置到生成可编程文件的完整流程,为Zynq平台开发提供了实用参考。

qq_36517072的博客 903

VC中的一些常用方法(20条)

VC中的一些常用方法(20条) 2003-11-3加入  来自www.youkuaiyun.com  作者佚名  0条评论  点击5383次        一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL

小发猫 3136

基于STM32的Keil5代码自动补全设置操作指南

掌握Keil5代码自动补全设置技巧,提升STM32开发效率。通过合理配置编辑器选项,实现智能提示与语法补全,让嵌入式编程更流畅,尤其适合使用keil5代码自动补全设置的开发者快速上手。

weixin_32287387的博客 762

李航《统计学习方法》课后习题答案(第2版)

李航《统计学习方法》课后习题答案(第2版) 章节 链接 第1章 统计学习及监督学习概论 点击进入 第2章 感知机 点击进入 第3章 k近邻法 点击进入 第4章 朴素贝叶斯法 点击进入 第5章 决策树 点击进入 第6章 逻辑斯谛回归与最大熵 点击进入 第7章 支持向量机 点击进入 第8章 提升方法 点击进入 第9章 EM算法及其推广 点击进入 第10章 隐马尔可夫模型 点击进入 第11章 条件随机场 点击进入     也可进入我的个人主页查看分类专栏

weixin_43646592的博客 2万+

vc中常用的20种方法

VC中常用的20种方法 打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL);  关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL,0,NULL);  关闭计算机 OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构

想飞天使 635

【OpenClaw从入门到精通】第60篇:多智能体协同实战——用“龙虾”搭建你的数字员工团队(2026企业版)

2026年AI Agent企业落地的核心趋势,正从“单Agent单兵作战”转向“多智能体协同组网”。本文以全球开发者先锋大会“百虾大战”真实案例为蓝本,深度拆解OpenClaw多智能体协同的技术内核——三层解耦架构(模型层-技能层-网关层),系统搭建包含项目经理、架构师、执行者、质量把关者的4大核心Agent团队。通过三种主流协作架构对比、全链路配置代码实操、故障自愈实战演练,结合电商新品上架虚拟场景全流程演示,解决企业多Agent部署中的权限隔离、任务协同、运维自治三大核心痛点。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 769

VC中的常用的20个方法

VC中的常用的20个方法 一、打开CD-ROMmciSendString("Set cdAudio door open wait",NULL,0,NULL);二、关闭CD_ROMmciSendString("Set cdAudio door closed wait",NULL,0,NULL);三、关闭计算机OSVERSIONINFO OsVersionInfo; //包含操作系统版

Dogous的专栏 721

UDS诊断服务基础详解之二19服务

本文主要介绍UDS统一诊断服务的19 01服务,包含状态位和故障码的解析以及19 01服务的具体说明

车载网络小D的博客 1万+

OpenStack详解、排错、经验总结

第1章 Openstack简介 1.1 计算(Compute):Nova。 一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。自Austin版本集成到项目中。 1.2 对象存储(Object Storage):Swift。 一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供

weixin_40548182的博客 1974

[转载]VC中的常用的20个方法

转载留名!原文地址:VC中的常用的20个方法作者:永不言敗一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL,0,NULL); 三、关闭计算机 OSVERSIONINFO OsVersi...

weixin_30925411的博客 87

基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能

基于uniapp的PDA扫码枪APP开发实战,实现高效RFID读取功能,uniapp整合PDA硬件的实践分享,基于uniapp的PDA端RFID批量扫描方案开发

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

VC常用的20个方法(一)

VC常用的20个方法(一) VC常用的20个方法(一) =========================================================================得到系统时间日期(使用GetLocalTime)  

欢迎您来到Peking Lin的专栏 778

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中的常用方法20条

VC中的一些常用方法(20条) 2003-11-3加入  来自www.youkuaiyun.com  作者佚名  15条评论  点击29549次        一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NU

miaoshengwu Blog 639

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: VC常用类、函数、宏
下一篇: vc中常用类型转换
0x16
博客等级 码龄20年 79粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值