??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲狠狠婷婷综合久久久久,久久99毛片免费观看不卡,国产精品免费看久久久香蕉http://m.shnenglu.com/amazon/category/8952.htmlzh-cnSat, 01 Oct 2011 07:42:49 GMTSat, 01 Oct 2011 07:42:49 GMT60"~程之美 - CPU占用?ȝhttp://m.shnenglu.com/amazon/archive/2009/08/31/94885.htmlq风q风Mon, 31 Aug 2009 07:49:00 GMThttp://m.shnenglu.com/amazon/archive/2009/08/31/94885.htmlhttp://m.shnenglu.com/amazon/comments/94885.htmlhttp://m.shnenglu.com/amazon/archive/2009/08/31/94885.html#Feedback0http://m.shnenglu.com/amazon/comments/commentRss/94885.htmlhttp://m.shnenglu.com/amazon/services/trackbacks/94885.html下面是一些了解当前线E?q程/pȝ效能的APIQ所有描q来自MSDN文档Q具体如下:

DWORD GetTickCount(void);
/*
Header: Winbase.h, include Windows.h
Link Library: Kernel32.lib
DLL: Dernel32.dll
Details:
The GetTickCount function retrieves the number of milliseconds that have elapsed since the system was started. It is limited to the resolution of the system timer. To obtain the system timer resolution, use the GetSystemTimeAdjustment function.
Remarks:
The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days.
Example Code:
The following example demonstrates how to use a this function to wait for a time interval to pass. Due to the nature of unsigned arithmetic, this code works correctly if the return value wraps one time. If the difference between the two calls to GetTickCount is more than 49.7 days, the return value could wrap more than one time and this code will not work.
DWORD dwStart = GetTickCount();
if( GetTickCount() - dwStart >= TIMELIMIT )
    Cancel();
*/

void Sleep(DWORD dwMilliseconds);
/*
Header: Winbase.h, include Windows.h
Library: Kernel32.lib
DLL: Kernel32.dll
Details:
This function suspends the execution of the current thread for a specified interval.
Parameters:
Specifies the time, in milliseconds, for which to suspend execution.
A value of zero causes the thread to relinquish the remainder of its time slice to any other thread of equal priority that is ready to run. If no other threads of equal priority are ready to run, the function returns immediately, and the thread continues execution.
A value of INFINITE causes an infinite delay.
Remarks:
You have to be careful when using Sleep and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages. Message broadcasts are sent to all windows in the system. If you have a thread that uses Sleep with infinite delay, the system will deadlock. Therefore, if you have a thread that creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than Sleep.
*/

DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
/*
Header: Winbase.h, include Windows.h
Library: Kernel32.lib
DLL: Kernel32.dll
Details:
The WaitForSingleObject function returns when the specified object is in the signaled state or the time-out interval elapses.
Parameters:
hHandle:
Handle to the object. If this handle is closed while the wait is still pending, the function's behavior is undefined.
dwMilliseconds:
Time-out interval, in milliseconds. The function returns if the interval elapses, even if the object's state is nonsignaled. If dwMilliseconds is zero, the function tests the object's state and returns immediately. If dwMilliseconds is INFINITE, the function's time-out interval never elapses.
Return Values:
If the function succeeds, the return value indicates the event that caused the function to return. It can be one of the following values.
WAIT_ABANDONEDQ当hHandle为mutexӞ如果拥有mutex的线E在l束时没有释放核心对象会引发此返回倹{?br>WAIT_OBJECT_0Q核心对象已被激z?br>WAIT_TIMEOUTQ等待超?br>WAIT_FAILEDQ出现错误,可通过GetLastError得到错误代码
Remarks:
The WaitForSingleObject function checks the current state of the specified object. If the object's state is nonsignaled, the calling thread enters the wait state. It uses no processor time while waiting for the object state to become signaled or the time-out interval to elapse.
The function modifies the state of some types of synchronization objects. Modification occurs only for the object whose signaled state caused the function to return. For example, the count of a semaphore object is decreased by one.
*/

HRESULT GetProcessorInfo(WORD* pwProcessorArchitectureOut, WORD* pwProcessorLevelOut);
/*
DLL: Clcfgsrv.dll
Details:
The GetProcessorInfo method retrieves the processor information for the node.
Parameters:
pwProcessorArchitectureOut: Processor architecture information.
pwProcessorLevelOut: Processor level information.
*/

DWORD_PTR SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);
/*
Header: Winbase.h, include Windows.h
DLL: Kernel32.dll
Library: Kernel32.lib
Details:
The SetThreadAffinityMask function sets a processor affinity mask for the specified thread.
Return Values:
If the function succeeds, the return value is the thread's previous affinity mask. Windows Me/98/95: The return value is 1. To succeed, hThread must be valid and dwThreadAffinityMask must be 1.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks:
A thread affinity mask is a bit vector in which each bit represents the processors that a thread is allowed to run on.
A thread affinity mask must be a proper subset of the process affinity mask for the containing process of a thread. A thread is only allowed to run on the processors its process is allowed to run on.
*/

DWORD timeGetTime(VOID);
/*
Header: Mmsystem.h, include Windows.h
Library: Winmm.lib
Details:
The timeGetTime function retrieves the system time, in milliseconds. The system time is the time elapsed since Windows was started.
Remarks:
The only difference between this function and the timeGetSystemTime function is that timeGetSystemTime uses the MMTIME structure to return the system time. The timeGetTime function has less overhead than timeGetSystemTime.
Note that the value returned by the timeGetTime function is a DWORD value. The return value wraps around to 0 every 2^32 milliseconds, which is about 49.71 days. This can cause problems in code that directly uses the timeGetTime return value in computations, particularly where the value is used to control code execution. You should always use the difference between two timeGetTime return values in computations.
*/

