VC中常见API函数使用方法(经验版)
***********************************************声明*************************************************************************************
原创作品,出自 “晓风残月xj” 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj)。
因为各种原因。可能存在诸多不足。欢迎斧正!
*******************************************************************************************************************************************
1.设置对话框为无边框方法
ModifyStyle(WS_CAPTION | WS_THICKFRAME, 0, SWP_FRAMECHANGED);
2.设置控件灰色与不灰色
void CMthread1Dlg::OnStop()
{ // TODO: Add your control notification handler code here m_bRun = FALSE; GetDlgItem(IDC_START)->EnableWindow(TRUE); GetDlgItem(IDC_STOP)->EnableWindow(FALSE); }按stopbutton,IDC_START相应button可见,IDC_STOP相应button不可见。
3.模态对话框与非模态对话框
模式对话框创建后,程序的其它窗体便不能进行操作。必须将该窗体关闭后,其它窗体才干进行操作。
而非模式对话框则无需这样,它不强制要求用户马上反应,而是与其它窗体同一时候接受用户操作。模式对话框就是不处理它就没法处理父窗体。而非模式对话框就是不用先处理此对话框也能够处理父窗体。
A、创建模态对话框
CMyDemoDlg dlg; dlg.DoModal();
B、创建非模态对话框
CDeviceDomeDlg *tmpDlg; tmpDlg=new CDeviceDomeDlg; tmpDlg->Create(IDD_DEVICE_DIALOG1,this); //创建一个非模态对话框 tmpDlg->MoveWindow( CRect(iter->left,iter->top,iter->right,iter->bottom) );//设置对话框位置 tmpDlg->ShowWindow(SW_SHOW); //显示非模态对话框 dlg.push_back(tmpDlg);
4.计算程序执行时间
计算程序执行时间有非常多方法,大都是计算时间差。
<span style="font-size:14px;">DWORD dwStartTime=GetTickCount(); DWORD dwElapsedTime=GetTickCount()-dwStartTime;</span>
上面这个代码是在不会被中断的情况下使用的。
可是,在抢占式操作系统中,永远无法知道线程何时被赋予CPU时间。当取消线程的CPU时间时,就更难计算线程运行不同任务时所用的时间。我们须要一个函数。以便返回线程得到的CPU时间的数量。
<span style="font-size:14px;">BOOL GetThreadTimes(HANDLE hThread, PFILETIME pftCreationTime, PFILETIME pftExitTime, PFILETIME pftKernelTime, PFILETIME pftUserTime); FILETIME ftKernelTimeStart, ftKernelTimeEnd; FILETIME ftUserTimeStart, ftUserTimeEnd; FILETIME ftDummy; __int64 qwKernelTimeElapsed, qwUserTimeElapsed, qwTotalTimeElapsed; GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeStart, &ftUserTimeStart); GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeEnd, &ftUserTimeEnd); qwKernelTimeElapsed = FileTimeToQuadWord(&ftKernelTimeEnd) - FileTimeToQuadWord(&ftKernelTimeStart); qwUserTimeElapsed = FileTimeToQuadWord(&ftUserTimeEnd) - FileTimeToQuadWord(&ftUserTimeStart); qwTotalTimeElapsed = qwKernelTimeElapsed + qwUserTimeElapsed; </span>GetProcessTimes是个类似GetThreadTimes的函数,适用于进程中的全部线程:
<span style="font-size:14px;">BOOL GetProcessTimes(HANDLE hProcess, PFILETIME pftCreationTime, PFILETIME pftExitTime, PFILETIME pftKernelTime, PFILETIME pftUserTime); 返回的时间适用于某个进程中的全部线程,比如。返回的内核时间是全部进程的线程在内核代码中经过的全部时间的总和。</span>
5.在任务栏而非窗体处理
有时须要控件在排除任务栏的窗体内显示,此时仅仅需调用
<span style="font-size:14px;"> RECT winRc; SystemParametersInfo(SPI_GETWORKAREA,0,(PVOID)&winRc,0);</span>
得到的winRc即除去了任务栏,注意此时不随任务栏位置变化而变化。
6.MFC中CString和STL中string的互换
<span style="font-size:14px;">string转CString CString strMfc。 std::string strStl=“test“; strMfc=strStl.c_str(); CString转string CString strMFC; string strSTL; strSTL = CStringA(strMFC)</span>
7.GetModuleHandle()函数使用方法
HMODULEGetModuleHandle(LPCTSTRlpModuleName);获取一个特定的应用程序或动态链接库的模块句柄,且这个模块必须已经被载入到调用者的进程空间中。
參数说明:lpModuleName 模块名称
返回值:如运行成功成功。则返回模块句柄;零表示失败,并通过GetLastError获得错误信息.
GetModuleHandle(NULL);这将返回自身应用程序句柄。
8.对话框支持文件拖拽
第一步、须要加入消息响应WM_DROPFILES
1)、假设是MFC,操作例如以下:对话框上点击右键,选择Properties->Extended Styles,点选Accept files选项就可以。
2)、假设不是MFC,如ATL、Win32、金山卫士开源码等。操作例如以下:
LONG dwLong = GetWindowLong(GWL_EXSTYLE); SetWindowLong(GWL_EXSTYLE, dwLong|WS_EX_ACCEPTFILES);第二步、文件拖拽消息响应函数
void CMainDlg::OnDropFiles(HDROP hDropInfo) { UINT count; TCHAR strFilePath[MAX_PATH + 1] ; count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0); if(count) { for(UINT i=0; i<count; i++) //支持多个文件的拖拽操作 { int pathLen = DragQueryFile(hDropInfo, i, strFilePath, sizeof(strFilePath)); //strFilePath存储的是当前文件的完整路径+文件名称 //此处能够加入待处理的操作。完毕应用程序的功能 } } DragFinish(hDropInfo); //CDialog::OnDropFiles(hDropInfo);//假设是MFC。最好加入此操作 }
9、获取当前进程已载入模块的文件的完整路径。该模块必须由当前进程载入
如以下的C:\Users\jimjxu\Desktop\我的程序\1.cpp源程序运行起来就是 "szPath = C:\Users\jimjxu\Desktop\我的程序\Debug\1.exe"
#include <windows.h> #include <stdio.h> BOOL GetExactFileName() { TCHAR szPath[MAX_PATH]; if( !GetModuleFileName( NULL, szPath, MAX_PATH ) ) { printf("GetModuleFileName failed (%d)\n", GetLastError()); return FALSE; } printf("szPath = %s\n", szPath); return TRUE; } int main(int argc, TCHAR* argv[]) { GetExactFileName(); return 0; }
10、对话框支持文件拖拽
第一步、须要加入消息响应WM_DROPFILES
1)、假设是MFC,操作例如以下:对话框上点击右键,选择Properties->Extended Styles,点选Accept files选项就可以。
2)、假设不是MFC。如ATL、Win32、金山卫士开源码等,操作例如以下:
LONG dwLong = GetWindowLong(GWL_EXSTYLE); SetWindowLong(GWL_EXSTYLE, dwLong|WS_EX_ACCEPTFILES);
第二步、文件拖拽消息响应函数
void CMainDlg::OnDropFiles(HDROP hDropInfo) { UINT count; TCHAR strFilePath[MAX_PATH + 1] ; count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0); if(count) { for(UINT i=0; i<count; i++) //支持多个文件的拖拽操作 { int pathLen = DragQueryFile(hDropInfo, i, strFilePath, sizeof(strFilePath)); //strFilePath存储的是当前文件的完整路径+文件名称 //此处能够加入待处理的操作,完毕应用程序的功能 } } DragFinish(hDropInfo); //CDialog::OnDropFiles(hDropInfo);//假设是MFC。最好加入此操作 }
相关文章
- joinColumns和inverseJoinColumns的使用方法
- js下判断 iframe 是否加载完成的完美方法
- linux中sed的使用方法具体解释(对行数据的加入、删除等)
- Python3 多进程共享变量实现方法(亲测)
- php 中实现页面跳转的方法
- 微信小程序 - text 标签设置 text-indent 不起作用解决方法
- 一种有趣值得分享的GUI测试建模方法
- ECS API中Signature错误的排查方法
- 试用 Tomcat7.x 与 Tomcat6.x 的明显不同 + Context 填写方法 + 默认应用配置方法 (zhuan)
- 在C++中可以用3种方法访问一个字符串
- 远程桌面由于以下原因之一无法连接到远程计算机解决方法(亲测)
- this class is not key value coding-compliant for the key XXX错误的解决方法
- DRF 3.x View and API 视图和API应用使用示例和配置方法
- Django实现API配合JWT进行用户验证的方法
- laravel 5.5 api接口开发:JWT安装+实现API token 认证
- 浅析setup如何通过ref获取子组件实例中的DOM结构/数据/方法及获取子组件实例数据都是空的处理(defineExpose API 的使用)、Vue3模板引用refs、在组合式API中使用template refs、for循环中如何获取及重置refs、如何监听模板引用
- 基于unity物体移动的方法API的总结-GIF图文详解
- Codeforces C. Pattern 412 解决问题的方法
- JS学习第3天——Web API之DOM(获取元素、操作元素、节点操作、insertAjacentHtml()方法、双击禁止选中文字、添加删除留言案例)
- 使用flink Table &Sql api来构建批量和流式应用(2)Table API概述
- OpenWrt 路由器过滤广告的N种方法