111.显示系统正在运行的程序
我们可以用CreateToolhelp32Snapshot、Process32First和ProcessNext函数来实现这个功能。
CreateToolhelp32Snapshot函数是对当前系统中进程生成快照.
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
示例代码如下:
HANDLE toolhelp=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(toolhelp==NULL)return FALSE;
m_list.SetRedraw(FALSE);
PROCESSENTRY32 processinfo;
int i=0;
CString str;
BOOL start=Process32First(toolhelp,&processinfo);
while(start)
{
m_list.InsertItem(i,"");
m_list.SetItemText(i,0,processinfo.szExeFile);
str.Format("%08x",processinfo.th32ProcessID);
m_list.SetItemText(i,1,str);
str.Format("%08x",processinfo.th32ParentProcessID);
m_list.SetItemText(i,2,str);
start=Process32Next(toolhelp,&processinfo);
i++;
}
112.要实现线程同步可以利用事件对象来实现,可以用互斥对象来实现,也可以用临界区实现,还可以
用信号变量来实现线程同步。
事件对象CEvent,互斥对象CMutex,
使用临界区实现线程同步主要利用三个函数:
InitializeCriticalSection 创建临界区
EnterCriticalSection 进入临界区
LeaveCriticalSection 离开临界区
113.实现动画鼠标:
静态鼠标文件的扩展名是.ico,动画鼠标文件的扩展名是.ant,我们将鼠标文件加载到工程中,
然后通过GetCursor,CopyCursor,LoadCursorFromFile,SetSystemCursor和ShowCursor等
函数将动画鼠标显示出来。GetCursor函数是获得当前鼠标句柄,通过CopyCursor函数可以
将鼠标文件暂时保存起来,以便恢复鼠标状态。LoadCursorFromFile函数将鼠标文件加载进
来,该函数的返回值是鼠标句柄,通过SetSystemCursor函数调用该句柄,就可以将动画鼠标
设置成当前鼠标状态,通过ShowCursor函数就可以显示出来。
如下示例代码:
void CMovieMouseDlg::OnBtmouse()
{
::ShowCursor(false);
m_mycursor=::LoadCursorFromFile("mouse.ani");
HCURSOR cursor=::GetCursor();
m_oldcursor=CopyCursor(cursor);
::SetSystemCursor(m_mycursor,32512);
::ShowCursor(true);
}
void CMovieMouseDlg::OnBtre()
{
::ShowCursor(false);
::SetSystemCursor(m_oldcursor,32512);
::ShowCursor(true);
}
114.限制鼠标的移动区域
我们可以通过ClipCursor函数来实现,该函数是将鼠标限制在一定的矩形区域内,只需要调用
一个CRect对象作为参数即可。
如下示例代码:
限制鼠标
void CClipMouseDlg::OnClip(){
CRect rc;
this->GetWindowRect(rc);
ClipCursor(rc);
}
释放鼠标
void CClipMouseDlg::OnRelease(){
ClipCursor(NULL);
}
115.连接数据库:
::CoInitialize(NULL);
CString strname;
strname.Format("Provider=SQLOLEDB.1;Integrated Security=SSPI;
Persist Security Info=False;Initial Catalog=%s;Data Source=.",strsjk);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect=strname;
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
_bstr_t bstrSQL;
bstrSQL = "select*from sysobjects where xtype='U'";
CString strText;
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
while(!m_pRecordset->adoEOF)
{
strText=(char*)(_bstr_t)m_pRecordset->GetCollect("name");
m_list.AddString(strText);
m_pRecordset->MoveNext();
}
116.组合框要拉得足够大,不然数据会放不下。
117.编辑框可用edit->EnableWindow(FALSE/*TRUE*/);来使编辑框是否能用.
118.有时按回车键会把窗口自动关闭,这是因为有个IDOK的按键在作怪,IDOK可能不出现在对话框中,
这时只要重载IDOK按钮就行了,其函数体内什么都不要做。
119.我们可以用GetFocus函数来获取当前输入焦点的窗口。其相关的函数有:GetNextWindow,SetFocus
GetNextDlgTabItem等。
120.把字符串转换为double型的数据可以用strtod函数;一个double型的数据转换成字符串可以用
CString类中的Format函数,如:CString str;str.Format("%f",123.123),也可以用sprintf函数。
还可以用_fcvt函数。