MMRESULT timeGetSystemTime(LPMMTIME pmmt, UINT cbmmt);
/*
Header: Mmsystem.h, include Windows.h
Library: Winmm.lib
Details:
The timeGetSystemTime function retrieves the system time, in milliseconds. The system time is the time elapsed since Windows was started. This function works very much like the timeGetTime function. See timeGetTime for details of these functions' operation.
Parameters:
pmmt:  Pointer to an MMTIME structure.
cbmmt: Size, in bytes, of the MMTIME structure.
Return Values:
Returns TIMERR_NOERROR. The system time is returned in the ms member of the MMTIME structure.
*/

在用Windows.h中定义:
typedef unsigned long  DWORD;
typedef unsigned char  BYTE;
typedef unsigned short WORD;
typedef unsigned int UINT;



q风 2009-08-31 15:49 发表评论
]]>
VC中ListCtrll验ȝ【{载?/title><link>http://m.shnenglu.com/amazon/archive/2008/11/29/68159.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Sat, 29 Nov 2008 06:27:00 GMT</pubDate><guid>http://m.shnenglu.com/amazon/archive/2008/11/29/68159.html</guid><wfw:comment>http://m.shnenglu.com/amazon/comments/68159.html</wfw:comment><comments>http://m.shnenglu.com/amazon/archive/2008/11/29/68159.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/amazon/comments/commentRss/68159.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/amazon/services/trackbacks/68159.html</trackback:ping><description><![CDATA[ListCtrl在工作中Q常常用刎ͼ也常常看到大家发帖问怎么用这个控Ӟ故ȝ了一下自q使用l验Q以供参考用?br><br>先注明一下,q里Q我们用m_listctrl来表CZ个CListCtrl的类对象Q然后这里我们的ListCtrl都是report形式Q至于其他的如什么大图标Q小图标的暂时不Ԍ毕竟report是大众话的用。其ơ,我们q里用条ƾ一Q条ƾ二来描q第一点,W二点,q个是参照《Effective C++》的叫法Q俺觉得q么叫比较COOL :)<br><br><strong>条款一Q设|ListCtrl的风?/strong><br><br>在CSDN上常常看到有人问怎么讄风格的,他们ListCtrl的样子是一个列表,有横条和竖条分界U,然后选中一行,要整一行都选中Q而不是只有某一列被选中Q等{,q里l一个比较全面的讄Ҏ?br><br>//获得原有风格<br>DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE); <br>dwStyle &= ~(LVS_TYPEMASK);<br>dwStyle &= ~(LVS_EDITLABELS);<br>//讄新风?br>SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle, |LVS_REPORT | LVS_NOLABELWRAP | LVS_SHOWSELALWAYS);<br>//讄扩展风格<br>DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES;<br>ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles, styles );<br><br>其中LVS_EX_FULLROWSELECT 是前面说得整行选中<br>LVS_EX_GRIDLINES |格U(只适用与report风格的listctrlQ?br>LVS_EX_CHECKBOXES 前面加个checkbox<br>pListCtrl->SetExtendedStyle( m_listctrl.GetExtendedStyle() | LVS_EX_SUBITEMIMAGES);<br><br>q也是一个很重要的属性,q样的话Q可以在列表中加ICONQ记得windows的Q务管理器吗,你想做得那样Q这个属性也要加哦,q个我以后会讲的?br><br><strong>条款二:加入列头<br><br></strong>q是一个比较实质的东西Q给列表框分列,然后加上列头Q代码说话,来了<br><br>TCHAR rgtsz[2][10] = {_T("列头1"), _T("列头2")};<br>LV_COLUMN lvcolumn;<br>CRect rect;<br>m_listctrl.GetWindowRect(&rect);<br>for(int i=0;i<2;i++)<br>{<br> lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;<br> lvcolumn.fmt = LVCFMT_LEFT;<br> lvcolumn.pszText = rgtsz[i];<br> lvcolumn.iSubItem = i;<br> lvcolumn.iOrder = i;<br> if(i==0)<br> {<br>       lvcolumn.cx = rect.Width()*3/5 ; <br> }<br> else<br>       lvcolumn.cx = rect.Width()*2/5;<br><br>    m_listctrl.InsertColumn(i, &lvcolumn);<br>}<br><br>q是插入两列的做法,你要插入20列?Q随便你Q依L葫芦~~<br>lvcolumn.mask 中那个mask可以有各U属性,具体ȝmsdn吧,<br><br><strong>条款三:把记录,插入列表框中<br><br></strong>int nIndex = m_listctrl.GetItemCount();<br>LV_ITEM   lvitemAdd = {0};<br>lvitemAdd.mask = LVIF_TEXT;<br>lvitemAdd.iItem = nIndex ;<br>lvitemAdd.iSubItem = 0;<br>lvitemAdd.pszText =_T("毛毛1");;<br><br>if (m_listctrl.InsertItem(&lvitemAdd) != -1)<br>{ <br>   LV_ITEM lvitem = {0};<br>   lvitem.mask = LVIF_TEXT;<br>   lvitem.iItem = nIndex ;<br>   lvitem.iSubItem = 1;<br><br>   lvitem.pszText =_T("毛毛2");<br>   m_listctrl.SetItem(&lvitem);   <br>}<br><br>nIndex 是当前的行数Q然后把新的一行,插在最下面Q?br><br><strong>条款四:l列表中插入图标<br><br></strong>在report格式中,也能插入图标<br>l箋代码说话<br><br>m_image是个CImageList对象<br>m_image.Create(16,16, TRUE|ILC_COLOR24, 3, 1);<br>m_listctrl.SetImageList(&m_image,LVSIL_SMALL);<br><br>然后调用CImageList的成员函数int CImageList::Add( HICON hIcon );<br>把ICON插入到imagelistQ?br>然后在插入记录的时?br><br>lvitemAdd.mask = LVIF_TEXT; <br>lvitemAdd.mask = LVIF_TEXT|LVIF_IMAGE<br><br>然后d一个lvitemAdd.iImage = n;<br>q个n是imagelist中的序号Q表C是具体的哪一个图标,list么,呵呵<br><br><strong>条款五:插入记录时用额外的信息QlParam 的?br><br></strong>有时候,你想对于某一行,加入一些额外的信息Q那么就可以使用q个lParam<br>msdn是这么描q的Specifies the 32-bit value of the item<br>我上ơ是Z在某一行加入一个信息,H口句柄Q然后是q么加的Q?br><br>int nIndex = m_listctrl.GetItemCount();<br>LV_ITEM   lvitemAdd = {0};<br>lvitemAdd.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;<br>lvitemAdd.iItem = nIndex ;<br>lvitemAdd.iSubItem = 0;<br>lvitemAdd.pszText =_T("毛毛1");;<br>lvitemAdd.iImage = n;<br>lvitemAdd.lParam = (LPARAM)hwnd;(某个H口的窗口句?<br><br>if (m_listctrl.InsertItem(&lvitemAdd) != -1)<br>{ <br>   LV_ITEM lvitem = {0};<br>   lvitem.mask = LVIF_TEXT;<br>   lvitem.iItem = nIndex ;<br>   lvitem.iSubItem = 1;<br><br>   lvitem.pszText =_T("毛毛2");<br>   m_listctrl.SetItem(&lvitem);   <br>}<br><br>okQ这是一个比较全的例子的Q又揺CONQ又使用PARAM?br><br><strong>条款六 Q 点击列表框,获取选中行信?br><br></strong>响应NM_CLICK消息Q如果你有MSDNQ可以看刎ͼ有专门关于listview的NM_CLICK的介l?br><br>void CMyDlg::OnItemClick(NMHDR* pNMHDR, LRESULT* pResult) <br>{<br>   // TODO: Add your control notification handler code here<br>   int nItem = -1;<br><br>   LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;<br>   if(lpNMItemActivate != NULL)<br>   {<br>      nItem = lpNMItemActivate->iItem;<br>   }<br>}<br><br>现在nItem是点击选中那行的index了,有了indexQ获取那行的信息q难?br>懒汉_难,因ؓ你还没讲Q晕Q那ql说<br><br><strong>条款七: Ҏ行的indexQ获取该行的信息<br><br></strong>直接上代码吧<br><br>LV_ITEM lvitem = {0};<br>lvitem.iItem = nIndex;<br>lvitem.iSubItem = 0;<br>lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;<br>m_listctrl.GetItem(&lvitem)<br><br>q样Q就把nindex,W一列的信息取出来了Q包括刚才我们加入的ICON,和那个额外信息(H口句柄Q,比如我要获取H口句柄Q就可以hwnd = (HWND)lvitem.lParam;<br>mask 用来指明你想获取那些信息<br>具体可以查msdn中LVITEM Structure的定义和CListCtrl::GetItem<br><br><strong>条款八:用程序选中某一行,使之选中<br><br></strong>选中之 <br>m_listctrl.SetItemState(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);<br>不选中Q取消选中?br>m_listctrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);<br><br><strong>条款九:获取当前所有选中的行Q多选)<br><br></strong>q个Q俺比较懒了,抄msdn的代码吧Q反正很?br><br>// CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem<br>(IDC_YOURLISTCONTROL);<br>ASSERT(pListCtrl != NULL); <p>POSITION pos = pList->GetFirstSelectedItemPosition();<br>if (pos == NULL)<br>   TRACE0("No items were selected!\n");<br>else<br>{<br>   while (pos)<br>   {<br>      int nItem = pList->GetNextSelectedItem(pos);<br>      TRACE1("Item %d was selected!\n", nItem);<br>      // you could do your own processing on nItem here<br>   }<br>}<br><br><strong>条款十:删除条款九中选中的行<br><br></strong>q个相对前面九个条款是比较麻烦的Q因为如果你要删除多行的话,往往要出错。比如,我现在要删除W?行和W?行(列表的行序列是从0开始的Q?br>那么好啊。我来删?br><br>m_listctrl.DeleteItem(0)<br>m_listctrl.DeleteItem(1)<br><br>恭喜你,错了Q我好开心啊 Q)<br>因ؓ你删除第0行以后,下面的行会往上移Q那么原来的W?行就变成了第0行,那么你再 m_listctrl.DeleteItem(1)Q那么删除的是原来的W2行,真麻烦,<br>所以,只有从下往上删Q才是安全的Q先删的Q不会媄响后面的操作Q?br><br>m_listctrl.DeleteItem(1)<br>m_listctrl.DeleteItem(0)<br><br>但有时候,我们也不知道要删除哪些行Q只知道要删除选中的那些行Q像条款九中的那?br>如果我们q是?br><br>POSITION pos = m_listctrl.GetFirstSelectedItemPosition();<br>if (pos == NULL)<br>   TRACE0("No items were selected!\n");<br>else<br>{<br>   while (pos)<br>   {<br>      int nItem = m_listctrl.GetNextSelectedItem(pos);<br>      m_listctrl.DeleteItem(nItem );</p> <p>   }<br>}<br><br>你就{着收尸?br>q时候我们就要B4微Y了,cx有GetLastselectedItemPosition 和GetPrevSelectedItemQ多写一Ҏ员函Cd :(<br>没办法,办法自己惻Iq里有个W办?br><br>POSITION sSelPos = NULL;<br>while(sSelPos = m_listctrl.GetFirstSelectedItemPosition())<br>{<br>   int nSelItem = -1;<br>   nSelItem = m_listctrl.GetNextSelectedItem(sSelPos);<br>   if(nSelItem >= 0 && nSelItem<m_listctrl.GetItemCount())<br>   {<br>      //好了Q这个nSelItem 是我们要的DD<br>   }<br>}<br><br>GetNextSelectedItemq个函数Q看msdn的用法,其实是返回第一个的indexQ然后走C一个选中的行去,所以这么做也是安全的,在实际中Q俺也是q么做的Q测试也通过Q没问题?br>当然Q还有个办法Q先通过GetFirstSelectedItemPosition和GetNextSelectedItem来获取所有的选中行的indexQ然后把q些index攑ֈ一个数l里Q然后再从下往上删<br>唉真ȝ啊,q要不定数组Q不说用new在堆上开吧,那么一个vectorL要的吧,ȝ啊,所以我暂时是用上述的办法来删除Q也供大家参考,希望能找到更好的办法?br><br>好了Q今天就暂时先整理上q十炏Vlistctrl其他高的用法,|上资料也很多,我也暂时不ȝQ以后有Z再说吧?br></p> <img src ="http://m.shnenglu.com/amazon/aggbug/68159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/amazon/" target="_blank">q风</a> 2008-11-29 14:27 <a href="http://m.shnenglu.com/amazon/archive/2008/11/29/68159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个性控制对话框上的控g昄【{载?/title><link>http://m.shnenglu.com/amazon/archive/2008/11/29/68155.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Sat, 29 Nov 2008 05:36:00 GMT</pubDate><guid>http://m.shnenglu.com/amazon/archive/2008/11/29/68155.html</guid><wfw:comment>http://m.shnenglu.com/amazon/comments/68155.html</wfw:comment><comments>http://m.shnenglu.com/amazon/archive/2008/11/29/68155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/amazon/comments/commentRss/68155.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/amazon/services/trackbacks/68155.html</trackback:ping><description><![CDATA[<p>如何个性控制对话框上的控g昄Q涉及到q方面的知识实在太多Q限于个力,我也不能在这里非常全面的介绍了,本文主要介绍日常最常用的几个功能:控g背景色设定、控件字体显C、控件字色显C、控件的亮\灰显C。而这里的控gQ也主要׃l静态控件、文本框控g、check控gQ按钮控件等?br><br>众所周知Q在VC中做界面几乎是所有工具中最艰难的一U(当然Q如果是骨灰U的高手Q那变?#8220;VC是做界面最丰富多彩的开发工?#8221;了,我肯定离那境界还有好几个十万八千里!Q。而VC中的界面Q大多由对话框界面组成,所以包括本人在内,怿很多人都有感慨,要是VC的对话框能够随心所Ʋ的定制该多好啊Q?在别的地方也看过一些换肤YӞL觉不好Q当Ӟ看到金山、瑞星那U界面就很向往了,可惜是只可YY想一下,我个h而言Q是不太可能一个h实现的?br><br>a归正传,我个h的用和实践而言Q在对话框中Q不写派生类的情况下Q可以简单实C些控件的背景艌Ӏ字体显CZ么的属性,雉岁岁的装C下,也可以稍微美化一下我们自q软g界面了。下面简单说明一下实现过E:<br><br>对话框中所有控Ӟ着色显C都需要重载函数WM_CTRCOLORQ它一般生成以下的成员函数Q在q个里面实现几乎所有本文要说到的控件操作?br>OnCtrColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ;<br>参数说明Q?br>pDC是设备指针;<br>pWnd是窗口指针;<br>nCtlColor是控件类型;<br><br>因ؓ对话框中的每个控仉会响应一ơ该函数Q所以一般情况下Q要Ҏ个控件操作,p先通过语句<br>if (pWnd->GetDlgCtrlID() == IDC_STATIC_TITLE)  <br>扑ֈ该控Ӟ或者通过语句<br>if (nCtlColor == CTLCOLOR_BIN |  nCtlColor == CTLCOLOR_TEXTQ;<br>扑ֈ控gcR?br><br>然后再通过讑֮讑֤环境来达到改变控件显C属性的目的?br>改变控g昄字体Q要先创q特定字体Q再选入讑֤<br>改变控g背景Ԍ要先创徏自己的特定画P再选入讑֤<br>改变控g昄字体的颜Ԍ只要讄一下就可以?br><br>1.<br>      静态控?br>      q几乎是最单的了,如果x变某个ID为ID_MY_SEL_STATIC静态控件的背景Ԍ只要语句<br>      HBRUSH CViewWaveparamDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) <br>      {<br>          HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);<br>       <br>          if (pWnd->GetDlgCtrlID() == ID_MY_SEL_STATIC)  <br>         {  <br>             pDC->SetBkColor(RGB(0,0,255));//蓝色<br>             pDC->SetBkMode(TRANSPARENT);  //调用该语句主要是Z昄文本Ӟ文本背景依然是蓝?br>             return ::CreateSolidBrush(RGB(98,176,255));//q回创徏的画?br>         }<br>   <br>         return hbr;<br>      }<br><br>      如果x变该控g的字体颜Ԍ只需要在上面的函数if语句中加入一下语句就可以?br>      pDC->SetTextColor(RGB(255,255,255));//昄字体为白?br>      如果要改变控件的字体Q则需要在对话框的初始函数中创Z个字体,最好用成员变量Q然后把该字体选入特定的控件的讑֤环境?br>      GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(m_logfont),&m_logfont); <br>      m_logfont.lfHeight = 16;<br>      m_logfont.lfWeight = 16;<br>      strcpy(m_logfont.lfFaceName, "黑体");<br>      m_logfont.lfCharSet = GB2312_CHARSET;<br>      VERIFY(m_Textfont.CreateFontIndirect(&m_logfont));<br>      GetDlgItem(ID_MY_SEL_STATIC)->SetFont(&m_Textfont);<br><br>2.<br>      文本控g、check控g{基本都是这样就可以实现了?br><br>3.<br>      按钮控g<br>      我v初也像上面这h做,可是是昄出来不是那么回事Q我查了很多书籍Q才发觉Q原来按钮用q个样子是做不出来的。必L生类Q从CButtonz。然后在zcM重蝲函数OnDrawItemQ)Q只有这h能实现本文所q的功能?br>      涉及到派生,我想不是我三a两语能说清楚的,在此只是提个思\Q恕在下无力Q推荐个|上比较好的以后zcCButtonST.<br><br>      其实我这文章很_浅的,但是我希望能起到一个抛砖引玉的作用Q有高手看到了本文,把你的见解和更好的实现方法脓上来Q供不会的朋友借鉴临摹一下。先在此感谢了!<br><br>漏了一点,是昄控g的亮\灰控Ӟ补上。(不好意思,见谅见谅Q?br><br>加入控制ID为ID_MY_BUTTON的显C,<br>在本对话框类中实现用语句<br>GetDlgItem(ID_MY_BUTTON)->EnableWindow(false);<br>在非本对话框cM实现用语?br>HWND Ctrlhwnd, dlghwnd;<br>GetDlgItem(IDD_BASE_DIALOG, &dlghwnd);<br>VERIFY(dlghwnd);<br>Ctrlhwnd = ::GetDlgItem(dlghwnd, ID_MY_BUTTONQ?<br>VERIFY(Ctrlhwnd);<br>::EnableWindow(Ctrlhwnd, true); </p> <img src ="http://m.shnenglu.com/amazon/aggbug/68155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/amazon/" target="_blank">q风</a> 2008-11-29 13:36 <a href="http://m.shnenglu.com/amazon/archive/2008/11/29/68155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用ODBC数据源与Access数据库连接的两种Ҏhttp://m.shnenglu.com/amazon/archive/2008/11/29/68149.htmlq风q风Sat, 29 Nov 2008 05:08:00 GMThttp://m.shnenglu.com/amazon/archive/2008/11/29/68149.htmlhttp://m.shnenglu.com/amazon/comments/68149.htmlhttp://m.shnenglu.com/amazon/archive/2008/11/29/68149.html#Feedback0http://m.shnenglu.com/amazon/comments/commentRss/68149.htmlhttp://m.shnenglu.com/amazon/services/trackbacks/68149.html以Access文g作ؓ数据库进行连接,一般可以用ODBC接口Q在q里我们使用MFC的CDatabasec,该类是对SQLConnect{ODBC的API的封装。需要包?span style="COLOR: red">afxdb.h头文?/span>。利用ODBC数据源进行数据库q接有两U方法:一U是自动或手工配|ODBC数据源后q接Q一U是不用配置ODBC数据源,而是直接ҎAccess文g的\径进行连接?br>
在MFC中,为ODBC预定义了几个c,其中主要的是数据?span style="BACKGROUND-COLOR: #ffffff">c?CDatabase)和记录集合类(CRecoredset)。这两个cL有联pd有区别,在应用程序中Q可以分别用,也可以同时用,每一cM可以同时存在多个对象。CDatabase?/span>每一个对象代表了一个数据源的连接,CRecordset的每一个对象代表了从一个数据表中按预定的查询条件获得的记录的集合,一般说来,前者适宜于对数据源下的某个数据表D行整体操作,后者用于对所选的记录集合q行处理?br>
两种Ҏ主要ҎCDatabasecȝOpen函数而来Q?br>

