⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc常用源码.htm

📁 Hex转换成CString
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0034)http://ygsoft.nease.net/vccode.htm -->
<HTML><HEAD><TITLE>VC常用源码</TITLE>
<STYLE type=text/css>BODY {
	FONT-SIZE: 9pt
}
TD {
	FONT-SIZE: 9pt
}
</STYLE>

<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff background=VC常用源码.files/qback1.gif>
<TABLE height=19749 width=800 align=center border=1>
  <TBODY>
  <TR>
    <TD width=800 height=1054><FONT color=#006633 
      size=2>//注意事项===============================================> 
      <BR>//先执行OnInitDialog()函数,然后执行构造函数!<BR>//98下没有新宋体<BR>//XP下窗口高度加8 </FONT>
      <P><FONT color=#006633 
      size=2>//滚动条处理方法**********************************************************************<BR>//1,设置范围<BR>m_spscroll.SetScrollRange(0,200);<BR>SCROLLINFO 
      si;<BR>si.cbSize=sizeof(SCROLLINFO);<BR>si.nPage=100;<BR>si.fMask=SIF_PAGE;//设置页宽<BR>m_spscroll.SetScrollInfo(&amp;si);<BR>//2,处理消息,垂直滚动条加WM_VSCROLL消息,水平加WM_HSCROLL消息<BR>void 
      CPrintView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
      <BR>{<BR>// TODO: Add your message handler code here and/or call 
      default<BR>if(pScrollBar-&gt;GetDlgCtrlID()==IDC_SCROLLBAR1)<BR>{<BR>int 
      nCurrentPos=pScrollBar-&gt;GetScrollPos();<BR>SCROLLINFO 
      si;<BR>si.fMask=SIF_PAGE;//取得页宽<BR>pScrollBar-&gt;GetScrollInfo(&amp;si);<BR>switch(nSBCode)<BR>{<BR>case 
      SB_THUMBTRACK://移动滑块<BR>case 
      SB_THUMBPOSITION:<BR>pScrollBar-&gt;SetScrollPos(nPos);//注意,设置页宽后滚动条的pos会以max/nPage倍数减少,所以在使用时注意把pos值*(max/nPage)才能得到原值<BR>break;<BR>case 
      SB_LINEUP://点向上小三角<BR>pScrollBar-&gt;SetScrollPos(nCurrentPos-1);<BR>break;<BR>case 
      SB_LINEDOWN://点向下小三角<BR>pScrollBar-&gt;SetScrollPos(nCurrentPos+1);<BR>break;<BR>case 
      SB_PAGEUP://向上一页<BR>pScrollBar-&gt;SetScrollPos(nCurrentPos-si.nPage);<BR>break;<BR>case 
      SB_PAGEDOWN://向下一页<BR>pScrollBar-&gt;SetScrollPos(nCurrentPos+si.nPage);<BR>break;<BR>}<BR>}<BR>CDialog::OnVScroll(nSBCode, 
      nPos, 
      pScrollBar);<BR>}<BR>//锁定鼠标****************************************************************************</FONT></P>
      <P><FONT color=#006633 size=2>bool pOld;<BR>CRect 
      rt;<BR>SetForegroundWindow();<BR>SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true,&amp;pOld,SPIF_UPDATEINIFILE);<BR>GetWindowRect(rt);<BR>ClipCursor(rt);<BR>//加到 
      LRESULT CLockDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
      会有意外的效果</FONT></P>
      <P><FONT color=#006633 
      size=2>//在列表字符前插入一个负数字符以修改乱码******************************************************<BR>int 
      index=m_list.GetSelectionMark();//在列表字符前插入一个负数字符以修改乱码<BR>CString 
      cs;<BR>cs=m_list.GetItemText(index,0);<BR>char 
      insert_char=-87;<BR>cs.Insert(0,insert_char);<BR>m_list.SetItemText(index,0,cs);</FONT></P>
      <P><FONT color=#006633 size=2>//在列表中添加项目最大只能显示259个字符(不含'\0') 
      *************************************************</FONT></P>
      <P><FONT color=#006633 size=2>int 
      char_length=cs.GetLength();//cs,ct为CString类对象,是要发到列表框的文本但是可能大于259字节<BR>while(char_length&gt;259)//如果大于259字节<BR>{<BR>ct=cs.Left(259);<BR>m_list.InsertItem(0,ct);//在列表中添加项目最大只能显示259个字符(不含'\0')<BR>cs=cs.Right(char_length-259);<BR>char_length=cs.GetLength();<BR>}<BR>m_list.InsertItem(0,cs);//在列表中添加项目最大只能显示259个字符(不含'\0')</FONT></P>
      <P><FONT color=#006633 
      size=2>//<==========================================================</FONT></P>
      <P><FONT color=#006633 
      size=2>//设置NT窗口的透明度*******************************************</FONT></P>
      <P><FONT color=#006633 size=2>OSVERSIONINFO 
      osv;<BR>osv.dwOSVersionInfoSize=sizeof 
      OSVERSIONINFO;<BR>GetVersionEx(&amp;osv);//取得版本信息<BR>if(osv.dwPlatformId==VER_PLATFORM_WIN32_NT)//VER_PLATFORM_WIN32_WINDOWS 
      98 
      Me用这个宏<BR>{<BR>//加入WS_EX_LAYERED扩展属性<BR>SetWindowLong(this-&gt;GetSafeHwnd(),GWL_EXSTYLE,<BR>GetWindowLong(this-&gt;GetSafeHwnd(),GWL_EXSTYLE)^0x80000);//如果多次调用下面这个函数设置,这个函数只在一个位置调用一次就行了<BR>HINSTANCE 
      hInst = LoadLibrary("User32.DLL"); <BR>if(hInst) <BR>{ <BR>typedef BOOL 
      (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); <BR>MYFUNC fun = 
      NULL;<BR>//取得SetLayeredWindowAttributes函数指针 
      <BR>fun=(MYFUNC)GetProcAddress(hInst, 
      "SetLayeredWindowAttributes");<BR>if(fun)fun(this-&gt;GetSafeHwnd(),0,<BR>200,//0 
      ~ 255<BR>2); <BR>FreeLibrary(hInst); <BR>}<BR>}</FONT></P>
      <P><FONT color=#006633 
      size=2>//字体对话框的初始化*********************************************</FONT></P>
      <P><FONT color=#006633 size=2>LOGFONT 
      lf;<BR>lf.lfHeight=-35;<BR>lf.lfCharSet=134;<BR>lf.lfWeight=400;<BR>lf.lfOutPrecision=3;<BR>lf.lfClipPrecision=2;<BR>lf.lfQuality=1;<BR>lf.lfPitchAndFamily=2;<BR>strcpy(lf.lfFaceName,"宋体");//以上初始化为宋体26号字<BR>CFontDialog 
      cf(&amp;lf);//字体<BR>cf.m_cf.rgbColors=textcolor;//颜色</FONT></P>
      <P><FONT color=#006633 
      size=2>//移动没有标题的窗口**********************************************</FONT></P>
      <P><FONT color=#006633 size=2>//1定义:<BR>CPoint just_point;<BR>//2<BR>void 
      CClockfortecherDlg::OnLButtonDown(UINT nFlags, CPoint point) <BR>{<BR>// 
      TODO: Add your message handler code here and/or call 
      default<BR>just_point=point;<BR>CDialog::OnLButtonDown(nFlags, 
      point);<BR>}<BR>//3<BR>void CClockfortecherDlg::OnMouseMove(UINT nFlags, 
      CPoint point) <BR>{<BR>// TODO: Add your message handler code here and/or 
      call default<BR>WINDOWPLACEMENT 
      wi;<BR>GetWindowPlacement(&amp;wi);<BR>if(nFlags==MK_LBUTTON)<BR>SetWindowPos(&amp;wndTop,<BR>wi.rcNormalPosition.left+(point.x-just_point.x),<BR>wi.rcNormalPosition.top+(point.y-just_point.y),<BR>0,0,SWP_NOSIZE);<BR>CDialog::OnMouseMove(nFlags, 
      point);<BR>}</FONT></P>
      <P><FONT color=#006633 
      size=2>//线程与信号量***************************************************<BR>//1,定义信号量句柄<BR>HANDLE event;<BR>//2,创建信号量<BR>event=CreateEvent(NULL, 
      TRUE, FALSE, 
      NULL);<BR>//3,创建线程,<BR>//1)定义线程函数,格式必须如下,其中lParam为AfxBeginThread的第二个参数值,可强制转化成所需类型<BR>UINT 
      WorkThreadProc(LPVOID lParam)//必须是 UINT XXX..XXX(LPVOID 
      lParam)<BR>{<BR>//代码示例WaitForSingleObject:<BR>while(1)<BR>{//-----------------------注意,如果线程间要求同步或互斥的时候,要在每一层循环体中加入WaitForSingleObject<BR>WaitForSingleObject((HANDLE)lParam, 
      INFINITE);<BR>//WaitForSingleObject的使用方法:第一个为信号量HANDLE,是CreateEvent的返回值,第二个参数为等待的毫秒数(1/1000秒)<BR>//第二个参数为INFINITE时则一直等待,直到调用SetEvent()设置信号量时函数返回;为数值(如1000)则函数在1秒后返回<BR>//(即使你没调用SetEvent()设置信号量)<BR>AfxMessageBox("fcuk");//不能用MessageBox()因为这不是在类中了...<BR>ResetEvent((HANDLE)lParam);<BR>/*重置信号量,以使WaitForSingleObject函数可以继续等待,否则(如果你已经调用过了SetEvent()设置了信号量)<BR>WaitForSingleObject函数将会立刻返回<BR>*/<BR>}</FONT></P>
      <P><FONT color=#006633 
      size=2>}<BR>//2)用AfxBeginThread创建一个WorkThreadProc的线程<BR>AfxBeginThread(WorkThreadProc,event);<BR>//4,在主程序需要的地方调用SetEvent()设置信号量启动线程 
      <BR>SetEvent(event);<BR>//-----------或者用WaitForMultipleObjects函数</FONT></P>
      <P><FONT color=#006633 size=2>static UINT __stdcall WorkThreadProc(void* 
      pThis);/*如果lParam参数为一个对话框的指针,想调用<BR>这个对话框的变量或函数那么就得这样定义线程函数,<BR>还要将WorkThreadProc改成CWait_forDlg::WorkThreadProc,<BR>这样WorkThreadProc就成为CWait_forDlg类的函数,在这个线程里就可以调用该类的变量了,<BR>注意得用_beginthreadex函数创建线程*/<BR>UINT 
      CWait_forDlg::WorkThreadProc(void * lParam)<BR>{<BR>CWait_forDlg 
      *pThis=(CWait_forDlg *)lParam;<BR>HANDLE hObjects[2];<BR>hObjects[0] = 
      pThis-&gt;event1;<BR>hObjects[1]= pThis-&gt;event2;</FONT></P>
      <P><FONT color=#006633 size=2>while(1)<BR>{<BR>DWORD dwWait = 
      WaitForMultipleObjects(2,hObjects,TRUE,INFINITE);<BR>/*第一个参数为信号量个数2,第二个为指针,第三个如果为TRUE函数要等待两个信号量都被SetEvent才返回,返回值为最后一个<BR>SetEvent的WAIT_OBJECT_0+i;而为FALSE则只要有一个被SetEvent就返回,返回值为 
      WAIT_OBJECT_0+i 即信号量在数组中的位置<BR>+WAIT_OBJECT_0 */<BR>if (dwWait == 
      WAIT_OBJECT_0) <BR>AfxMessageBox("fcuk 1 ");</FONT></P>
      <P><FONT color=#006633 size=2>//开始ping<BR>if (dwWait == WAIT_OBJECT_0 + 
      1)<BR>AfxMessageBox("fcuk 
      2");<BR>ResetEvent(hObjects[1]);<BR>ResetEvent(hObjects[0]);<BR>}<BR>}</FONT></P>
      <P><FONT color=#006633 size=2>#include &lt;process.h&gt; /* 
      调用_beginthread, _endthread 得包涵这个头文件*/<BR>_beginthreadex(NULL, <BR>0, 
      <BR>WorkThreadProc, <BR>(void*) this, <BR>0, 
      <BR>0);<BR>//第三种创建线程的方法:<BR>HANDLE thread;<BR>DWORD threadrid; 
      //线程ID<BR>DWORD WINAPI sniff(LPVOID no){} 
      //线程函数这样定义<BR>thread=CreateThread(NULL, //安全属性<BR>0, //栈大小 <BR>sniff, 
      //要创建的线程名<BR>NULL, //参数(一般为调用线程的指针)<BR>0, //创建标志<BR>&amp;threadrid); 
      //线程ID<BR>CloseHandle(thread);<BR>//操作数据库**************************************************<BR>//在stdafx.h中加入<BR>#include 
      &lt;afxdb.h&gt;<BR>//1,用类向导,建立基于CRecordset或CDaoRecordset的新子类,并选择数据源m_setComplete<BR>//2,添加<BR>if 
      ( ! m_setComplete . IsOpen () ) // if the recordset isn't already 
      open..<BR>m_setComplete . Open (); // open it<BR>m_setComplete . AddNew 
      (); // begin the add</FONT></P>
      <P><FONT color=#006633 size=2>m_setComplete . m_strCallsign = strCallsign; 
      // change the recordset members<BR>m_setComplete . m_strFrequency = 
      strFrequency;<BR>m_setComplete . m_strCity = strCity;<BR>m_setComplete . 
      m_strState = strState;<BR>m_setComplete . m_strInput = 
strInput;</FONT></P>
      <P><FONT color=#006633 size=2>m_setComplete . Update (); // complete the 
      add by doing an update<BR>m_setComplete . Close (); // close the 
      recordset<BR>//3,修改<BR>if ( ! m_setComplete . IsOpen () ) // if the 
      recordset isn't already open..<BR>m_setComplete . Open (); // open 
      it<BR>m_setComplete . Edit (); // begin the edit</FONT></P>
      <P><FONT color=#006633 size=2>m_setComplete . m_strCallsign = strCallsign; 
      // change the recordset members<BR>m_setComplete . m_strFrequency = 
      strFrequency;<BR>m_setComplete . m_strCity = strCity;<BR>m_setComplete . 
      m_strState = strState;<BR>m_setComplete . m_strInput = 
strInput;</FONT></P>
      <P><FONT color=#006633 size=2>m_setComplete . Update (); // complete the 
      add by doing an update<BR>m_setComplete . Close (); // close the 
      recordset<BR>//4,删除<BR>/* 1, DAO 数据库,不是ODBC<BR>if ( ! m_setComplete . 
      IsOpen () )<BR>m_setComplete . Open ();<BR>// cycle through the selected 
      listbox elements.<BR>strRecordIdQuery =CString ( "[ID]=" ) +CString ( 
      m_lcRepeaterList . GetItemText ( nItemIndex, 0 ) ); // put the ID into the 
      query string<BR>MessageBox(strRecordIdQuery);<BR>if ( m_setComplete . 
      FindFirst ( strRecordIdQuery ) ) { // looking for this ID in the database, 
      ID is a unique 'autonumber'<BR>m_setComplete . Delete (); // delete the 
      record<BR>    m_setComplete . MoveFirst (); // move back to the first 
      record<BR>m_bRecordsWereDeleted = TRUE; // make a note that we changed the 
      database<BR>SetDlgItemText ( IDC_DELETE_STATUS, "Repeater Deleted From 
      Database" ); // set the status field<BR>}<BR>else {<BR>// if we EVER end 
      up here, either the database is in the crapper, or I will have screwed up 
      horribly--been known to happen from time to time :) ...<BR>// so let's 
      cover our ass-ets just in case.<BR>AfxMessageBox ( "Internal 
      failure\n\nCannot find selected repeater in database\nor database is 
      corrupted", MB_ICONSTOP );<BR>}<BR>m_setComplete . Close (); // close the 
      database*/</FONT></P>
      <P><FONT color=#006633 size=2>// ODBC 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -