📄 vc常用源码.htm
字号:
<!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(&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->GetDlgCtrlID()==IDC_SCROLLBAR1)<BR>{<BR>int
nCurrentPos=pScrollBar->GetScrollPos();<BR>SCROLLINFO
si;<BR>si.fMask=SIF_PAGE;//取得页宽<BR>pScrollBar->GetScrollInfo(&si);<BR>switch(nSBCode)<BR>{<BR>case
SB_THUMBTRACK://移动滑块<BR>case
SB_THUMBPOSITION:<BR>pScrollBar->SetScrollPos(nPos);//注意,设置页宽后滚动条的pos会以max/nPage倍数减少,所以在使用时注意把pos值*(max/nPage)才能得到原值<BR>break;<BR>case
SB_LINEUP://点向上小三角<BR>pScrollBar->SetScrollPos(nCurrentPos-1);<BR>break;<BR>case
SB_LINEDOWN://点向下小三角<BR>pScrollBar->SetScrollPos(nCurrentPos+1);<BR>break;<BR>case
SB_PAGEUP://向上一页<BR>pScrollBar->SetScrollPos(nCurrentPos-si.nPage);<BR>break;<BR>case
SB_PAGEDOWN://向下一页<BR>pScrollBar->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,&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>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(&osv);//取得版本信息<BR>if(osv.dwPlatformId==VER_PLATFORM_WIN32_NT)//VER_PLATFORM_WIN32_WINDOWS
98
Me用这个宏<BR>{<BR>//加入WS_EX_LAYERED扩展属性<BR>SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,<BR>GetWindowLong(this->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->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(&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(&wi);<BR>if(nFlags==MK_LBUTTON)<BR>SetWindowPos(&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->event1;<BR>hObjects[1]= pThis->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 <process.h> /*
调用_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>&threadrid);
//线程ID<BR>CloseHandle(thread);<BR>//操作数据库**************************************************<BR>//在stdafx.h中加入<BR>#include
<afxdb.h><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 + -