BOOL CDatabase::Open(
                                          LPCTSTR lpszDSN, 
                                          BOOL bExclusive 
= FALSE,
                                          BOOL bReadonly 
= FALSE, 
                                          LPCTSTR lpszConnect 
= _T("ODBC;"),
                                          BOOL bUseCursorLib 
= TRUE );

参数说明如下Q?br>(1)lpszDSNQ要q接的数据源的名字,如果lpszDSN = NULL且lpszConnect中也没有指明数据源名Q则该调用会自动出现一个对话框列出所有可用的数据??Q让用户选择?br>(2)bExclusiveQ只支持“?#8221;(False)|表示为共?share)方式q接。因此,应用E序在运行前Q一定要装入share.exe或在Windows的system.ini中装入vshare.386?什么意思不太懂......)
(3)ReadOnlyQ指明数据源操作方式?#8220;只读”q是可以修改?br>(4)lpszConnect:Q指明连接字W串Q包括数据源名、用h识码、口令等信息。该字符串必M“ODBC;”开_表示该连接是与一个ODBC数据源的q接(考虑以后版本支持非ODBC数据??br>
1.ҎAccess文g的\径进行连?/strong>

 

CString strConnect;
strConnect 
= _T("ODBC;DRIVER={MICROSOFT ACCESS DRIVER(*.mdb)};UID=;PWD=;DBQ=D:\\MusicSearch.mdb");
CDatabase db;
if(!db.Open(NULL, FALSE, FALSE, strConnect))
{
   
return TRUE;
}


