VBA中如何获取当前鼠标位置

VBA中如何获取当前鼠标位置,第1张

VBA讲的是逻辑,那么从逻辑上来说

单元格的位置可以作为坐标来反馈,故可以使用Cells(SelectionRow, SelectionColumn)来确定当前光标所处的坐标,但这仅仅局限于一个单元格,cells(r,c)分别为行号和列号,通过坐标来判断光标所处位置。同样的,如果用cells(r,c+1)则可以 *** 作光标所处单元格的右数1个单元格的属性,并且在 *** 作右侧单元格时光标依然在当前的单元格上,所以如果下一条命令是cells(r+1,c)则可 *** 作下方相邻单元格,举个例子就是如果cells(r,c)是A1,cells(r,c+1)就是B1,cells(r+1,c)是A2

那么只要让textbox的值 = Cells(SelectionRow, SelectionColumn)Value 即=cells(r,c)的值,就可以让textbox显示出当前光标所处单元格的值。也就是无论你光标移动到哪里,窗体都能显示出光标所处的单元格的值

最后,你提到的“右击”,VBA无法判断左击还是右击,但无论你怎么击都属于“选中 or 激活”这个 *** 作,所以 无论你左击还是右击某个单元格,Cells(SelectionRow, SelectionColumn)都能指出当前激活单元格的坐标。

一 打开CD ROM mciSendString( Set cdAudio door open wait NULL NULL); 

二 关闭CD_ROM

mciSendString( Set cdAudio door closed wait NULL NULL);  

三 关闭计算机

OSVERSIONINFO OsVersionInfo; //包含 *** 作系统版本信息的数据结构 OsVersionInfo dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&OsVersionInfo); //获取 *** 作系统版本信息 if(OsVersionInfo dwPlatformId == VER_PLATFORM_WIN _WINDOWS) { //Windows 调用ExitWindowsEx()函数重新启动计算机 DWORD dwReserved; ExitWindowsEx(EWX_REBOOT dwReserved); //可以改变第一个参数 实现注销用户 //关机 关闭电源等 *** 作 // 退出前的一些处理程序 }  

四 重启计算机

typedef int (CALLBACK SHUTDOWNDLG)(int); //显示关机对话框函数的指针 HINSTANCE hInst = LoadLibrary( shell dll ); //装入shell dll SHUTDOWNDLG ShutDownDialog; //指向shell dll库中显示关机对话框函数的指针 if(hInst != NULL) { //获得函数的地址并调用之 ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst (LPSTR) ); (ShutDownDialog)( ); } 

五 枚举所有字体

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 ); //枚举函数 int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf LPNEWTEXTMETRIC lpntm DWORD nFontType long lparam) { // Create a pointer to the dialog window CDay Dlg pWnd = (CDay Dlg) lparam; // add the font name to the list box pWnd >m_ctlFontList AddString(lpelf >elfLogFont lfFaceName); // Return to continue font enumeration return ; } 

其中m_ctlFontList是一个列表控件变量

六 一次只运行一个程序实例 如果已运行则退出

 if( FindWindow(NULL 程序标题 )) exit( );

七 得到当前鼠标所在位置

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 ) ); if (hIcon &&hIcon!=(HICON) ) { pDC >DrawIcon( hIcon); }DestroyIcon(hIcon);

十一 窗口自动靠边程序演示

BOOL AdjustPos(CRect lpRect) {//自动靠边 int iSX=GetSystemMetrics(SM_CXFULLSCREEN); int iSY=GetSystemMetrics(SM_CYFULLSCREEN); RECT rWorkArea; BOOL bResult = SystemParametersInfo(SPI_GEORKAREA sizeof(RECT) &rWorkArea ); CRect rcWA; if(!bResult) {//如果调用不成功就利用GetSystemMetrics获取屏幕面积 rcWA=CRect( 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 SWP_NOSIZE); lpRect >OffsetRect(rcWA left iX ); AdjustPos(lpRect); return TRUE; } if(iY < rcWA top + DETASTEP && iY!=rcWA top) {//调整上 //pWnd >SetWindowPos(NULL iX rcWA top SWP_NOSIZE); lpRect >OffsetRect( 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 SWP_NOSIZE); lpRect >OffsetRect(rcWA right lpRect >right ); AdjustPos(lpRect); return TRUE; } if(iY + lpRect >Height() > rcWA bottom DETASTEP && iY !=rcWA bottom lpRect >Height()) {//调整下 //pWnd >SetWindowPos(NULL iX rcWA bottom rcW Height() SWP_NOSIZE); lpRect >OffsetRect( rcWA bottom lpRect >bottom); return TRUE; } return FALSE; } //然后在ONMOVEING事件中使用所下过程调用 CRect r=pRect; AdjustPos(&r); pRect=(RECT)r;  

十二 给系统菜单添加一个菜单项 给系统菜单添加一个菜单项需要进行下述三个步骤      首先 使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID 该ID应大于 x F而小于 xF

其次 调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中 下例给系统菜单添加两个新的

int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct) { … //Make sure system menu item is in the right range ASSERT(IDM_MYSYSITEM< xF ); //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); … } 

十三 运行其它程序

// 运行EMAIL或网址 char szMailAddress[ ]; strcpy(szMailAddress mailto: ); ShellExecute(NULL open szMailAddress NULL NULL SW_SHOWNORMAL); // 运行可执行程序 WinExec( notepad exe SW_SHOW); //运行计事本 

十四 动态增加或删除菜单

增加菜单

//添加 CMenu mainmenu; mainmenu=AfxGetMainWnd() >GetMenu(); //得到主菜单 (mainmenu >GetSubMenu ( )) >AppendMenu (MF_SEPARATOR);//添加分隔符 (mainmenu >GetSubMenu ( )) >AppendMenu(MF_STRING ID_APP_ABOUT _T( Always on &Top )); //添加新的菜单项 DrawMenuBar(); //重画菜单 

删除菜单

//删除 CMenu mainmenu; mainmenu=AfxGetMainWnd() >GetMenu(); //得到主菜单 CString str ; for(int i=(mainmenu >GetSubMenu ( )) >GetMenuItemCount() ;i>= ;i ) //取得菜 单的项数 { (mainmenu >GetSubMenu ( )) >GetMenuString(i str MF_BYPOSITION); //将指定菜单项的标签拷贝到指定的缓冲区 MF_BYPOSITION的解释见上 if(str== Always on &Top ) //如果是刚才我们增加的菜单项 则删除 { (mainmenu >GetSubMenu ( )) >DeleteMenu(i MF_BYPOSITION); break; } 

十五 改变应用程序的图标

静态更改 修改图标资源IDR_MAINFRAME 它有两个图标 一个是 的 另一个是 的 注意要一起修改 动态更改 向主窗口发送WM_SETICON消息 代码如下

HICON hIcon=AfxGetApp() >LoadIcon(IDI_ICON); ASSERT(hIcon); AfxGetMainWnd() >SendMessage(WM_SETICON TRUE (LPARAM)hIcon); 

十六 另一种改变窗口标题的方法

使用语句 CWnd m_pCWnd = AfxGetMainWnd( ) 然后 再以如下形式调用SetWindowText()函数 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()+ ); 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={ ::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 nX nY ; // 选定区域坐标 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; nX = lpRect >right; nY = lpRect >bottom; // 获得屏幕分辨率 xScrn = GetDeviceCaps(hScrDC HORZRES); yScrn = GetDeviceCaps(hScrDC VERTRES); //确保选定区域是可见的 if (nX< ) nX = ; if (nY< ) nY = ; if (nX >xScrn) nX = xScrn; if (nY >yScrn) nY = yScrn; nWidth = nX nX; nHeight = nY nY; // 创建一个与屏幕设备描述表兼容的位图 hBitmap = CreateCompatibleBitmap (hScrDC nWidth nHeight); // 把新位图选到内存设备描述表中 hOldBitmap =(HBITMAP)SelectObject(hMemDC hBitmap); // 把屏幕设备描述表拷贝到内存设备描述表中 BitBlt(hMemDC nWidth nHeight hScrDC nX nY SRCCOPY); //得到屏幕位图的句柄 hBitmap = (HBITMAP)SelectObject(hMemDC hOldBitmap); //清除 DeleteDC(hScrDC); DeleteDC(hMemDC); // 返回位图句柄 return hBitmap; } } 

二十 如何将位图缩放显示在Static控件中

lishixinzhi/Article/program/net/201311/12627

以上就是关于VBA中如何获取当前鼠标位置全部的内容,包括:VBA中如何获取当前鼠标位置、介绍Visual C++中的二十个常用方法、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9515509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存