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 其原因除了函数本身有错之外,还有一种很奇怪的情况:函数本身没有错,但是运行时就是不能正常运行.这种 ...
随机推荐
- url编码&&PHP大法&&这个看起来有点简单&&HTML 中有用的字符实体
URL编码 Url编码通常也被称为百分号编码(Url Encoding,also known as percent-encoding),是因为它的编码方式非常简单,使用%百分号加上两位的字符——012 ...
- FX3 DMA生产者消费者ID代表的含义
在开发FX3的时候,觉得赛普拉斯的库注释太少,很多时候无法理解代码含义.由于使用DMA,需要理解DMA生产者消费者代表的含义,经过多方查找,决定记录下来. 在cyu3dma.h中对SocketID进行 ...
- PAT Basic 1030
1030 完美数列 给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数 ...
- PHP 微信分享(及二次分享)
js部分: <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> &l ...
- 本机机器ssh docker容器
https://blog.csdn.net/u010324465/article/details/77184506 1.在docker中安装openssh-server 2.sudo /etc/ini ...
- git (unable to update local ref )
https://stackoverflow.com/questions/2998832/git-pull-fails-unable-to-resolve-reference-unable-to-upd ...
- 【01】markdown特殊说明
[01]说明 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令 ...
- Decorator(装饰器模式)
装饰器模式允许我们根据运行时不同的情景动态地为某个对象调用前后添加不同的行为动作. <?php class HtmlTemplate { // any parent class methods ...
- Leetcode 329.矩阵中的最长递增路径
矩阵中的最长递增路径 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: n ...
- [BZOJ2342] [Shoi2011]双倍回文(manacher)
传送门 manacher...... 先跑一边manacher是必须的 然后枚举双倍回文串的对称轴x 把这个双倍回文串分成4段,w wR w wR 发现,只有当 y <= x + p[x] / ...