VC常用操作源码总结.docx

上传人:b****6 文档编号:7738818 上传时间:2023-01-26 格式:DOCX 页数:53 大小:46.95KB
下载 相关 举报
VC常用操作源码总结.docx_第1页
第1页 / 共53页
VC常用操作源码总结.docx_第2页
第2页 / 共53页
VC常用操作源码总结.docx_第3页
第3页 / 共53页
VC常用操作源码总结.docx_第4页
第4页 / 共53页
VC常用操作源码总结.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

VC常用操作源码总结.docx

《VC常用操作源码总结.docx》由会员分享,可在线阅读,更多相关《VC常用操作源码总结.docx(53页珍藏版)》请在冰豆网上搜索。

VC常用操作源码总结.docx

VC常用操作源码总结

目录

CD-ROM1

关闭计算机1

重启计算机1

枚举所有字体1

只运行一个程序实例2

得到鼠标位置2

显示和隐藏程序菜单2

获取可执行文件的图标3

窗口自动靠边程序演示3

系统菜单添加菜单项5

动态增加或删除菜单6

改变应用程序的图标7

改变窗口标题的方法7

剪切板上通过增强元文件拷贝图像数据8

剪切板上文本数据的传送8

捕捉屏幕图像到剪切板中9

将位图缩放显示11

改变对话框中控件的颜色12

修改窗口外观14

获得应用程序主窗口的指针14

确定应用程序的路径14

获得其他程序的图标15

获得各种目录信息15

如何自定义消息16

改变窗口的缺省风格16

将窗口居中显示16

一启动就最大化和最小化17

限制窗口的大小17

创建一个字回绕的CEditView17

程序保持极小状态18

移动窗口18

重置窗口的大小18

单击窗口标题栏以外区域使窗口移动18

改变视窗的背景颜色19

防止主框窗口在其说明中显示活动的文档名20

获取有关窗口正在处理的当前消息的信息20

代码中获取工具条和状态条的指针21

使能和禁止工具条的工具提示21

如何创建一个不规则形状的窗口21

获取应用程序的实例句柄24

如何编程结束应用程序24

创建和使用无模式对话框24

怎样加载其他的应用程序25

使窗口始终在最前方26

在对话框中显示一个位图27

获取一个对话控件的指针27

改变控件的字体27

OLE控件中使用OLE_COLOR数据类型28

在不使用通用文件打开对话的情况下如何显示一个文件列表28

旋转按钮控件29

用位图显示下压按钮29

创建三态下压按钮30

如何动态创建控件30

限制编辑框中的准许字符30

向列表框中添加多个项时防止闪烁31

向编辑控件中添加文本32

访问预定义的GDI对象32

获取GDI对象的属性信息33

实现一个橡皮区矩形34

更新翻转背景颜色的文本35

创建一个具有特定点大小的字体36

如何计算一个串的大小36

显示旋转文本37

显示包含标签字符的串38

串太长时如何在其末尾显示一个省略号39

为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态39

在用户环境中如何确定系统显示元素的颜色40

查询和设置系统参数40

确定当前屏幕分辨率40

使用预定义Windows光标41

检索原先的TaskManager应用程序使用的任务列表41

确定Windows和Windows系统目录42

在哪儿创建临文件42

我怎样才能建立一个等待光标43

访问桌面窗口43

怎样用COLORREF44

在应用程序中循环浏览已经打开的文档、视图44

MFC在窗口标题栏45

CD-ROM

打开:

mciSendString("SetcdAudiodooropenwait",NULL,0,NULL);

关闭:

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);

或CreateMutx:

HANDLEm_hMutex=:

:

CreateMutex(NULL,true,_T("MBD"));

if(GetLastError()==ERROR_ALREADY_EXISTS)

{

ReleaseMutex(m_hMutex);

:

:

MessageBox(NULL,_T("应用程序已经运行!

"),_T("系统提示"),MB_OK|MB_ICONSTOP);

returnFALSE;

}

也可以用CreateThread,方法同CreateMutex

得到鼠标位置

CPointpt;

GetCursorPos(&pt);//得到位置

显示和隐藏程序菜单

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),&rWorkAre

a,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->W

idth())

{//调整右

//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&0xFFF0)==IDM_MYSYSITEM)

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)

}

现在,选择系统菜单项时用户应进行检测。

使用ClassWizard处理WM_SYSCOMMAND消息并检测用户菜单的nID参数:

