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。最好加入此操作
}
VC中常见API函数使用方法(经验版)的更多相关文章
- VC++中的延时函数
原文链接:http://www.educity.cn/develop/478947.html VC中提供了很多关于时间操作的函数,编写程序时我们可以跟据定时的不同精度要求选择不同的时间函数来完成定时和 ...
- VC中调用COM组件的方法(转载)
原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...
- Linux 编程中的API函数和系统调用的关系【转】
转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...
- vc中调用Com组件的方法详解
vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口: IGetRes--方法Hello(), IGet ...
- js中常见的创建对象的方法
前两天好好的把高程对象那一块又读了下,顺便写点笔记.补一句:代码都测试过了,应该没有问题的.可以直接拿到控制台跑! 1.工厂模式 function person(name, age, job) { v ...
- String类中的一些函数使用方法
最常用的就是Length()函数了,求字符串的长度 String s="";int i=s.length();i结果为0. 如果是String s=null;int i=s.len ...
- 20190723_C中使用API函数
学习关于API函数的格式 #include <stdlib.h> #include <string.h> #include <stdio.h> #pragma wa ...
- js中常见的创建对象的方法(1)
工厂模式:抽象了创建具体对象的过程 function createPerson(name, age, job){ var obj = new Object(); obj.name = name; ob ...
- JS:JS中常见的 “函数名 is not a function” 错误
js中常见的错误,例如Uncaught TypeError: x is not a function 其原因除了函数本身有错之外,还有一种很奇怪的情况:函数本身没有错,但是运行时就是不能正常运行.这种 ...
随机推荐
- 使用systemctl命令管理服务mysql
启动mysql systemctl start mysqld.service 停止mysql systemctl stop mysqld.service 重启mysql systemctl resta ...
- 1.ruby基本格式
1.ruby对于空格是敏感的,很像shell 如:a + b 解释成 a+b(这是两个局部变量) a +b 解释成 a(+b) (这是一个方法调用) 2.在ruby中一行怎么才算结束? Ruby解释分 ...
- Python之注册表增删改查(干货)
在Windows平台下,对注册表的增删改查的需求比较多,微软提供了很多用于访问,修改注册表等的API,我们可以使用诸如bat,或者C++等各种方式去访问修改注册表.无所不能的python下如何完成这些 ...
- mysql5.7.23版本环境配置
亲身实践安装mysql,用时居然花费了三个小时,在有那么多教程的情况下,依然在不该花费时间的路上浪费了太多时间.希望这篇文章能够帮助大家少走弯路~~ 1.下载我下载的是64位. 2.解压下载之后,我选 ...
- GTY's birthday gift【矩阵快速幂】
题目大意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次,每次可以向可重集中加入一个数 a+b ...
- linux和windows下分别如何查看电脑是32位的还是64位?
WINDOWS下查看的方法: 方法一. 在开始→运行中输入“winver”,如果您的系统是64位的,会明确标示出“x64 edition”. 方法二.(推荐) 在cmd窗口中输入systeminfo回 ...
- 创建mavenweb项目
1.创建maven项目 2.创建maven-web项目 3.将webapp文件夹复制到maven项目下,src路径下
- Linux(9):期中架构(1)--- 集群构架 & 备份服务
01. 了解集群架构服务器组成 基本架构组成:(用于让用户进行访问) # 前端服务部分: 1)顾客-用户 是一个访问者,请求访问网站页面 2)保安-防火墙设备 对访问架构用户进行策略控制,正常访问网站 ...
- 【Tyvj1982】武器分配(费用流)
题意:有N个人要从A个物品中各取一个,B个物品中各取一个,选取第i个A类物品和第j个B类物品的费用是(a[i]-b[j])^2 求最小总花费 n<=a,b<=80 a[i],b[i]< ...
- 标准C程序设计七---27
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...