VC++问题集11

 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函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值