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 其原因除了函数本身有错之外,还有一种很奇怪的情况:函数本身没有错,但是运行时就是不能正常运行.这种 ...
随机推荐
- 对freescale的mfgtool的ucl2.xml的理解
转载于此:http://blog.csdn.net/bugouyonggan/article/details/8664898 对于Freescale MFG编程工具控制文件ucl2.xml的分析 为了 ...
- 杭电 1159 Common Subsequence
Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...
- spring mvc3 配置<mvc:resources/> @Controller失效
因为配置了:<mvc:resources location=" " mapping="" /> ,@Controller失效访问404 这里还 ...
- Linux下安装MySQLdb模块(Python)
一.MySQLdb-python模块 https://pypi.python.org/pypi/MySQL-python ` 二.安装依赖包 yum -y install python-devel m ...
- 使用 RMAN 同步数据库
使用 RMAN同步数据库 使用 RMAN 同步数据库 一.概述 二 操作步骤 (一).把生产库置为归档模式 (二).启动rman做数据库0级备份 (三).修改生产库数据库到未归档 (四).拷贝备份集到 ...
- IDEA避免JAVA文件自动引入import.*包
Intellij Idea工具在java文件中怎么避免import java.utils.*这样的导入方式,不推崇导入*这样的做法!Editor->Code Style->Java-> ...
- 在使用Cocos2d-JS 开发过程中需要用到的单体设计模式
JavaScript 单体模式的一种实现 T.getInstance = (function () { var instance = null; return function () { return ...
- 【SVN】http和https的区别
导读:输入网址的时候,经常输入http://什么什么的,但http是什么,一直都不知道.然后,这回在SVN的学习中,又出现了http和https,而且还有说https的8443端口相对优越,我就在想, ...
- 【Kubernetes】深入解析声明式API
在Kubernetes中,一个API对象在Etcd里的完整资源路径,是由:Group(API组).Version(API版本)和Resource(API资源类型)三个部分组成的. 通过这样的结构,整个 ...
- 九度oj 1011
题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= ...