voidCMainFrame:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

//Determineifoursystemmenuitemwasselected.

if((nID&0xFFF0)==IDM_MYSYSITEM)

{

//TODO-processsystemmenuitem

}

else

CMDIFrameWnd:

:

OnSysCommand(nID,lParam)

}

最后,一个设计良好的UI应用程序应当在系统菜单项加亮时在状态条显示一个帮助信息,这可以通过增加一个包含系统菜单基ID的串表的入口来实现。

动态增加或删除菜单

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;

}

改变应用程序的图标

静态更改:

修改图标资源IDR_MAINFRAME。

它有两个图标,一个是16*16的,另一个是3

2*32的,注意要一起修改。

动态更改:

向主窗口发送WM_SETICON消息.代码如下:

HICONhIcon=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类的变量。

如果需要经常修改窗口的标题(注:

控件也是窗口),应该考虑使用半文档化的函数AfxSetWindowText。

该函数在AFXPRIV.H中说明,在WINUTIL.CPP中实现,在联机帮助中找不到它,它在AFXPRIV.H中半文档化,在以后发行的MFC中将文档化。

AfxSetWindowText的实现如下:

voikAFXAPIAfxSetWindowText(HWNDhWndCtrl,LPCTSTRIpszNew)

{

itnnNewLen=Istrlen(Ipaznew)

TCHARszOld[256]

//fastchecktoseeiftextreallychanges(reduces

flashinthe

controls)

if(nNewLen>_contof(szOld)

||:

:

GetWindowText(hWndCrtl,szOld,_countof(szOld)!

=nNewLen

||Istrcmp(szOld,IpszNew)!

=0

{

//changeit

:

:

SetWindowText(hWndCtrl,IpszNew)

}

}

剪切板上通过增强元文件拷贝图像数据

下面代码拷贝通过元文件拷贝图像数据到任何应用程序,其可以放置在CView派生类的函

数中。

CMetaFileDC*m_pMetaDC=newCMetaFileDC();

m_pMetaDC->CreateEnhanced(GetDC(),NULL,NULL,"whatever");

//drawmetafile

//dowhateveryouwanttodo:

bitmaps,lines,text...

//closemetafiledcandprepareforclipboard;

HENHMETAFILEhMF=m_pMetaDC->CloseEnhanced();

//copytoclipboard

OpenClipboard();

EmptyClipboard();

:

:

SetClipboardData(CF_ENHMETAFILE,hMF);                                                                                

CloseClipboard();

//DeleteMetaFile(hMF);

deletem_pMetaDC;

剪切板上文本数据的传送

把文本放置到剪接板上:

CStringsource;

//putyourtextinsource

if(OpenClipboard())

{

HGLOBALclipbuffer;

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);

//dosomethingwithbufferhere

//beforeitgoesoutofscope

}

CloseClipboard();

捕捉屏幕图像到剪切板中

voidCShowBmpInDlgDlg:

:

OnCutScreen()

{

ShowWindow(SW_HIDE);

RECTr_bmp={0,0,:

:

GetSystemMetrics(SM_CXSCREEN),

:

:

GetSystemMetrics(SM_CYSCREEN)};                                                                                      

HBITMAPhBitmap;

hBitmap=CopyScreenToBitmap(&r_bmp);

//hWnd为程序窗口句柄

if(OpenClipboard())

{

EmptyClipboard();

SetClipboardData(CF_BITMAP,hBitmap);

CloseClipboard();

}

ShowWindow(SW_SHOW);

}

HBITMAPCShowBmpInDlgDlg:

:

CopyScreenToBitmap(LPRECTlpRect)

{

//lpRect代表选定区域

{

HDChScrDC,hMemDC;

//屏幕和内存设备描述表

HBITMAPhBitmap,hOldBitmap;

//位图句柄

intnX,nY,nX2,nY2;

//选定区域坐标

intnWidth,nHeight;

//位图宽度和高度

intxScrn,yScrn;

//屏幕分辨率

//确保选定区域不为空矩形

if(IsRectEmpty(lpRect))

returnNULL;

//为屏幕创建设备描述表

hScrDC=CreateDC("DISPLAY",NULL,NULL,NULL);

//为屏幕设备描述表创建兼容的内存设备描述表

hMemDC=CreateCompatibleDC(hScrDC);

//获得选定区域坐标

nX=lpRect->left;

nY=lpRect->top;

n

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1