首页 > 代码库 > VC中常见API函数用法(经验版)

VC中常见API函数用法(经验版)

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对应按钮不可见。


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.计算程序运行时间

    计算程序运行时间有很多方法,大都是计算时间差。

DWORD dwStartTime=GetTickCount();
DWORD dwElapsedTime=GetTickCount()-dwStartTime;

       上面这个代码是在不会被中断的情况下使用的。但是,在抢占式操作系统中,永远无法知道线程何时被赋予CPU时间。当取消线程的CPU时间时,就更难计算线程执行不同任务时所用的时间。我们需要一个函数,以便返回线程得到的CPU时间的数量。

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;
GetProcessTimes是个类似GetThreadTimes的函数,适用于进程中的所有线程:
BOOL GetProcessTimes(HANDLE hProcess,
   PFILETIME pftCreationTime, PFILETIME pftExitTime,
   PFILETIME pftKernelTime, PFILETIME pftUserTime);
返回的时间适用于某个进程中的所有线程,例如,返回的内核时间是所有进程的线程在内核代码中经过的全部时间的总和。

5.在任务栏而非窗口处理

   有时需要控件在排除任务栏的窗口内显示,此时只需调用   

   RECT winRc;
   SystemParametersInfo(SPI_GETWORKAREA,0,(PVOID)&winRc,0);

得到的winRc即除去了任务栏,注意此时不随任务栏位置变化而变化。


6.MFC中CString和STL中string的互换

string转CString
CString strMfc;
std::string strStl=“test“;
strMfc=strStl.c_str();
CString转string
CString strMFC;
string strSTL;
strSTL = CStringA(strMFC)