CString strSQL;
strSQL 
= _T("select TOP 100 * from Music");
CRecordset rs(
&db);
rs.Open(CRecordset::forwardOnly, strSQL);

CString strValue;
int i = 0;
while(!rs.IsEOF())
{
   
//d功能

   rs.MoveNext();
   i
++;
}
 

rs.Close();
db.Close();


2.配置ODBC数据源后q接

 

CDatabase db;
if(!db.Open(_T("MusicSearch")))
{
   
return TRUE;
}


CString strSQL;
strSQL 
= _T("select TOP 100 * from Music");
CRecordset rs(
&db);
rs.Open(CRecordset::forwardOnly, strSQL);

//以下d功能



 



q风 2008-11-29 13:08 发表评论
]]>
ListCtrl排序扩展c?-CSortListCtrl【{载?/title><link>http://m.shnenglu.com/amazon/archive/2008/11/28/68042.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Thu, 27 Nov 2008 16:43:00 GMT</pubDate><guid>http://m.shnenglu.com/amazon/archive/2008/11/28/68042.html</guid><wfw:comment>http://m.shnenglu.com/amazon/comments/68042.html</wfw:comment><comments>http://m.shnenglu.com/amazon/archive/2008/11/28/68042.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/amazon/comments/commentRss/68042.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/amazon/services/trackbacks/68042.html</trackback:ping><description><![CDATA[<p>1. CSortList是CListCtrl的派生类?/p> <p>2. 要让CSortList自行排序Q当然得让CSortList自己处理LVN_COLUMNCLICK消息</p> <p>    ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnLvnColumnclick)<br>    OnLvnColumnclick的作用就是设|排序列Q排序方式,最后调用SortItems()?/p> <p>3. 排序的具体实玎ͼ也就是CALLBACK ListCompare(...)的实玎ͼ<br>    基本要求: 让CSortListҎItemq行排序Q而与数据源无兟?当然q样也有不之处Q就是排序只能按文本排序了。如果你需要按数字排序的话Q那只有特D处理了?</p> <p>   q里涉及到的最主要的函数是Q?br>   (1)ListCompare - 实现排序的回调函?br>   int CALLBACK CSortList::ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)Q?br>   (2)CListCtrl::FindItem - 查找相应的Item, 查找方式可指?br>   int FindItem( LVFINDINFO* pFindInfo, int nStart = -1 ) const;<br>   FindItem的具体细节请参考MSDN.<br>   <br>   基本思\Q?br>   (1)ListCompare的原型:传入的参数lParam1,lParam2是相应两行的ItemDataQ?br>   (2)FindItemҎlParam1,lParam2得到相应的ItemQ?br>   FindItem有多U查找方?查找方式通过LVFINDINFO->flagsq行讄)Q这里只是根据ItemDataq行查找?br>   (3)再用GetItemText得到排序列的ItemTextQ?br>   (4)最后就是比较ItemText了?br><br>下面是源代码Q?br>只有两个文gQCSortListCtrl.H, CSortListCtrl.cpp<br>直接把这两个文g攑ֈ目里就可以了?br><a href="http://m.shnenglu.com/Files/amazon/CSortListCtrl.rar">/Files/amazon/CSortListCtrl.rar</a><br><br>在对话框E序C***Dlg中,可添加如下初始化信息Q设|控件的风格和扩展风根{注意要ҎHDITEMcd变量和CHeaderCtrl::SetItem函数讄列的cd属性?br></p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">CSortListCtrl m_test;<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化控?/span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> DWORD dwStyle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::GetWindowLong(m_test.m_hWnd, GWL_STYLE); <br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> dwStyle </span><span style="COLOR: #000000">&=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">(LVS_TYPEMASK);<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> dwStyle </span><span style="COLOR: #000000">&=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">(LVS_EDITLABELS);<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄新风?/span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> SetWindowLongW(m_test.m_hWnd, GWL_STYLE, dwStyle</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">LVS_REPORT</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">LVS_NOLABELWRAP</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">LVS_SHOWSELALWAYS);<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄扩展风格</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> DWORD styles </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> LVS_EX_FULLROWSELECT</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">LVS_EX_GRIDLINES</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">LVS_EX_CHECKBOXES;<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> ListView_SetExtendedListViewStyleEx(m_test.m_hWnd, styles, styles);<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> m_test.SetExtendedStyle(m_test.GetExtendedStyle() </span><span style="COLOR: #000000">|</span><span style="COLOR: #000000"> LVS_EX_SUBITEMIMAGES);<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> HDITEM headerItem;<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> headerItem.mask </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> HDI_LPARAM;<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> CHeaderCtrl</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pHeaderCtrl </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> m_test.GetHeaderCtrl( );<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> m_test.InsertColumn(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, _T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">歌曲</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">), LVCFMT_LEFT, </span><span style="COLOR: #000000">150</span><span style="COLOR: #000000">);<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> <img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif">.<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif">..<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> headerItem.lParam </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CSortListCtrl::DATA_TYPE::STRING_TYPE;<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> pHeaderCtrl</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">SetItem(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">headerItem);<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> <img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif">.<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif"><img src="http://m.shnenglu.com/Images/dot.gif">..<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span></div> <p><br> </p> <img src ="http://m.shnenglu.com/amazon/aggbug/68042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/amazon/" target="_blank">q风</a> 2008-11-28 00:43 <a href="http://m.shnenglu.com/amazon/archive/2008/11/28/68042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义Button控g--CBitButtonNL【{载?/title><link>http://m.shnenglu.com/amazon/archive/2008/11/27/68024.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Thu, 27 Nov 2008 12:34:00 GMT</pubDate><guid>http://m.shnenglu.com/amazon/archive/2008/11/27/68024.html</guid><wfw:comment>http://m.shnenglu.com/amazon/comments/68024.html</wfw:comment><comments>http://m.shnenglu.com/amazon/archive/2008/11/27/68024.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.shnenglu.com/amazon/comments/commentRss/68024.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/amazon/services/trackbacks/68024.html</trackback:ping><description><![CDATA[<p>CBitButtonNLl承自CButton控gc,能实现鼠标热敏,昄3d文字Q可Ҏ按键的聚焦、按下、热态、失效等操作昄不同按键位图Q达到动态效果。好东西要好好保存着Q以备不时之需?br><br>在工E中加入BitButtonNL.h和BitButtonNL.cpp文gQ然后便可用该cL供的函数q行操作。例如,在对话框cC***Dlg.cpp的OnInitDialog函数中可以添加如下代码:<br><br></p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">CBitButtonNL m_btnSearch;    <br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">CString strFontName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> _T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">宋体</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">set bitmap</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch.SetBitmaps(<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                                          IDB_BITMAP_OTHER_NORMAL, <br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                                          IDB_BITMAP_OTHER_DOWN, <br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                                          IDB_BITMAP_OTHER_UP, <br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                                          IDB_BITMAP_OTHER_NO);     </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">按钮的四U位?/span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch.SetForceColor(RGB(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">), RGB(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">), RGB(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">));     </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">文字颜色</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch.SetSound(MAKEINTRESOURCE(IDR_WAVEMOVE), ::GetModuleHandle(NULL));     </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">聚焦声音</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch.SetSound(MAKEINTRESOURCE(IDR_WAVECLICK), ::GetModuleHandle(NULL), TRUE);    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">按下声音</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch.SizeToContent();             </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">按钮自动适应W一个图片大?/span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch.SetWindowText(TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">搜烦</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));         </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">改变按钮昄文字</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch.SetBtnCursor(IDC_CURSOR_HAND, FALSE);         </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">按钮鼠标cd</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch.SetTextAlign(NL_ALIGN_CENTER, FALSE);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄文字排列方式<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">set font</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"> m_btnSearch<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">  .SetDrawText(TRUE, FALSE)            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">是否昄按钮文字</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">  .SetFont3D(FALSE, </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, FALSE)      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">昄文字3d效果</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">  .SetText3DBKColor(RGB(</span><span style="COLOR: #000000">95</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">95</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">95</span><span style="COLOR: #000000">))        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">3d阴媄颜色</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">  .SetFontBold(TRUE, FALSE)       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">_体</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">  .SetFontSize(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">, FALSE)              </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">字体大小</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">  .SetFontName(strFontName)         </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">字体名称</span><span style="COLOR: #008000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">  ;</span></div> <br>其中Q?br>(1)IDB_BITMAP_OTHER_NORMAL、IDB_BITMAP_OTHER_DOWN、IDB_BITMAP_OTHER_UP、IDB_BITMAP_OTHER_NO分别是按键默认、按下、热态、失效时的位图资源IDQ?br>(2)IDR_WAVEMOVE和IDR_WAVECLICK?wav音频资源IDQ?br>(3)IDC_CURSOR_HAND是cursor资源ID?br><br><span style="COLOR: #000000">源代码如下:</span><br><a href="http://m.shnenglu.com/Files/amazon/CBitButtonNL.rar">/Files/amazon/CBitButtonNL.rar</a> <img src ="http://m.shnenglu.com/amazon/aggbug/68024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/amazon/" target="_blank">q风</a> 2008-11-27 20:34 <a href="http://m.shnenglu.com/amazon/archive/2008/11/27/68024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用SqlConfigDataSource实现ODBC数据源配|?/title><link>http://m.shnenglu.com/amazon/archive/2008/11/26/67938.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Wed, 26 Nov 2008 15:24:00 GMT</pubDate><guid>http://m.shnenglu.com/amazon/archive/2008/11/26/67938.html</guid><wfw:comment>http://m.shnenglu.com/amazon/comments/67938.html</wfw:comment><comments>http://m.shnenglu.com/amazon/archive/2008/11/26/67938.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://m.shnenglu.com/amazon/comments/commentRss/67938.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/amazon/services/trackbacks/67938.html</trackback:ping><description><![CDATA[<p> ODBCQOpen Database ConectivityQ即开攑ּ数据库互联,作ؓWindows开放性结构的一个重要部分已lؓ很多的WindowsE序员所熟悉QODBC的工作依赖于数据库制造商提供的驱动程序,使用ODBC API的时候,Windows的ODBC理E序Q把数据库访问的h传递给正确的驱动程序,驱动E序再用SQL语句指示DBMS完成数据库访问工作?/p> <p>一般来_实现数据库到ODBC驱动E序理器的注册有以下两U方法:一是编E时手工配置ODBC数据源,发布时用InstallShield{安装制作Y件自动配|ODBC数据源;二是考虑用程序替用户完成q些配置工作Q实现的Ҏ有几U,一U办法是用程序修改Windows注册表,E序员可以用Windows API函数增改HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中的键|q种Ҏ比较烦琐Q另一U是在程序中使用ODBC API的方法,E序员可以在M时候都可以用Visual C++~写的程序调用这些API函数来设|ODBC数据源?br><br>创徏ODBC数据源可以调用Windowspȝ子目录下的动态链接库<font color=#ff0000>ODBCCP32.DLL</font>中的函数SQLConfigDataSource()Q该函数可以动态地增加、修改和删除数据源?br><br>SQLConfigDataSource()的原型如?<br><br><span style="COLOR: red">BOOL SQLConfigDataSource(HWND hwndParent, UINT fRequest, LPCSTR IpszDriver, LPCSTR IpszAttributes);<br></span>其中四个参数的用法如?<br>●参数hwndPwent是父U窗口句柄。如果句柄ؓNULLQ将不会昄一些有关的对话框。如果参?IpszAttributes提供的信息不够完善,在创E中׃出现对话框要求用h供相应信息?br>●参数fRequest可以讄Z面的数g一:<br>ODBC_ADD_DSN: 增加Q个新数据源<br>ODBC_CONHG_DSN: 配置Q修?一个已l存在的数据?br>ODBC_REMOVE_DSN: 删除一个已l存在的数据?br>ODBC_ADD_SYS_DSN: 增加一个新的系l数据源<br>ODBC_CONFIG_SYS_DSN: 更改一个已l存在的pȝ数据?br>ODBC_REMOVE_SYS_DSN: 删除一个已l存在的pȝ数据?br>●参数lpszDriver是数据库引擎名称Q可以参见ODBC理器中对ODBC驱动E序的描q。比如要加蝲的是Excel数据库,那么数据库引擎名U就为Microsoft Excel Driver(*.xls)<br>●参数lpszAttributesZq串?KeyName=value"字符Ԍ每两个KeyNameg间用\0""字符隔开(或者\0隔开卛_)。KeyName主要是新数据源缺省的驱动E序注册说明Q其中最主要的关键字?DSN"(新数据源的名U??DBQ"(数据源的地址)Q其余关键字则根据不同的数据源有不同要求。关于lpszAttributes参数的具体设|,详细可以参考Windowspȝ目录下帮助文件Odbcjtn.hlp主题目录标签中的"ODBC API函数改变|SQLConfigDatasource"条目?br><br>SqlConfigDataSource的应用条Ӟ<br><br><span style="COLOR: red">使用SqlConfigDataSource函数之前Q必LODBCINST.H文g包含在工E头文g中,ODBCCP32.LIB加入工程Q同时保证ODBCCP32.DLLq行时处于系l子目录下?br></span>若用VC6.0Q在安装目录中的Lib文g夹下LODBCCP32.LIBq添加到工程中;若用的是VC2005Q貌似安装目录的lib文g夹下没有该lib文gQ只能用VC6.0下的......<br><br>例:</p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">SQLConfigDataSource(<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                        NULL,<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                        ODBC_ADD_SYS_DSN,<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                        </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Microsoft Access Driver (*.mdb)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                        </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">DSN=TryDB\0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                        </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">DBQ=D:\\TryDB.mdb\0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif">                        );</span></div> <p> </p> <img src ="http://m.shnenglu.com/amazon/aggbug/67938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/amazon/" target="_blank">q风</a> 2008-11-26 23:24 <a href="http://m.shnenglu.com/amazon/archive/2008/11/26/67938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.f28771.cn" target="_blank">޾ƷþþþAV鶹</a>| <a href="http://www.kangaiw.cn" target="_blank">þþþ޾Ʒվ </a>| <a href="http://www.cxdsj.net.cn" target="_blank">þ99Ʒþþþþ벥</a>| <a href="http://www.djmb.net.cn" target="_blank">þþƷh</a>| <a href="http://www.1104f.cn" target="_blank">ƷѾþþþþþþ</a>| <a href="http://www.tnbzjrzhl.cn" target="_blank">պƷþһ</a>| <a href="http://www.kuaixiansou.cn" target="_blank">ݺۺϾþۺ88</a>| <a href="http://www.mdss.net.cn" target="_blank">Ů㽶þ**ëƬƷ</a>| <a href="http://www.gm53.cn" target="_blank">ij˾þþþӰԺѹۿ</a>| <a href="http://www.0379f.cn" target="_blank">Ưޱ˾þþƷ</a>| <a href="http://www.3secshop.cn" target="_blank">þþƷ</a>| <a href="http://www.uyns.cn" target="_blank">þþƷƷëƬ</a>| <a href="http://www.208dj.cn" target="_blank">ഺþ</a>| <a href="http://www.xa-dwyer.cn" target="_blank">99þù޸ۿ2024</a>| <a href="http://www.task5.cn" target="_blank">99ξþþŷƷվ</a>| <a href="http://www.safenote.cn" target="_blank">þþþӰԺС</a>| <a href="http://www.noahmachine.com.cn" target="_blank">ƷŮþøվ</a>| <a href="http://www.jxsrgh.com.cn" target="_blank">þþžоƷ23ٻӰԺ</a>| <a href="http://www.ccfnt.com.cn" target="_blank">þֻǾƷ23</a>| <a href="http://www.tnbzjrzhl.cn" target="_blank">AAƬѿƵþ</a>| <a href="http://www.jianzhuhr.net.cn" target="_blank">ɫ88þþþø߳ۺӰԺ</a>| <a href="http://www.liuzirui597.cn" target="_blank">þþþùƷ</a>| <a href="http://www.meng1.cn" target="_blank">޹þþۺվ</a>| <a href="http://www.zjwazx.cn" target="_blank">鶹AVһþ</a>| <a href="http://www.xxyifu.cn" target="_blank">97Ʒ˾þô߽</a>| <a href="http://www.oxygeniclife.com.cn" target="_blank">99þþƷֻоƷ</a>| <a href="http://www.52037872.cn" target="_blank">þþƷһ99</a>| <a href="http://www.sdxingying.com.cn" target="_blank">þþþav </a>| <a href="http://www.yousms.cn" target="_blank">Ļþ</a>| <a href="http://www.jia-hua.cn" target="_blank">Ƶþ</a>| <a href="http://www.jzqyc.com.cn" target="_blank">þúݺɫۺ</a>| <a href="http://www.hanxuefs.com.cn" target="_blank">þˬˬƬav</a>| <a href="http://www.huishou399.cn" target="_blank">ƷһþþƷɬ</a>| <a href="http://www.73sd.cn" target="_blank">þƵᆱƷ99㽶</a>| <a href="http://www.shenhoulong.com.cn" target="_blank">þˬ˾ƷƵ</a>| <a href="http://www.941ad.cn" target="_blank">˺ݺۺϾþ88</a>| <a href="http://www.iqyyh.cn" target="_blank">9191ƷѾþ</a>| <a href="http://www.weijiawu.cn" target="_blank">ɫۺϾþĻ</a>| <a href="http://www.scmyff.cn" target="_blank">ݺɫۺϾþþþ</a>| <a href="http://www.tvauto.cn" target="_blank">ۺþþ</a>| <a href="http://www.cq928.cn" target="_blank">þ¾Ʒ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>