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);
}
按stop按钮,IDC_START对应按钮可见,IDC_STOP对应按钮不可见。

VC中常见API函数用法(经验版)_第1张图片


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函数用法(经验版))