??xml version="1.0" encoding="utf-8" standalone="yes"?>久久99精品国产麻豆婷婷,亚洲精品无码久久久久sm,国产精品久久久久久搜索http://m.shnenglu.com/qiaodong/category/2993.html耶\撒冷对你来说意味着什么?zh-cnTue, 20 May 2008 07:17:19 GMTTue, 20 May 2008 07:17:19 GMT60Cstring and char *http://m.shnenglu.com/qiaodong/archive/2007/08/03/29310.html乔栋乔栋Fri, 03 Aug 2007 09:05:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/08/03/29310.htmlhttp://m.shnenglu.com/qiaodong/comments/29310.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/08/03/29310.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/29310.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/29310.html   
  若将char*转换成CStringQ除了直接赋值外Q还可用CString::formatq行。例如:  
  char   chArray[]   =   "This   is   a   test";  
  char   *   p   =   "This   is   a   test";  
   
  ? 
   
  LPSTR   p   =   "This   is   a   test";   或在已定义Unicode应的用程序中  
   
  TCHAR   *   p   =   _T("This   is   a   test");   ? 
   
  LPTSTR   p   =   _T("This   is   a   test");  
  CString   theString   =   chArray;  
  theString.format(_T("%s"),   chArray);  
  theString   =   p;  
   
  2、CString转换成char*  
   
  若将CStringc{换成char*(LPSTR)cdQ常怋用下列三U方法:  
   
  Ҏ一Q用强制{换。例如:  
   
  CString   theString(   "This   is   a   test"   );  
  LPTSTR   lpsz   =(LPTSTR)(LPCTSTR)theString;   Ҏ二,使用strcpy。例如:  
   
  CString   theString(   "This   is   a   test"   );  
  LPTSTR   lpsz   =   new   TCHAR[theString.GetLength()+1];  
  _tcscpy(lpsz,   theString);   需要说明的是,strcpy(或可UdUnicode/MBCS的_tcscpy)的第二个参数?  const   wchar_t*   (Unicode)或const   char*   (ANSI)Q系l编译器会自动对其q行转换? 
   
  Ҏ三,使用CString::GetBuffer。例如:  
   
  CString   s(_T("This   is   a   test   "));  
  LPTSTR   p   =   s.GetBuffer();  
  //   在这里添加用p的代? 
  if(p   !=   NULL)   *p   =   _T('\0');  
  s.ReleaseBuffer();   //   使用完后及时释放Q以便能使用其它的CString成员函数  


乔栋 2007-08-03 17:05 发表评论
]]>
socket 初始?/title><link>http://m.shnenglu.com/qiaodong/archive/2007/07/22/28582.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Sun, 22 Jul 2007 12:56:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2007/07/22/28582.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/28582.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2007/07/22/28582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/28582.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/28582.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">  WORD   wVersionRequested   </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">   MAKEWORD(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,   </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);       <br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>  WSADATA   wsaData;     <br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>  </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">   err   </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">   WSAStartup(wVersionRequested,   </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">wsaData);     <br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>  </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">   (err   </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">   </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)     <br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img id=Codehighlighter1_179_205_Open_Image onclick="this.style.display='none'; Codehighlighter1_179_205_Open_Text.style.display='none'; Codehighlighter1_179_205_Closed_Image.style.display='inline'; Codehighlighter1_179_205_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_179_205_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_179_205_Closed_Text.style.display='none'; Codehighlighter1_179_205_Open_Image.style.display='inline'; Codehighlighter1_179_205_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>  </span><span id=Codehighlighter1_179_205_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_179_205_Open_Text><span style="COLOR: #000000">{   <br></span><span style="COLOR: #008080">6</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  WSACleanup();   <br></span><span style="COLOR: #008080">7</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>  }</span></span><span style="COLOR: #000000">  </span></div> <img src ="http://m.shnenglu.com/qiaodong/aggbug/28582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2007-07-22 20:56 <a href="http://m.shnenglu.com/qiaodong/archive/2007/07/22/28582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获得控g内容http://m.shnenglu.com/qiaodong/archive/2007/06/04/25528.html乔栋乔栋Mon, 04 Jun 2007 15:18:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/06/04/25528.htmlhttp://m.shnenglu.com/qiaodong/comments/25528.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/06/04/25528.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/25528.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/25528.htmlEdit<输入?/span>>   
    
  
1.(CWnd   *)GetDlgItem(IDC_EDIT_1))->SetWindowText("0");   
    
  
2.int   n=GetDlgItemInt(IDC_EDIT_1,   NULL,true);     
    
  
3.(CWnd   *)GetDlgItem(IDC_EDIT_1))->GetWindowText(cs);   
    
  Combox
<下拉?/span>>   
    
  
1.((CComboBox   *)GetDlgItem(IDC_COMB_1))->SetCurSel(1);   
    
  
2.   GetDlgItemText(IDC_COMB_1,   cs,   50);   
    
  
3.int   i=m_COM.GetCurSel();     
      m_COM.GetLBText(i,cs);     
    
  
4.m_COM.AddString(cs);m_COM.DeleteString(0);m_COM.SetCurSel(0);   
      
    
      
    
  Radio
<单选按?/span>>     
  
1.((CButton   *)GetDlgItem(IDC_RADIO_1))->SetCheck(true);   
    
  
2.if   (((CButton   *)GetDlgItem(IDC_RADIO_1))->GetCheck())   {}   
    
  
3.((CButton   *)GetDlgItem(IDC_RADIO_1))->SetCheck(true);   
      
    
      
    
  List   Control
<列表>   
    
  
1.m_list2.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);       m_list2.InsertColumn(0,"TagID",LVCFMT_LEFT,60);   
      m_list2.InsertColumn(
1,"TagType",LVCFMT_CENTER,120);   
      m_list2.InsertItem(i,cs1);     
      m_list2.SetItemText(i,
1,cs2);   
    
  
2.if(m_list2.GetSelectedItem()!=-1)   
        
{   
            
int   i=m_list2.GetSelectionMark();   
            cs
=m_list2.GetItemText(i,0);   
        }
     
    
  
3.int   i=m_List2.GetItemCount();     
    
  
4.m_list2.DeleteItem(i);m_list2.DeleteAllItems();   
      
    
      
    
  ListBox
<列表?/span>>   
    
  
1.((CListBox   *)listBox)->InsertString(0,   str);   
      
    
      
    
  Button
<按钮>   
    
  
1.((CWnd   *)GetDlgItem(IDC_BUTTON_1))->ShowWindow(true);   
    
  
2.((CWnd   *)GetDlgItem(IDC_BUTTON_1))->EnableWindow(true);   
      


乔栋 2007-06-04 23:18 发表评论
]]>
资源打成DLLhttp://m.shnenglu.com/qiaodong/archive/2007/04/24/22712.html乔栋乔栋Tue, 24 Apr 2007 04:00:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/04/24/22712.htmlhttp://m.shnenglu.com/qiaodong/comments/22712.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/04/24/22712.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/22712.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/22712.html阅读全文

乔栋 2007-04-24 12:00 发表评论
]]>
VC中动态添加控?/title><link>http://m.shnenglu.com/qiaodong/archive/2007/04/23/22640.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Mon, 23 Apr 2007 06:44:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2007/04/23/22640.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/22640.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2007/04/23/22640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/22640.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/22640.html</trackback:ping><description><![CDATA[<strong>动态控件是指在需要时由Create()创徏的控Ӟq与预先在对话框中放|的控g是不同的?<br><br>  一、创建动态控Ӟ<br><br>  Z对照Q我们先来看一下静态控件的创徏?br><br>  攄静态控件时必须先徏立一个容器,一般是对话框,q时我们在对话框~辑H口中,从工L口中拖出所需控g攑֜对话框中卛_Q再适当修改控gIDQ设|控件属性,一个静态控件就创徏好了Q当对话框被昄Ӟ其上的控件也会显C?br><br>  静态控件不需要调用Create()函数来创建?br><br>  而创建动态控件有很大不同Q以下以按钮ZQ看一下动态控件的创徏q程Q?br><br>  1.建立控gIDP<br><br>  IDh控g的标识,创徏控g前必d为它讄一个ID受?br><br>  打开资源中的“String Table”Q在I白行上双击鼠标Q这时会弹出一个ID属性对话框Q在其中的ID~辑框中输入IDQ如QIDC_MYBUTTONQ在Caption中输入控件标题或注解Q注QCaption框不能ؓI,为空会导致创建失败)Q这里我输入的是按钮上要昄的文?-动态按钮?br><br>  2.建立控g对象Q?br><br>  不同U类的控件应创徏不同的类对象Q?br><br>  ·按钮控g CButton Q包括普通按钮、单选按钮和复选按钮)<br>  ·~辑控g CEdit<br>  ·静态文本控?CStatic<br>  ·标签控g CTabCtrl<br>  ·旋{控g CSpinButtonCtrl<br>  ·滑标控g CSliderCtrl<br>  ·多信息编辑控?CRichEditCtrl<br>  ·q度条控?CProgressCtrl<br>  ·滚动条控?CSrcollBar<br>  ·l合框控?CComboBox<br>  ·列表框控?CListBox<br>  ·囑փ列表控g CImageCtrl<br>  ·树状控g CTreeCtrl<br>  ·动画控g CAnimateCtrl<br><br>  本例中我们创Z个CButtoncȝ普通按钮。注意不能直接定义CButton对象Q如QCButton m_MyBut;q种定义只能用来l静态控件定义控制变量,不能用于动态控件?br><br>  正确做法是用new调用CButton构造函数生成一个实例:<br><br></strong> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>CButton *p_MyBut = new CButton();</td> </tr> </tbody> </table> <br>  然后用CButtoncȝCreate()函数创徏Q该函数原型如下Q?br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );</td> </tr> </tbody> </table> <br>  lpszCaption是按钮上昄的文本;dwStyle指定按钮风格Q可以是按钮风格与窗口风格的l合Q取值有Q?br><br>  H口风格Q?br><br>  ·WS_CHILD 子窗口,必须?br>  ·WS_VISIBLE H口可见Q一般都?br>  ·WS_DISABLED 用H口Q创建初始状态ؓ灰色不可用的按钮时?br>  ·WS_TABSTOP 可用Tab键选择<br>  ·WS_GROUP 成组Q用于成l的单选按钮中的第一个按?br><br>  按钮风格Q?br><br>  ·BS_PUSHBUTTON 下压式按钮,也即普通按?br>  ·BS_AUTORADIOBUTTON 含自动选中状态的单选按?br>  ·BS_RADIOBUTTON 单选按钮,不常?br>  ·BS_AUTOCHECKBOX 含自动选中状态的复选按?br>  ·BS_CHECKBOX 复选按钮,不常?br>  ·BS_AUTO3STATE 含自动选中状态的三态复选按?br>  ·BS_3STATE 三态复选按钮,不常?br> <br>  以上风格指定了创建的按钮cdQ不能同时用,但必L其一?br><br>  ·BS_BITMAP 按钮上将昄位图<br>  ·BS_DEFPUSHBUTTON 讄为默认按钮,只用于下压式按钮Q一个对话框中只能指定一个默认按?br>  ·rect指定按钮的大和位置Q?br>  ·pParentWnd指示拥有按钮的父H口Q不能ؓNULLQ?br>  ·nID指定与按钮关联的IDP用上一步创建的ID受?br><br>  不同控gcȝCreate()函数略有不同Q可参考相兌料?br><br>  例:p_MyBut->Create( "动态按?, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(20,10,80,40), this, IDC_MYBUTTON );<br>q样Q我们就在当前对话框中的(20,10)处创Z?0Q高30Q按钮文字ؓ“动态按?#8221;的下压式按钮?br><br>  Z使创E更方便易用Q我定义了如下函敎ͼ<br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>CButton* CTextEditorView::NewMyButton(int nID,CRect rect,int nStyle)<br>{<br>CString m_Caption;<br>m_Caption.LoadString( nID ); //取按钮标?br>CButton *p_Button = new CButton();<br>ASSERT_VALID(p_Button);<br>p_Button->Create( m_Caption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, nID ); //创徏按钮<br>return p_Button;<br>} </td> </tr> </tbody> </table> <br>  其中m_Caption.LoadString( nID )是从字符串表中读取按钮文本,q样在创建按钮IDӞ应该把文本设|好Q参数nStyle为除必须风格外的额外风格?br><br>  以下Q我调用该函数创Z个按钮,q指定第一个按钮ؓ默认按钮Q按钮的ID已预先设|好了:<br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>CButton *p_MyBut[3];<br>p_MyBut[0] = NewMyButton( ID_MYBUT1, CRect(10,20,50,35), BS_DEFPUSHBUTTON );<br>p_MyBut[1] = NewMyButton( ID_MYBUT2, CRect(55,20,95,35), 0 );<br>p_MyBut[2] = NewMyButton( ID_MYBUT3, CRect(100,20,140,35), 0 ); </td> </tr> </tbody> </table> <br>  <strong>二、动态控件的响应</strong>Q?br><br>  动态控件的响应函数不能用ClassWizarddQ只能手动添加。仍以上面的按钮ZQ我们制作按钮的单击响应函数?br><br>  1.在MESSAGE_MAP中添加响应函敎ͼ<br><br>  MESSAGE_MAP表中定义了消息响应函敎ͼ其格式ؓQ消息名(ID,函数?Q当我们用ClassWizardd函数Ӟ会自动添加在AFX_MSG_MAP括v的区间内Q如Q?br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)<br>//{{AFX_MSG_MAP(CTextEditorView)<br>ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)<br>//}}AFX_MSG_MAP<br>END_MESSAGE_MAP() </td> </tr> </tbody> </table>  <br>  手工d时不要添加到AFX_MSG_MAP区间内,以防ClassWizard不能正常工作Q如Q?<br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)<br>//{{AFX_MSG_MAP(CTextEditorView)<br>ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)<br>//}}AFX_MSG_MAP<br>ON_BN_CLICKED(ID_MYBUT1, OnMybut1)<br>ON_BN_CLICKED(ID_MYBUT2, OnMybut2)<br>ON_BN_CLICKED(ID_MYBUT3, OnMybut3)<br>END_MESSAGE_MAP() </td> </tr> </tbody> </table> <br>  其中ON_BN_CLICKED是按钮单L息?br><br>  2.在头文g中添加函数定义:<br><br>  用ClassWizardd函数Ӟ会在头文件的AFX_MSG区间内添加函数定义,如: <br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>protected:<br>//{{AFX_MSG(CTextEditorView)<br>afx_msg void OnIconbut0();<br>//}}AFX_MSG<br>DECLARE_MESSAGE_MAP() </td> </tr> </tbody> </table> <br>  我们模仿q种形式Q只是把函数定义d到AFX_MSG区间外就行了Q?br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>protected:<br>//{{AFX_MSG(CTextEditorView)<br>afx_msg void OnIconbut0();<br>//}}AFX_MSG<br>afx_msg void OnMybut1();<br>afx_msg void OnMybut2();<br>afx_msg void OnMybut3();<br>DECLARE_MESSAGE_MAP() </td> </tr> </tbody> </table> <br>  3.~写消息响应函数Q?br><br>  以上是把消息和函数关联v来了Q具体在单击按钮后应做的工作在函C完成Q?<br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>void CTextEditorView::OnMybut1()<br>{<br>MessageBox( "哈!你单M动态按钮? );<br>}<br>void CTextEditorView::OnMybut2()<br>{<br>……<br>}<br>void CTextEditorView::OnMybut3()<br>{<br>……<br>} </td> </tr> </tbody> </table> <br>  除了按钮的响应函数外Q你q可以用上面获得的指针访问按钮,如:<br><br>  修改按钮的大和位置Qp_MyBut[0]->MoveWindow(……);<br><br>  修改按钮文本Qp_MyBut[0]->SetWindowText(……);<br><br>  昄/隐藏按钮Qp_MyBut[0]->ShowWindow(……);{等?br>三、回收资源:<br><br>  ׃动态控件对象是由new生成的,它不会被E序自动释放Q所以需手工释放。在控g不再使用时可以删除它Q?br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>if( p_MyBut[0] )<br>delete p_MyBut[0]; </td> </tr> </tbody> </table> <br>  以上是按钮控g动态生成的Ҏ。下面,再看一下单选按钮的动态生成问题?四、实例:单选按钮组的动态生?br><br>  单选按钮也属于CButtonc,但由于单选按钮L成组使用的,所以它在制作和使用上与普通按钮有一定区别?br><br>  假设有三个单选按钮组成一l,初始ӞW一个单选按钮处于选中状态?br><br>  我们先来看静态制作方法:在对话框中放|三个单选按钮,讄属性如下:<br><br>  ·Radio1属性:Visible、Group、Tab stop、Auto<br>  ·Radio2属性:Visible、Tab stop、Auto<br>  ·Radio3属性:Visible、Tab stop、Auto<br><br>  q样的属性设|就把三个单选按钮分成了一l,它们一ơ只能有一个被选中Q若对话框中q有其它成组的单选按钮,使用时也会互不干扰。但q时q没有ɽW一个按钮处于选中状态?br><br>  接着qClassWizardl单选按钮添加变量,q里只需为第一个单选按钮添加变量即可。设变量名ؓm_RadioQ类型选ؓint型。在构造函CClassWizard把m_Radio的D|ؓ-1Q我们把它改?Q这样在q行E序时可以看到第一个单选按钮处于选中状态了。之后,q应该用ClassWizardZ个单选按钮添加单d应函敎ͼ在里面修改m_Radio的值对应三个单选按钮就可以了?br><br>  以上是通常制作单选按钮组的办法,现我们欲改ؓ动态生成,主要要解x钮分l和单击控制问题。以下ؓ制作步骤Q?br><br>  1.定义三个单选按钮的IDQ?br><br>  打开资源中的“String Table”Q在其中d三个ID|<br><br>  ·W一个:ID为IDC_MYRADIO1QCaption为单?<br>  ·W二个:ID为IDC_MYRADIO2QCaption为单?<br>  ·W三个:ID为IDC_MYRADIO3QCaption为单?<br><br>  其中Caption为按钮上要显C的文字Q可Ҏ需要设|?br><br>  2.用CButtoncȝCreate()函数生成三个单选按钮:<br><br>  为方便v见,先定义一个函数生成单选按钮: <br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>CButton* CTextEditorView::NewMyRadio(int nID,CRect rect,int nStyle)<br>{<br> CString m_Caption;<br> m_Caption.LoadString( nID ); //取按钮标?br> CButton *p_Radio = new CButton();<br> ASSERT_VALID(p_Radio);<br> p_Radio->Create( m_Caption, WS_CHILD | WS_VISIBLE | nStyle | WS_TABSTOP | BS_AUTORADIOBUTTON, rect, this, nID ); //创徏按钮<br> return p_Radio;<br>} </td> </tr> </tbody> </table> <br>  函数LoadString()用于?#8220;String Table”中读取按钮文本,Create()函数中设定了单选按钮必ȝ属性,其中包括了Visible、Tab stop、Auto属性?br><br>  参数nID为单选按钮IDPrect为单选按钮尺寸,nStyle为除必要属性外的其它属性。返回gؓ指向新徏按钮的指针?br><br>  有了q个函数后,创徏单选按钮组时只要依ơ调用该函数卛_Q其中单选按钮组的第一个单选按钮必L定WS_GROUP属性?br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>CButton *p_MyRadio[3];<br>p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP );<br>p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 );<br>p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 ); </td> </tr> </tbody> </table> <br>  3.定义单选按钮组的控制变量,讄W一个单选按钮ؓ选中状态:<br><br>  q里不能用ClassWizardd变量Q也不要在DoDataExchange()中添加控制变量,因ؓ动态控件一开始ƈ不存在,在DoDataExchange()中添加控制变量会造成q行错误。这里我们只需在头文g中随意定义一个int型变量作为控制变量即可,如:<br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>int m_SelRadio;</td> </tr> </tbody> </table> <br>  在构造函C讄其初gؓ0Qm_SelRadio = 0;<br><br>  在上面的创徏按钮的语句中Q用SetCheck()函数讄初始选中的按钮:<br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>CButton *p_MyRadio[3];<br>p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP );<br>p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 );<br>p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 );<br>p_MyRadio[m_SelRadio]->SetCheck(1); //讄W一个单选ؓ选中状?</td> </tr> </tbody> </table> <br>  在SetCheck()函数中,参数?表示讄为选中状态,?表示未选中状态?br><br>  4.d鼠标单击响应函数Q?br><br>  鼠标单击某单选按钮后Q其状态已l能自动改变Q这里我们还需修改控制变量m_SelRadio的|以便跟踪选中的单选按钮?br><br>  首先在MESSAGE_MAP中把鼠标单击消息与响应函数联pv来: <br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)<br>//{{AFX_MSG_MAP(CTextEditorView)<br>ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0) //ClassWizard在此处添?br>//}}AFX_MSG_MAP<br>ON_BN_CLICKED(IDC_MYRADIO1, OnMyRadio1) //单选按?<br>ON_BN_CLICKED(IDC_MYRADIO2, OnMyRadio2) //单选按?<br>ON_BN_CLICKED(IDC_MYRADIO3, OnMyRadio3) //单选按?<br>END_MESSAGE_MAP() </td> </tr> </tbody> </table> <br>  然后在头文g的MESSAGE_MAP中定义单d敎ͼ<br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>protected:<br>//{{AFX_MSG(CTextEditorView)<br>afx_msg void OnIconbut0(); //ClassWizard在此处添?br>//}}AFX_MSG<br>afx_msg void OnMyRadio1(); //单选按?<br>afx_msg void OnMyRadio2(); //单选按?<br>afx_msg void OnMyRadio3(); //单选按?<br>DECLARE_MESSAGE_MAP() </td> </tr> </tbody> </table> <br>  q里注意不要把函数加在AFX_MSG区间内,以防影响ClassWizard的用?br><br>  定义具体的响应函敎ͼq里是用手工加入的,不是用ClassWizard加入的)Q?br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>//单击单选按? void CTextEditorView::OnMyRadio1() <br>{<br>m_SelRadio=0;<br>} <br><br>//单击单选按? void CTextEditorView::OnMyRadio2() <br>{<br>m_SelRadio=1;<br>} <br><br>//单击单选按? void CTextEditorView::OnMyRadio3() <br>{<br>m_SelRadio=2;<br>}</td> </tr> </tbody> </table> <br>  5.回收资源Q?br><br>  在析构函CQ回收创建的单选按钮(也可以在不用单选按钮时立即回收Q:<br><br> <table borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1> <tbody> <tr> <td>CTextEditorView::~CTextEditorView()<br>{<br>int i;<br>for( i=0; i<3; i++)<br>{<br>if(p_MyRadio[i])<br>delete p_MyRadio[i];<br>}<br>}</td> </tr> </tbody> </table> <br>  以上是动态控件的生成和响应方法,各种不同的控件做法略有不同,但思\和步骤都是类似的Q希望以上实例对你能够有所帮助?<br><br><br><br><br> <img src ="http://m.shnenglu.com/qiaodong/aggbug/22640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2007-04-23 14:44 <a href="http://m.shnenglu.com/qiaodong/archive/2007/04/23/22640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用ITaskbarList接口操纵Windowsd栏程序按钮的状?http://m.shnenglu.com/qiaodong/archive/2007/04/22/22606.html乔栋乔栋Sun, 22 Apr 2007 14:45:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/04/22/22606.htmlhttp://m.shnenglu.com/qiaodong/comments/22606.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/04/22/22606.html#Feedback1http://m.shnenglu.com/qiaodong/comments/commentRss/22606.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/22606.htmlclass CXDlg : public CDialog
{
    ......
    public:
        typedef ITaskbarList *LPITaskbarList;
        LPITaskbarList pTaskbar;
    ......
};

Step 2: 初始?d栏COM 对象

BOOL CXDlg::OnInitDialog()
{
    ......
    // Initializes the Component Object Model(COM)
    CoInitialize(0);
    // We call below function since we only need to create one object
    CoCreateInstance(
        CLSID_TaskbarList,
        0,
        CLSCTX_INPROC_SERVER,
        IID_ITaskbarList,
        (void**)&pTaskbar
    );
    // Below function will initialize the taskbar list object
    pTaskbar->HrInit();
    ......
}

Step 3: 使用Q删?昄 d栏程序按?/u>

void CXDlg::OnBnClickedButtonHide()
{
    pTaskbar->DeleteTab(this->GetSafeHwnd());
}

void CXDlg::OnBnClickedButtonShow()
{
    pTaskbar->AddTab(this->GetSafeHwnd());
}






乔栋 2007-04-22 22:45 发表评论
]]>
应用E序从Q务管理器中消?/title><link>http://m.shnenglu.com/qiaodong/archive/2007/04/09/21533.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Mon, 09 Apr 2007 06:51:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2007/04/09/21533.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/21533.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2007/04/09/21533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/21533.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/21533.html</trackback:ping><description><![CDATA[[问题]<br>通常我们按下CTRL+ATL+DELl合键后Q可以看到正在运行的E序或者进E,有没有办法让E序从CTRL+ATL+DEL消失掉呢Q也是说让正在q行的程序对CTRL+ATL+DEL不可见?br>[解答]<br>{案是肯定的Q办法如下:<br>使用Win32 API 函数RegisterServiceProcessQ但是这个API函数的文档你是很难找到的。这里我们要用一下汇~?br><br>#include <windows.h><br><br>HINSTANCE hLibrary;<br>void *regproc;<br><br>void CADInit(void);<br>void HideApp(void);<br>void ShowApp(void);<br>void CADClean(void);<br><br>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)<br>{<br>  CADInit(); //加蝲 DLL q创Z指向它指?br>  HideApp(); //隐藏E序<br>  //ShowApp(); //昄E序<br><br>  //其他处理或调?br>  <br>  CADClean(); //卸蝲 DLL<br>  return 0; //retrun 0 因ؓ没有q入消息循环<br>}<br><br>void CADInit(void)<br>{<br>  //加蝲 kernel32.dll<br>  hLibrary = LoadLibrary("kernel32.dll");<br>  //获取函数RegisterServiceProcess的地址<br>  regproc = GetProcAddress(hLibrary, "RegisterServiceProcess");<br>}<br><br>void HideApp(void)<br>{<br>  //实现E序的隐?br>  __asm<br>  {<br>   push 1<br>   push 0<br>   call regproc<br>  }<br>  return;<br>}<br><br>void ShowApp(void)<br>{<br>  //恢复状?br>  __asm<br>  {<br>      push 0<br>      push 0<br>      call regproc<br>  }<br>  return;<br>}<br><br>void CADClean(void)<br>{<br>  //卸蝲 DLL<br>  FreeLibrary(hLibrary);<br>  return;<br>}<br>本程序在W2K和Win9x试通过? <img src ="http://m.shnenglu.com/qiaodong/aggbug/21533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2007-04-09 14:51 <a href="http://m.shnenglu.com/qiaodong/archive/2007/04/09/21533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ON_NOTIFY 消息http://m.shnenglu.com/qiaodong/archive/2007/04/09/21513.html乔栋乔栋Mon, 09 Apr 2007 02:12:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/04/09/21513.htmlhttp://m.shnenglu.com/qiaodong/comments/21513.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/04/09/21513.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/21513.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/21513.html问题:
对buttonQ我直接用WM_COMMAND是可以的?nbsp;现在我想试使用VC的ON_NOTIFYQ怎么试也不v作用?br>
解答:
ON_NOTIFY是针对WM_NOTIFY的消息宏Q而WM_NOTIFY是针?nbsp;
ListCtrl,TreeCtrl,TabCtrl{通用控g使用的消?nbsp;
buttonQlistbox{基本控件是不会用到q个消息?nbsp;.

 



乔栋 2007-04-09 10:12 发表评论
]]>
VC中用map来定位错误代?/title><link>http://m.shnenglu.com/qiaodong/archive/2007/03/26/20592.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Mon, 26 Mar 2007 02:37:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2007/03/26/20592.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/20592.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2007/03/26/20592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/20592.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/20592.html</trackback:ping><description><![CDATA[ <span id="frdn3n9" class="content">作ؓE序员,qx最担心见到的事情就是程序发生了崩溃Q无论是指针界q是非法操作Q都给我们的应用系l造成巨大的损失。但在一个大型系l的试q程中,初期出现E序崩溃g成了不可避免的事。其实测试中出现E序崩溃q不可怕,反而是试的成功。我们更为关心的是程序中的哪一行导致了pȝ崩溃Q这h们才能有针对性的q行Ҏ?br />  在VC中,我们可以利用出现E序崩溃时VC的自动蟩转,定位到出错代码行。但在大量的压力试Ӟ其是多U程试Ӟ同时出现几十个错Q这时VC本n的出错蟩转往往会失c?br />  在这里我们介l一U辅助查扄序崩溃代码行的好ҎQ它的核心就是利用编译时生成MAP文g中的信息来定位代码行?br />下面开始我们的介绍?br />  首先我们必须生成E序的MAP文g。那么什么是 MAP 文g呢?单地Ԍ MAP 文g是程序的全局W号、源文g和代码行号信息的唯一的文本表C方法,是整个程序工E信息的静态文本。它可以在Q何地斏VQ何时候用,不需要有额外的程序进行支持,仅仅通过一个文本阅d具如Ultra Edit可以打开了。而且Q这是唯一能找出程序崩溃代码行的救星?br />  那么我们应该如何生成MAP文g呢??VC 中,我们可以按下 Alt+F7Q打开“Project Settings”选项,选择 C/C++ 选项卡,q在最下面?Project Options 里面输入Q?Zd Q然后要选择 Link 选项卡,选中“Generate mapfile”复选框Qƈ在最下面?Project Options 里面输入Q?mapinfo:linesQ表C生?MAP 文gӞ加入行信息。最后按?F7 来编译生?EXE 可执行文件和 MAP 文gQ此时可以在工程的Debug目录下找到刚刚生成的MAP文gQ文件名为“工E名.map”?br />  通过上面的步骤,已经得到?MAP 文gQ那么我们该如何利用它呢Q让我们从一个简单的实例入手Q一步一步演CZ用MAP文g定位E序崩溃行的q程?br />首先假设我们的VC工程中有下面q个文gQ?br />//*****************************************************<br />// E序名称Q演C如何通过崩溃地址扑և源代码的出错?br />// 作者:刘可<br />// 日期Q?003-6-19<br />// 本程序会产生“除0错误”,所以会D<br />// E序崩溃Q弹出“非法操作”对话框?br />//******************************************************<br />#include<br /><br />int crashtest(int a,int b)<br />{<br />int c;<br />c = a/b;<br />return c;<br />}<br /><br />void main(void)<br />{<br />int a = 30;<br />int b = 0;<br />int ret;<br />printf("let's begin crash test...\n");<br />ret = crashtest(a,b);<br />}<br /><br />很显然本E序有“除0错误”,?Debug 方式下编译,q行时会产生“非法操作”。我们记录下产生崩溃的地址——在我的机器上是 0x0040102f 。这个在不同的机器上可能地址不同Q但Cq个地址我们下面要使用?br />我们打开它的 MAP 文gQ(q里列出我们比较兛_的内容,其他的就略过了)<br /><br />abortQ工E名Q?br /><br />Timestamp is 3ef16533 (Thu Jun 19 15:24:35 2003)<br /><br />Preferred load address is 00400000<br /><br />Start    Length    Name        Class<br />0001:00000000 0001081dH .text        CODE<br />0002:00000000 000013baH .rdata        DATA<br />0002:000013ba 00000000H .edata        DATA<br />0003:00000000 00000104H .CRT$XCA       DATA<br />0003:00000104 00000104H .CRT$XCZ       DATA<br />0003:00000208 00000104H .CRT$XIA       DATA<br />0003:0000030c 00000109H .CRT$XIC       DATA<br />0003:00000418 00000104H .CRT$XIZ       DATA<br />0003:0000051c 00000104H .CRT$XPA       DATA<br />0003:00000620 00000104H .CRT$XPX       DATA<br />0003:00000724 00000104H .CRT$XPZ       DATA<br />0003:00000828  00000104H .CRT$XTA       DATA<br />0003:0000092c  00000104H .CRT$XTZ       DATA<br />0003:00000a30  00003236H .data        DATA<br />0003:00003c68  000019c8H .bss        DATA<br />0004:00000000  00000014H .idata$2       DATA<br />0004:00000014  00000014H .idata$3       DATA<br />0004:00000028  00000120H .idata$       DATA<br />0004:00000148  00000120H .idata$5        DATA<br />0004:00000268  000004f4H .idata$6       DATA<br /><br />Address Publics by Value Rva+Base Lib:Object<br /><br />0001:00000020 ?crashtest@@YAHHH@Z 00401020 f main.obj<br />0001:0000003c _main 0040103c f main.obj<br />0001:000000b0 _printf 004010b0 f LIBCD:printf.obj<br />0001:00000130 __chkesp 00401130 f LIBCD:chkesp.obj<br />0001:00000170 _mainCRTStartup 00401170 f LIBCD:crt0.obj<br />0001:000002a0 __amsg_exit 004012a0 f LIBCD:crt0.obj<br />0001:00000300 __stbuf 00401300 f LIBCD:_sftbuf.obj<br />0001:00000460 __ftbuf 00401460 f LIBCD:_sftbuf.obj<br />0001:00000520 __output 00401520 f LIBCD:output.obj<br />0001:000013c0 ___initstdio 004023c0 f LIBCD:_file.obj<br />0001:000014f0 ___endstdio 004024f0 f LIBCD:_file.obj<br />0001:00001510 __CrtDbgBreak 00402510 f LIBCD:dbgrpt.obj<br />0001:00001520 __CrtSetReportMode 00402520 f LIBCD:dbgrpt.obj<br />0001:00001580 __CrtSetReportFile 00402580 f LIBCD:dbgrpt.obj<br />0001:00001600 __CrtSetReportHook 00402600 f LIBCD:dbgrpt.obj<br />0001:00001620 __CrtDbgReport 00402620 f LIBCD:dbgrpt.obj<br /><br />  如果仔细览 Rva+Base q栏Q我们可以发现第一个比崩溃地址 0x0040102f 大的函数地址?0x0040103c Q所以在 0x0040103c q个地址之前的那个入口就是生崩溃的函数Q也是q行Q?br /><br />0001:00000020 ?crashtest@@YAHHH@Z 00401020 f main.obj<br /><br />  因此Q发生崩溃的函数是 ?crashtest@@YAHHH@ZQ所有以问号开头的函数名称都是 C++ 修饰的名U。所以在我们的源E序中,q个发生崩溃的函数就?crashtest ()Q?br /><br />  现在我们便轻而易丑֜知道了发生崩溃的函数名称。把它记下来Q然后我们将要直接定位发生崩溃的代码行了。我们注?MAP 文g的最后部分——代码行信息QLine numbers informationQ,它是以这L形式昄的:<br /><br />Line numbers for .\Debug\main.obj(D:\我的工作\技术\出异怾子abort\main.cpp) segment .text<br /><br />12 0001:00000020 14 0001:0000002b 15 0001:00000035 16 0001:00000038<br />19 0001:0000003c 20 0001:00000057 21 0001:0000005e 23 0001:00000065<br />24 0001:00000072 25 0001:00000085<br /><br />  W一个数字代表在源代码中的代码行PW二个数是该代码行在所属的代码D中的偏U量。如果要查找代码行号Q需要用下面的公式做一些十六进制的减法q算Q?br /><br />崩溃行偏U?= 崩溃地址QCrash AddressQ- 基地址QImageBase AddressQ- 0x1000<br /><br />  Z么要q样做呢Q因为我们得到的崩溃地址都是?偏移地址QRvaQ? 基地址QBaseQ得来的Q所以在计算行号的时候要把基地址减去。一般情况下Q基地址的值是 0x00400000 。另外,׃一般的 PE 文g的代码段都是?0x1000 偏移开始的Q所以也必须减去 0x1000 ?br />  所以我们的Q崩溃行偏移 = 0x0040102f - 0x00400000 - 0x1000 = 0x2f<br />我们在MAP 文g的中的代码行信息里查找不过计算l果0x2fQ但却最接近的数。发现是 main.cpp 文g中的Q?br /><br />14 0001:0000002b<br /><br />  也就意味着在源代码中的W?14 行!让我们来看看源代码,注意注释行和I也要计算在内Q程序的W?4行ؓQ?br /><br />c = a/b;<br /><br />果然是W?14 行啊Q它发生了“除0异常”!<br /><br />  Ҏ已经介绍完了Q从今以后,我们可以精地定位到源代码中的崩溃行,而且只要~译器可以生?MAP 文gQ无论在WINq_q是UNIXq_Q本Ҏ都是适用的?br />  本文我们只是列D了一个非常简单的“除0异常”例子,使用MAP文g的效力或许还不十分明显。但怿在我们的大型应用pȝ调试中,使用MAP文g的辅助方法来快速定位发生程序崩溃的函数以及代码行,会为我们的E序调试工作节省大量旉和精力,提高我们的调试质量。我们甚臛_以要求远地用L接提供程序崩溃的地址Q然后就可以在自己机器上利用MAP文g静态地扑ֈ出错的那行,q在E序中进行相应修正了?br /><br />&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&<br /><br />VC7下运行OK.<br /><br /><br /></span> <img src ="http://m.shnenglu.com/qiaodong/aggbug/20592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2007-03-26 10:37 <a href="http://m.shnenglu.com/qiaodong/archive/2007/03/26/20592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自我反省http://m.shnenglu.com/qiaodong/archive/2007/03/25/20575.html乔栋乔栋Sun, 25 Mar 2007 14:57:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/03/25/20575.htmlhttp://m.shnenglu.com/qiaodong/comments/20575.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/03/25/20575.html#Feedback2http://m.shnenglu.com/qiaodong/comments/commentRss/20575.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/20575.html
从前的我,热衷于收集网l上所有我可能会用到的技?qؓ能在自己的作品中出现q样的技巧而兴奋不?

现在的我,热衷于看别h写下的文?q尝试理解它的意?q速的记录下来,q且更加q速的忘掉.

来的我......

我想,来应该试d一些这L文章,M一个书写者的角度来观感别人的作品,或许更有收获.


从前的我,不知道自己是不是能当一个好E序?

现在的我,知道自己可以作一个好E序?但是不知道下来怎么?

来的我.......

不知?

从前的我,热衷C交,喜欢琢磨I着饮食.

现在的我,更加喜欢耐脏而朴素的衣服,更加口健康的食?当然,廉仯?br />
来的我.......

也许,会追求时装会品位食,也可能会更喜Ƣ朴素的衣服,和健庯廉L食品.

从前,我没有这L文字.

现在,我尝试将q样劈ؓ横枝竖条的烂木头一h字组合v?却ؓ其蘪然倒塌而沮丧不?

来,我会写出更好的更满意的文字去记录q些历程,像大厦一样坚?

乔栋 2007-03-25 22:57 发表评论
]]>
VC 界面?/title><link>http://m.shnenglu.com/qiaodong/archive/2007/03/21/20272.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Wed, 21 Mar 2007 02:42:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2007/03/21/20272.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/20272.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2007/03/21/20272.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/20272.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/20272.html</trackback:ping><description><![CDATA[ <p>GuiToolkit(开源,cMVisual Studio 2003风格)<br /><a >http://www.beyondata.com/default.htm</a></p> <p>GardenUI(免费Q界面效果挺好的,XMLQ代?界面 分离)<br /><a >http://www.gardenui.com/</a></p> <p>CJLib(开源,免费QUNICODE~码,是xtreme toolkit的前生,但xtreme toolkit收费?<br /><a >http://www.codejock.com/</a></p> <p>LibUIDK(部分免费Q不开源,效果?适合贴图)<br /><a >http://www.iuishop.com/download.htm</a></p> <p>BCGControlBar(收费Q界面感觉和OfficecM)<br /><a >http://www.bcgsoft.com</a></p> <p>SKin++(收费Q界面很好看Q从它的截图上可以看?<br /><a >http://www.uipower.com/</a></p> <p>SkinMagic(收费Q看h像Office)<br /><a >http://appspeed.com/html/download.html</a></p> <p>ActiveSkin(未知)<br /><a >http://www.softshape.com/software/develop/</a></p> <p>SYGUI(收费,cMOffice)<br /><a >http://www.sygui.com/</a><br /><br /><br /><br /><br /><br /><br /></p> <img src ="http://m.shnenglu.com/qiaodong/aggbug/20272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2007-03-21 10:42 <a href="http://m.shnenglu.com/qiaodong/archive/2007/03/21/20272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>也许有用(也谈VC中ModifyStyle&ModifyStyleEx无法改变控g的Style)http://m.shnenglu.com/qiaodong/archive/2007/03/19/20153.html乔栋乔栋Mon, 19 Mar 2007 10:30:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/03/19/20153.htmlhttp://m.shnenglu.com/qiaodong/comments/20153.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/03/19/20153.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/20153.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/20153.html 
     一个View中用C一个CListCtrlQ在OnInitialUpdate函数里面他调用了m_listCtrl.ModifyStyleEx(0, LVS_EX_FULLROWSELECT);但是l果是ƈ没有改变View中这个ListCtrl的效果?/div>
 
     仔细的查阅了MSDN的关于ModifyStyleEx的说明,发现没什么可以的地方Q调试几遍发C没异常,最后在|上一搜烦ModifyStyleExQ结果发现碰到这个问题的朋友q真不少Q有一遍关于ModifyStyle和ModifyStyleEx无法改变样式的解x法的文章被{载得到处都是Q不仅感慨现在的互联|信息重复程度~~l果看完文章很失望,他完全是重新Create了一个控件?/div>
 
     最后经q努力,发现使用SetExtendStyle函数可以实现改变Style的功能?/div>
 
     有一Ҏ可以肯定圎ͼ如果你重构一个控件承自CListCtrlQ那么你可以在该控g的OnCreate中用ModifyStyle或者ModifyStyleExQ这都是可以辑ֈ目的的,但是如果控g的一个实例是另一个窗口的成员变量Q那么你在这个窗口的初始化函C调用该控件的ModifyStyle或者ModifyStyleEx是不能达到目的的Q有些关联的一个说明是SetWindowLong会因为控件和调用者不在同一q程而失败(ModifyStyle和ModifyStyleEx函数中有调用SetWindowLongQ?







乔栋 2007-03-19 18:30 发表评论
]]>About ' DLL ' something (孙鑫VC 19?DLL)http://m.shnenglu.com/qiaodong/archive/2007/03/15/19894.html乔栋乔栋Thu, 15 Mar 2007 07:11:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/03/15/19894.htmlhttp://m.shnenglu.com/qiaodong/comments/19894.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/03/15/19894.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/19894.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/19894.html 动态链接库的连接方? 昑ּ链接,隐式链接

在命令行下运行当前目录下(如C:\Documents and Settings\Tony\桌面\dll1\Debug),q行命odumpbin,如果不能q行,说明环境扑ֈ损坏,利用vcvars32.bat(VC87 / VC7 目录下Bin 文g夹直接拖入然后运?. q行dumpbin -exports dll1.dll可以看到DLL中到处函数名.

Code:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
dll1.cpp:

_declspec(dllexport) int add(int a, int b )
{
       return a+b;
}

_declspec(dllexport)int subtract(int a, int b)
{
       return a-b;
}
_declspec(dllexport)表示为导出函?可供应用E序调用?extern C"表示,可以使用其他~程语言讉Kdll中的函数.

~译后可以得到DLL1.DLL文g.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

dlltest.dlg

extern int add(int x,int y);
extern int subtract(int x,int y);
//_declspec(dllimport) int add(int a, int b )
//_declspec(dllimport)int subtract(int a, int b)   //q样的方法告诉编译器q些函数是从一个dll中调用的函数.~译器就能调用相应的lib文g,提高q行效率

extern可以|于变量或?/font>函数前,以标C变量或?/font>函数的定义在别的文g中,提示~译器遇到此变量?/font>函数时在其他模块中寻扑օ定义

 CString str;
 str.Format("3+5=%d",add(3,5));
 MessageBox(str);

~译器工E属性LINK-->input-->additional dependencies d相应的lib文g,LINK-->input-->Module defintion fileddef文g.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
如何昑ּ的加载一个动态链接库
动态加载不需要lib文g,只需要dll文g卛_
HINSTANCE与HMODULE可以通用

HInstance hinst;
hinst = Loadlibrary("dll2.dll");         //昑ּ加蝲
typedef int (*ADDPROC)(int a , int b);            //定义一个函数指?br />ADDPROC Add = (ADDPROC)getprocAdress(hinst, "add");    //获得函数指针
if(!add)
{
   messagebox("fail");
}
else
{
    CString str;
    str.Format("3+5=%d",add(3,5));
    MessageBox(str);

}










乔栋 2007-03-15 15:11 发表评论
]]>
【高效排序?/title><link>http://m.shnenglu.com/qiaodong/archive/2007/03/06/19284.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Tue, 06 Mar 2007 04:14:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2007/03/06/19284.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/19284.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2007/03/06/19284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/19284.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/19284.html</trackback:ping><description><![CDATA[ <div class="jxtfpzb" id="msgcns!62FB2A0D08BE727B!174"> <p dir="ltr">Sort(int a[],int left,int right)<br />{<br />   int value,l,r,temp;<br />   l=left;<br />   r=right;<br />   value = a[(left+right)/2];<br />   while(l<r)<br />   {<br />      while(a[l]<value)<br />       l++;<br />      while(a[r]>value)<br />       r--;<br />      if(l>=r)<br />         break;<br />      temp = a[l];<br />      a[l] = a[r];<br />      a[r] = temp;<br />      l++;<br />      r--;</p> <p>   }<br />   if(l==r)<br />      l++;<br />   if(left<r)<br />      Sort(a,left,l-1);<br />   if(l<right)<br />      Sort(a,r+1,right);<br />}<br /><br /><br /><br /><br /><br /><br /><br /></p> </div> <img src ="http://m.shnenglu.com/qiaodong/aggbug/19284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2007-03-06 12:14 <a href="http://m.shnenglu.com/qiaodong/archive/2007/03/06/19284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学而思,思而行 Q2Q?/title><link>http://m.shnenglu.com/qiaodong/archive/2007/01/30/18173.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Tue, 30 Jan 2007 02:44:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2007/01/30/18173.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/18173.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2007/01/30/18173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/18173.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/18173.html</trackback:ping><description><![CDATA[ <font color="#808080">codeQ?br /></font>typedef struct<br />{<br /> SOCKET sock;<br /> LPVOID ptr;<br />}PARAMRECV;<br /><br /><font color="#808080">error msg:</font><br /><br />c:\documents and settings\tony\桌面\mysocket\tcpserver_ft.h(44) : error C2146: syntax error : missing ';' before identifier 'sock'<br /><br />q个信息其实很典型,说明SOCKET 没有被定义,所以理所当然的应该查询SOCKET 的来源,F12发现它包换于#include "winsock.h" 之中Q添加以后解决问题?br /><br /><font color="#000080">思考:<br /></font>q个问题其实q不复杂Q需要注意的地方有两点:<br />1Q遇到出错信息要冷静的分析,不要x,不要心烦?br />2Q增强DEBUG技术,不单单只是调试器上的功夫Q还需要认真地思考?br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://m.shnenglu.com/qiaodong/aggbug/18173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2007-01-30 10:44 <a href="http://m.shnenglu.com/qiaodong/archive/2007/01/30/18173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学而思,思而行 <1>http://m.shnenglu.com/qiaodong/archive/2007/01/30/18170.html乔栋乔栋Tue, 30 Jan 2007 02:37:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/01/30/18170.htmlhttp://m.shnenglu.com/qiaodong/comments/18170.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/01/30/18170.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/18170.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/18170.htmlerror msg:

UpDlgView.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall CMarkup::~CMarkup(void)" (__imp_??1CMarkup@@QAE@XZ) referenced in function "public: void __thiscall CUpDlgView::OnButtonadd(void)" (?OnButtonadd@CUpDlgView@@QAEXXZ)

UpDlgView.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __thiscall CMarkup::AddElem(char const *,char const *,int)" (__imp_?AddElem@CMarkup@@QAE_NPBD0H@Z) referenced in function "public: void __thiscall CUpDlgView::OnButtonadd(void)" (?OnButtonadd@CUpDlgView@@QAEXXZ)

UpDlgView.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall CMarkup::CMarkup(void)" (__imp_??0CMarkup@@QAE@XZ) referenced in function "public: void __thiscall CUpDlgView::OnButtonadd(void)" (?OnButtonadd@CUpDlgView@@QAEXXZ)

分析Q?br />错误的类别是:unresolved external symbol ,是一个没有解决的外部变量Q因Z直认为第三方cM可能有错误所以一直在自己~写的代码中L错误Q其实错误的关键在这里:"__declspec(dllimport)" q说明这是一个外部导出类Q所以需要 将class  AFX_EXT_CLASS CMarkup 改ؓ class CMarkUp .










乔栋 2007-01-30 10:37 发表评论
]]>
演练VC中的COMMON一?http://m.shnenglu.com/qiaodong/archive/2007/01/22/17895.html乔栋乔栋Mon, 22 Jan 2007 09:44:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/01/22/17895.htmlhttp://m.shnenglu.com/qiaodong/comments/17895.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/01/22/17895.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/17895.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/17895.html    2.囑փ列表控制     Image List
    3.列表控制和视     List Control&List View
    4.树控制和视       Tree Control&Tree View
    5.标签控制和视     Tab Control&Tab View
    6.工具条控制       Toolbar Control
    7.q度条控制       Progress Control
    8.滑动条控制      Slider Control
    9.旋{按钮控制    Spin Button Control
    10.状态条控制      Status Bar Control


http://blog.csdn.net/wangjiwei2010/archive/2006/11/24/1412714.aspx






乔栋 2007-01-22 17:44 发表评论
]]>
同步异步,长连接短q接http://m.shnenglu.com/qiaodong/archive/2007/01/16/17666.html乔栋乔栋Tue, 16 Jan 2007 01:34:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/01/16/17666.htmlhttp://m.shnenglu.com/qiaodong/comments/17666.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/01/16/17666.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/17666.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/17666.html   
  你去饭店吃饭Q对服务员说Q“来两碗牛肉盖饭”,然后ql和lp聊天了,q了一会服务员把牛肉盖饭给你端了过来,q叫异步Q你发了h后l做其他事情MQ服务员完成你的h后告诉你盖饭好了  
   
  你去饭店吃饭Q对服务员说Q“来两碗拉面”,服务员告诉你Q“拉面得自己排队ȝ”,你只好让lp占着座位自己L队,q叫同步Q你发了h后必ȝ着师傅把面l你Q不能离开Q否则饭别h拿C

?短连接:  
   
  你在和mm在打电话Q但mmq在做饭Q然后mm对你_“我现在z个,q两分钟打给我”,又聊了一会儿Qmm又说Q“过3分钟打给我”,.....q是短连接,完成一件事情后d断开Q新的传输就建立新的q接  
   
  你受不了q么频繁的拨P你说Q“我不挂?...”,q是长连接,不管有没有数据要传输Q连接都要保持着

乔栋 2007-01-16 09:34 发表评论
]]>
CString和string的互相{?http://m.shnenglu.com/qiaodong/archive/2007/01/15/17645.html乔栋乔栋Mon, 15 Jan 2007 09:24:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/01/15/17645.htmlhttp://m.shnenglu.com/qiaodong/comments/17645.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/01/15/17645.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/17645.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/17645.html
CString strMfc=“test?

std::string strStl;

strStl=strMfc.GetBuffer(0);

std::string->CString  例子Q?br />
CString strMfcQ?br />
std::string strStl=“test?

strMfc=strStl.c_str();


乔栋 2007-01-15 17:24 发表评论
]]>
命名I间http://m.shnenglu.com/qiaodong/archive/2007/01/04/17248.html乔栋乔栋Thu, 04 Jan 2007 08:20:00 GMThttp://m.shnenglu.com/qiaodong/archive/2007/01/04/17248.htmlhttp://m.shnenglu.com/qiaodong/comments/17248.htmlhttp://m.shnenglu.com/qiaodong/archive/2007/01/04/17248.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/17248.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/17248.html  #include   "stdafx.h"  
  #include   <iostream>  
  using   namespace   std;  
   
  namespace   A  
  {  
  void   f(){cout<<"In   A::f()   function"<<endl;}  
  }  
  namespace   B  
  {  
  void   f(){cout<<"In   B::f()   function"<<endl;}  
  }  
   
   
   
  int   main(int   argc,   char*   argv[])  
  {  
  {  
  using   namespace   A;  
  f();  
  }  
  {  
  using   namespace   B;  
  f();  
  }  
  return   0;  
  }  

  l果是:  
  In   A::f()   function  
  In   B::f()   function



乔栋 2007-01-04 16:20 发表评论
]]>
开发心?/title><link>http://m.shnenglu.com/qiaodong/archive/2006/12/21/16696.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Thu, 21 Dec 2006 09:29:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2006/12/21/16696.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/16696.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2006/12/21/16696.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/16696.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/16696.html</trackback:ping><description><![CDATA[今天涉及C个数据更新问题,感觉问题q不大,但是却发C很大的学习空_虽然问题q没有完全搞定,但是觉得q样的问题折自己是很不错的一件事情?br /><br /><br />另外有一个疑问,是不是重复代码越越好呢Q我今天写的时候L不停在复用以前写的代码,感觉有些累赘所以就写成函数Q到处调用,从头审视自己的代码,发现重复的代码很多,我想q些是我需要改q的地方?br /><br />高得UQ不成熟的优化是万恶之源Q我q样的优化是不是不成熟的优化Q会不会造成一些恶果?q个我还不知道,但是我要快地找到答案?br /><br /><br /><br /><br /><img src ="http://m.shnenglu.com/qiaodong/aggbug/16696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2006-12-21 17:29 <a href="http://m.shnenglu.com/qiaodong/archive/2006/12/21/16696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> ListCtrl的ȝ http://m.shnenglu.com/qiaodong/archive/2006/12/13/16370.html乔栋乔栋Wed, 13 Dec 2006 07:18:00 GMThttp://m.shnenglu.com/qiaodong/archive/2006/12/13/16370.htmlhttp://m.shnenglu.com/qiaodong/comments/16370.htmlhttp://m.shnenglu.com/qiaodong/archive/2006/12/13/16370.html#Feedback1http://m.shnenglu.com/qiaodong/comments/commentRss/16370.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/16370.html

故ȝ了一下自q使用l验Q以供参考用?/p>

  先注明一下,q里Q我们用m_listctrl来表CZ个CListCtrl的类对象Q?/p>

然后q里我们的ListCtrl都是report形式Q至于其他的如什么大图标Q小图标

的暂时不Ԍ毕竟report是大众话的用。其ơ,我们q里用条ƾ一Q条ƾ二

来描q第一点,W二点,q个是参照《Effective C++》的叫法Q俺觉得q么

叫比较COOL :)

 条款一Q设|ListCtrl的风?/p>

 在CSDN上常常看到有人问怎么讄风格的,他们ListCtrl的样子是一个列?/p>

Q有横条和竖条分界线Q然后选中一行,要整一行都选中Q而不是只有某一?/p>

被选中Q等{,q里l一个比较全面的讄Ҏ?/p>

//获得原有风格
 DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);
 dwStyle &= ~(LVS_TYPEMASK);
 dwStyle &= ~(LVS_EDITLABELS);

 //讄新风?br />    SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,

dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);


 //讄扩展风格
 DWORD styles =

LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES;

 ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,

styles );

其中LVS_EX_FULLROWSELECT 是前面说得整行选中

LVS_EX_GRIDLINES |格U(只适用与report风格的listctrlQ?/p>

LVS_EX_CHECKBOXES 前面加个checkbox

pListCtrl->SetExtendedStyle(  m_listctrl.GetExtendedStyle()

|LVS_EX_SUBITEMIMAGES);


q也是一个很重要的属性,q样的话Q可以在列表中加ICONQ记得windows?/p>

d理器吗Q你惛_得那Pq个属性也要加哦,q个我以后会讲的?/p>

条款二:加入列头

  q是一个比较实质的东西Q给列表框分列,然后加上列头

  代码说话Q来?/p>

  TCHAR rgtsz[2][10] = {_T("列头1"), _T("列头2")};
 
 LV_COLUMN lvcolumn;
 CRect rect;
 m_listctrl.GetWindowRect(&rect);
 for(int i=0;i<2;i++)
 {
   lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT
              | LVCF_WIDTH | LVCF_ORDER;
   lvcolumn.fmt = LVCFMT_LEFT;
   lvcolumn.pszText = rgtsz[i];
   lvcolumn.iSubItem = i;
   lvcolumn.iOrder = i;
   if(i==0)
   {
      lvcolumn.cx = rect.Width()*3/5 ;
   }
   else
     lvcolumn.cx = rect.Width()*2/5;
      

   m_listctrl.InsertColumn(i, &lvcolumn);
  }

q是插入两列的做法,你要插入20列?Q随便你Q依L葫芦~~

 lvcolumn.mask 中那个mask可以有各U属性,具体ȝmsdn吧,

 

条款三:把记录,插入列表框中

 int nIndex = m_listctrl.GetItemCount();

  LV_ITEM   lvitemAdd = {0};
  lvitemAdd.mask = LVIF_TEXT;
  lvitemAdd.iItem = nIndex ;
  lvitemAdd.iSubItem = 0;
  lvitemAdd.pszText =_T("毛毛1");;


  if (m_listctrl.InsertItem(&lvitemAdd) != -1)
  {
   LV_ITEM lvitem = {0};
   lvitem.mask = LVIF_TEXT;
   lvitem.iItem = nIndex ;
   lvitem.iSubItem = 1;
 
   lvitem.pszText =_T("毛毛2");
   m_listctrl.SetItem(&lvitem);
  
  }

nIndex 是当前的行数Q然后把新的一行,插在最下面Q?/p>

 

条款四:l列表中插入图标

 在report格式中,也能插入图标

 l箋代码说话

 m_image是个CImageList对象

 m_image.Create(16,16, TRUE|ILC_COLOR24, 3, 1);

 m_listctrl.SetImageList(&m_image,LVSIL_SMALL);

然后调用CImageList的成员函数int CImageList::Add( HICON hIcon );

把ICON插入到imagelistQ?/p>

 然后在插入记录的时?/p>

 lvitemAdd.mask = LVIF_TEXT; Q》 lvitemAdd.mask =

LVIF_TEXT|LVIF_IMAGE

 然后d一个lvitemAdd.iImage = n;

 q个n是imagelist中的序号Q表C是具体的哪一个图标,list么,呵呵

 

条款五: 插入记录时用额外的信息QlParam 的?/p>

   有时候,你想对于某一行,加入一些额外的信息Q那么就可以使用q个

lParam

  msdn是这么描q的Specifies the 32-bit value of the item

  我上ơ是Z在某一行加入一个信息,H口句柄Q然后是q么加的Q?/p>

  int nIndex = m_listctrl.GetItemCount();

  LV_ITEM   lvitemAdd = {0};
  lvitemAdd.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
  lvitemAdd.iItem = nIndex ;
  lvitemAdd.iSubItem = 0;
  lvitemAdd.pszText =_T("毛毛1");;

  lvitemAdd.iImage = n;
  lvitemAdd.lParam = (LPARAM)hwnd;(某个H口的窗口句?


  if (m_listctrl.InsertItem(&lvitemAdd) != -1)
  {
   LV_ITEM lvitem = {0};
   lvitem.mask = LVIF_TEXT;
   lvitem.iItem = nIndex ;
   lvitem.iSubItem = 1;
 
   lvitem.pszText =_T("毛毛2");
   m_listctrl.SetItem(&lvitem);
  
  }

okQ这是一个比较全的例子的Q又揺CONQ又使用PARAM?/p>

条款六 Q 点击列表框,获取选中行信?/p>

  响应NM_CLICK消息Q如果你有MSDNQ可以看刎ͼ有专门关于listview?/p>

NM_CLICK的介l?/p>

void CMyDlg::OnItemClick(NMHDR* pNMHDR, LRESULT* pResult)
{
 // TODO: Add your control notification handler code here
 int nItem = -1;
 
 LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;

 if(lpNMItemActivate != NULL)
 {
     nItem = lpNMItemActivate->iItem;
 }

}

现在nItem是点击选中那行的index了,有了indexQ获取那行的信息q难?/p>

Q?/p>

懒汉_难,因ؓ你还没讲Q晕Q那ql说

 

条款七: Ҏ行的indexQ获取该行的信息

 直接上代码吧

 LV_ITEM lvitem = {0};
   lvitem.iItem = nIndex;
   lvitem.iSubItem = 0;
   lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;

m_listctrl.GetItem(&lvitem)

q样Q就把nindex,W一列的信息取出来了Q包括刚才我们加入的ICON,和那?/p>

额外信息Q窗口句柄)Q?/p>

比如我要获取H口句柄Q就可以hwnd = (HWND)lvitem.lParam;

mask 用来指明你想获取那些信息

具体可以查msdn中LVITEM Structure的定义和CListCtrl::GetItem

 

条款八:用程序选中某一行,使之选中

选中之 

m_listctrl.SetItemState

(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);

不选中Q取消选中?/p>

m_listctrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);

 

条款九:获取当前所有选中的行Q多选)

  q个Q俺比较懒了,抄msdn的代码吧Q反正很?/p>

  

Example
// CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem

(IDC_YOURLISTCONTROL);
ASSERT(pListCtrl != NULL);

POSITION pos = pList->GetFirstSelectedItemPosition();
if (pos == NULL)
   TRACE0("No items were selected!\n");
else
{
  while (pos)
  {
     int nItem = pList->GetNextSelectedItem(pos);
     TRACE1("Item %d was selected!\n", nItem);
     // you could do your own processing on nItem here
  }
}

 

条款十:删除条款九中选中的行

  q个相对前面九个条款是比较麻烦的Q因为如果你要删除多行的话。往往要出?/p>

  比如Q我现在要删除第0行和W?行(列表的行序列是从0开始的Q?/p>

  那么好啊。我来删?/p>

  m_listctrl.DeleteItem(0)

        m_listctrl.DeleteItem(1)

  恭喜你,错了Q我好开心啊 Q)

  因ؓ你删除第0行以后,下面的行会往上移Q那么原来的W?行就变成了第0行,那么你再 m_listctrl.DeleteItem(1)Q那么删除的是原来的W2行,真麻烦,

   所以,只有从下往上删Q才是安全的Q先删的Q不会媄响后面的操作Q?/p>

    m_listctrl.DeleteItem(1)

        m_listctrl.DeleteItem(0)

  但有时候,我们也不知道要删除哪些行Q只知道要删除选中的那些行Q像条款九中的那?/p>

   如果我们q是?/p>

   

POSITION pos = m_listctrl.GetFirstSelectedItemPosition();
if (pos == NULL)
   TRACE0("No items were selected!\n");
else
{
  while (pos)
  {
     int nItem = m_listctrl.GetNextSelectedItem(pos);
   

 m_listctrl.DeleteItem(nItem );

  }
}

你就{着收尸?/p>

q时候我们就要B4微Y了,cx有GetLastselectedItemPosition 和GetPrevSelectedItem

多写一Ҏ员函Cd :(

 没办法,办法自己惻Iq里有个W办?/p>

 POSITION  sSelPos = NULL;

 while(sSelPos = m_listctrl.GetFirstSelectedItemPosition())
 {
        int nSelItem = -1;
         nSelItem = m_listctrl.GetNextSelectedItem(sSelPos);

         if(nSelItem >= 0 && nSelItem<m_listctrl.GetItemCount())
       {

             好了Q这个nSelItem 是我们要的DD

      }

}

GetNextSelectedItemq个函数Q看msdn的用法,其实是返回第一个的indexQ然后走C一个选中的行去,所以这么做也是安全的,在实际中Q俺也是q么做的Q测试也通过Q没问题?/p>

当然Q还有个办法Q先通过GetFirstSelectedItemPosition和GetNextSelectedItem

来获取所有的选中行的indexQ然后把q些index攑ֈ一个数l里Q然后再从下往上删

唉真ȝ啊,q要不定数组Q不说用new在堆上开吧,那么一个vectorL要的吧,ȝ?/p>

所以我暂时是用上述的办法来删除Q也供大家参考,希望能找到更好的办法?br />












乔栋 2006-12-13 15:18 发表评论
]]>listctrl的一些问?/title><link>http://m.shnenglu.com/qiaodong/archive/2006/12/13/16361.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Wed, 13 Dec 2006 03:44:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2006/12/13/16361.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/16361.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2006/12/13/16361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/16361.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/16361.html</trackback:ping><description><![CDATA[ <h2 class="diaryTitle">CListCtrl使用技?/h2>                                       <p><u><font color="#800080">CListCtrl使用技?/font></u></p><div id="3hnzdjj" class="postText"><p>以下未经说明Qlistctrl默认view 风格为report<br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,102)"><span style="COLOR: rgb(153,51,0)">1. CListCtrl 风格</span></span></h3><p>      LVS_ICON: 为每个item昄大图?br />      LVS_SMALLICON: 为每个item昄图?br />      LVS_LIST: 昄一列带有小图标的item<br />      LVS_REPORT: 昄item详细资料</p><p>      直观的理解:windows资源理器,“查看”标{下的“大图标Q小图标Q列表,详细资料?/p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">2. 讄listctrl 风格及扩展风?/span></h3><p>      LONG lStyle;<br />      lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前H口style<br />      lStyle &= ~LVS_TYPEMASK; //清除昄方式?br />      lStyle |= LVS_REPORT; //讄style<br />      SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//讄style<br /> <br />      DWORD dwStyle = m_list.GetExtendedStyle();<br />      dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrlQ?br />      dwStyle |= LVS_EX_GRIDLINES;//|格U(只适用与report风格的listctrlQ?br />      dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控g<br />      m_list.SetExtendedStyle(dwStyle); //讄扩展风格<br />  <br />      注:listview的styleh阅msdn<br />      <a >http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp</a><br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">3. 插入数据</span></h3><p><span style="COLOR: rgb(153,51,0)"></span><span style="COLOR: rgb(153,51,0)"></span>      m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入?br />      m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );<br />      int nRow = m_list.InsertItem(0, ?1?;//插入?br />      m_list.SetItemText(nRow, 1, “jacky?;//讄数据<br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(51,102,255)"><span style="COLOR: rgb(153,51,0)">4. 一直选中item</span></span></h3><span style="FONT-WEIGHT: bold">    </span>选中style中的Show selection alwaysQ或者在上面W?点中讄LVS_SHOWSELALWAYS<br /><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">5. 选中和取消选中一?/span></h3><p>    int nIndex = 0;<br />    //选中<br />    m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);<br />    //取消选中<br />    m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);<br /> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">6. 得到listctrl中所有行的checkbox的状?/span></h3><p>      m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);<br />      CString str;<br />      for(int i=0; i<m_list.GetItemCount(); i++)<br />      {<br />           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))<br />           {<br />                str.Format(_T("W?d行的checkbox为选中状?), i);<br />                AfxMessageBox(str);<br />           }<br />      }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">7. 得到listctrl中所有选中行的序号</span></h3><h3><span style="COLOR: rgb(153,51,0)"></span></h3><p><span style="COLOR: rgb(153,51,0)"><br /></span>      Ҏ一Q?br />      CString str;<br />      for(int i=0; i<m_list.GetItemCount(); i++)<br />      {<br />           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )<br />           {<br />                str.Format(_T("选中了第%d?), i);<br />                AfxMessageBox(str);<br />           }<br />      }</p><p>      Ҏ二:<br />      POSITION pos = m_list.GetFirstSelectedItemPosition();<br />      if (pos == NULL)<br />           TRACE0("No items were selected!\n");<br />      else<br />      {<br />           while (pos)<br />           {<br />                int nItem = m_list.GetNextSelectedItem(pos);<br />                TRACE1("Item %d was selected!\n", nItem);<br />                // you could do your own processing on nItem here<br />           }<br />      }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">8. 得到item的信?/span></h3><p>      TCHAR szBuf[1024];<br />      LVITEM lvi;<br />      lvi.iItem = nItemIndex;<br />      lvi.iSubItem = 0;<br />      lvi.mask = LVIF_TEXT;<br />      lvi.pszText = szBuf;<br />      lvi.cchTextMax = 1024;<br />      m_list.GetItem(&lvi);</p><p>      关于得到讄item的状态,q可以参考msdn文章<br />      Q173242: Use Masks to Set/Get Item States in CListCtrl<br />               <a >http://support.microsoft.com/kb/173242/en-us</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(51,102,255)"><span style="COLOR: rgb(153,51,0)">9. 得到listctrl的所有列的header字符串内?/span></span></h3><p>      LVCOLUMN lvcol;<br />      char  str[256];<br />      int   nColNum;<br />      CString  strColumnName[4];//假如??/p><p>      nColNum = 0;<br />      lvcol.mask = LVCF_TEXT;<br />      lvcol.pszText = str;<br />      lvcol.cchTextMax = 256;<br />      while(m_list.GetColumn(nColNum, &lvcol))<br />      { <br />           strColumnName[nColNum] = lvcol.pszText;<br />           nColNum++;<br />      }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">10. 使listctrl中一可见,x动滚动条</span></h3>    m_list.EnsureVisible(i, FALSE);<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">11. 得到listctrl列数</span></h3>    int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">12. 删除所有列</span></h3><p>      Ҏ一Q?br />         while ( m_list.DeleteColumn (0))<br />       因ؓ你删除了W一列后Q后面的列会依次向上Ud?/p><p>      Ҏ二:<br />      int nColumns = 4;<br />      for (int i=nColumns-1; i>=0; i--)<br />          m_list.DeleteColumn (i);<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">13. 得到单击的listctrl的行列号</span></h3><p>      dlistctrl控g的NM_CLICK消息相应函数<br />      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)<br />      {<br />           // Ҏ一Q?br />           /*<br />           DWORD dwPos = GetMessagePos();<br />           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );<br />   <br />           m_list.ScreenToClient(&point);<br />   <br />           LVHITTESTINFO lvinfo;<br />           lvinfo.pt = point;<br />           lvinfo.flags = LVHT_ABOVE;<br />     <br />           int nItem = m_list.SubItemHitTest(&lvinfo);<br />           if(nItem != -1)<br />           {<br />                CString strtemp;<br />                strtemp.Format("单击的是W?d行第%d?, lvinfo.iItem, lvinfo.iSubItem);<br />                AfxMessageBox(strtemp);<br />           }<br />          */<br />   <br />          // Ҏ?<br />          /*<br />           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;<br />           if(pNMListView->iItem != -1)<br />           {<br />                CString strtemp;<br />                strtemp.Format("单击的是W?d行第%d?,<br />                                pNMListView->iItem, pNMListView->iSubItem);<br />                AfxMessageBox(strtemp);<br />           }<br />          */<br />           *pResult = 0;<br />      }<br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">14. 判断是否点击在listctrl的checkbox?/span></h3><p>      dlistctrl控g的NM_CLICK消息相应函数<br />      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)<br />      {<br />           DWORD dwPos = GetMessagePos();<br />           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );<br />   <br />           m_list.ScreenToClient(&point);<br />   <br />           LVHITTESTINFO lvinfo;<br />           lvinfo.pt = point;<br />           lvinfo.flags = LVHT_ABOVE;<br />     <br />           UINT nFlag;<br />           int nItem = m_list.HitTest(point, &nFlag);<br />           //判断是否点在checkbox?br />           if(nFlag == LVHT_ONITEMSTATEICON)<br />           {<br />                AfxMessageBox("点在listctrl的checkbox?);<br />           } <br />           *pResult = 0;<br />      }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">15. 右键点击listctrl的item弹出菜单</span></h3><p>      dlistctrl控g的NM_RCLICK消息相应函数<br />      void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)<br />      {<br />           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;<br />           if(pNMListView->iItem != -1)<br />           {<br />                DWORD dwPos = GetMessagePos();<br />                CPoint point( LOWORD(dwPos), HIWORD(dwPos) );<br />    <br />                CMenu menu;<br />                VERIFY( menu.LoadMenu( IDR_MENU1 ) );<br />                CMenu* popup = menu.GetSubMenu(0);<br />                ASSERT( popup != NULL );<br />                popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );<br />           } <br />           *pResult = 0;<br />  }<br /></p><p><br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">16. item切换焦点?包括用键盘和鼠标切换item?Q状态的一些变化顺?/span></h3><p>      dlistctrl控g的LVN_ITEMCHANGED消息相应函数<br />      void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)<br />      {<br />           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;<br />           // TODO: Add your control notification handler code here<br />    <br />           CString sTemp;<br />  <br />           if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED && <br />            (pNMListView->uNewState & LVIS_FOCUSED) == 0)<br />           {<br />                sTemp.Format("%d losted focus",pNMListView->iItem);<br />           }<br />           else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&<br />               (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)<br />           {<br />                sTemp.Format("%d got focus",pNMListView->iItem);<br />           } <br />  <br />           if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&<br />            (pNMListView->uNewState & LVIS_SELECTED) == 0)<br />           {<br />                sTemp.Format("%d losted selected",pNMListView->iItem);<br />           }<br />           else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&<br />            (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)<br />           {<br />                sTemp.Format("%d got selected",pNMListView->iItem);<br />           }<br />    <br />           *pResult = 0;<br />      }</p><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">17. 得到另一个进E里的listctrl控g的item内容</span><span style="COLOR: rgb(51,102,255)"></span></h3><h3><span style="COLOR: rgb(51,102,255)"></span></h3><span style="COLOR: rgb(51,102,255)"></span><a >http://www.codeproject.com/threads/int64_memsteal.asp</a><br /><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(51,102,255)"><span style="COLOR: rgb(153,51,0)">18. 选中listview中的item</span></span></h3>Q131284: How To Select a Listview Item Programmatically<br /><a >http://support.microsoft.com/kb/131284/en-us</a><br /><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">19. 如何在CListView中用CListCtrl的派生类</span></h3><p><a >http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">20. listctrl的subitemd图标</span></h3><p>      m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);<br />      m_list.SetItem(..); //具体参数请参考msdn<br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">21. 在CListCtrl昄文gQƈҎ文gcd来显C图?/span></h3><p>      |上扑ֈ的代码,share<br />      BOOL CTest6Dlg::OnInitDialog()<br />      {<br />           CDialog::OnInitDialog();<br />   <br />           HIMAGELIST himlSmall;<br />           HIMAGELIST himlLarge;<br />           SHFILEINFO sfi;<br />           char  cSysDir[MAX_PATH];<br />           CString  strBuf;<br />  <br />           memset(cSysDir, 0, MAX_PATH);<br />   <br />           GetWindowsDirectory(cSysDir, MAX_PATH);<br />           strBuf = cSysDir;<br />           sprintf(cSysDir, "%s", strBuf.Left(strBuf.Find("<a href="file:///" ?="" )+1="">\\")+1</a>));<br />  <br />           himlSmall = (HIMAGELIST)SHGetFileInfo ((LPCSTR)cSysDir,  <br />                      0,  <br />                      &sfi, <br />                      sizeof(SHFILEINFO),  <br />                      SHGFI_SYSICONINDEX | SHGFI_SMALLICON );<br />   <br />           himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,  <br />                      0,  <br />                      &sfi,  <br />                      sizeof(SHFILEINFO),  <br />                      SHGFI_SYSICONINDEX | SHGFI_LARGEICON);<br />   <br />           if (himlSmall && himlLarge)<br />           {<br />                ::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,<br />                             (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);<br />                ::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,<br />                             (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);<br />           }<br />           return TRUE;  // return TRUE  unless you set the focus to a control<br />      }<br />  <br />      void CTest6Dlg::AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocument)<br />      {<br />           int nIcon = GetIconIndex(lpszFileName, FALSE, FALSE);<br />           CString strSize;<br />           CFileFind filefind;<br />  <br />           //  get file size<br />           if (filefind.FindFile(lpszFileName))<br />           {<br />                filefind.FindNextFile();<br />                strSize.Format("%d", filefind.GetLength());<br />           }<br />           else<br />                strSize = "0";<br />   <br />           // split path and filename<br />           CString strFileName = lpszFileName;<br />           CString strPath;<br />  <br />           int nPos = strFileName.ReverseFind('\\');<br />           if (nPos != -1)<br />           {<br />                strPath = strFileName.Left(nPos);<br />                strFileName = strFileName.Mid(nPos + 1);<br />           }<br />   <br />           // insert to list<br />           int nItem = m_list.GetItemCount();<br />           m_list.InsertItem(nItem, strFileName, nIcon);<br />           m_list.SetItemText(nItem, 1, strSize);<br />           m_list.SetItemText(nItem, 2, strFileName.Right(3));<br />           m_list.SetItemText(nItem, 3, strPath);<br />      }<br />  <br />      int CTest6Dlg::GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected)<br />      {<br />           SHFILEINFO sfi;<br />           memset(&sfi, 0, sizeof(sfi));<br />   <br />           if (bIsDir)<br />           {<br />            SHGetFileInfo(lpszPath,  <br />                         FILE_ATTRIBUTE_DIRECTORY,  <br />                         &sfi,  <br />                         sizeof(sfi),  <br />                         SHGFI_SMALLICON | SHGFI_SYSICONINDEX |<br />                         SHGFI_USEFILEATTRIBUTES |(bSelected ? SHGFI_OPENICON : 0));  <br />            return  sfi.iIcon;<br />           }<br />           else<br />           {<br />            SHGetFileInfo (lpszPath,  <br />                         FILE_ATTRIBUTE_NORMAL,  <br />                         &sfi,  <br />                         sizeof(sfi),  <br />                         SHGFI_SMALLICON | SHGFI_SYSICONINDEX |  <br />                         SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0));<br />            return   sfi.iIcon;<br />           }<br />           return  -1;<br />      }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">22. listctrl内容q行大数据量更新Ӟ避免闪烁</span></h3><p>      m_list.SetRedraw(FALSE);<br />      //更新内容<br />      m_list.SetRedraw(TRUE);<br />      m_list.Invalidate();<br />      m_list.UpdateWindow();<br />  <br />或者参?<br /></p><p><a >http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">23. listctrl排序 </span></h3><p>Q250614QHow To Sort Items in a CListCtrl in Report View<br /><a >http://support.microsoft.com/kb/250614/en-us</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">24. 在listctrl中选中某个item时动态改变其icon或bitmap</span></h3>Q141834: How to change the icon or the bitmap of a CListCtrl item in Visual C++<br /><a >http://support.microsoft.com/kb/141834/en-us</a><br /><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">25. 在添加item后,再InsertColumn()后导致整列数据移动的问题</span></h3><p>Q151897: CListCtrl::InsertColumn() Causes Column Data to Shift <br /><a >http://support.microsoft.com/kb/151897/en-us</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">26. 关于listctrlW一列始l居左的问题</span></h3><p>解决办法Q把W一列当一个虚列,从第二列开始插入列及数据,最后删除第一列?br />      <br />具体解释参阅   <a >http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp</a><br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">27. 锁定column header的拖?/span></h3><p><a >http://msdn.microsoft.com/msdnmag/issues/03/06/CQA/</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3 style="COLOR: rgb(153,51,0)">28. 如何隐藏clistctrl的列</h3><p>    把需隐藏的列的宽度设?,然后当该列为隐藏列Ӟ用上面第27点的锁定column 的拖动来实现<br /><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">29. listctrlq行大数据量操作Ӟ使用virtual list </span>   </h3><p><a >http://www.codeguru.com/cpp/controls/listview/advanced/article.php/c4151/</a><br /><a >http://www.codeproject.com/listctrl/virtuallist.asp</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">30. 关于item只能昄259个字W的问题</span></h3><p>解决办法Q需要在item上放一个edit?br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">31. 响应在listctrl的column header上的鼠标右键单击</span></h3><p>Q125694: How To Find Out Which Listview Column Was Right-Clicked<br /><a >http://support.microsoft.com/kb/125694/en-us</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">32. cM于windows资源理器的listview</span></h3><p>Q234310: How to implement a ListView control that is similar to Windows Explorer by using DirLV.exe<br /><a >http://support.microsoft.com/kb/234310/en-us</a><br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3 style="COLOR: rgb(153,51,0)">33. 在ListCtrl中OnTimer只响应两ơ的问题</h3><p>Q200054Q?br />PRB: OnTimer() Is Not Called Repeatedly for a List Control<br /><a >http://support.microsoft.com/kb/200054/en-us</a><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">34. 以下Z些ؓ实现各种自定义功能的listctrlzc?/span></h3><p>          (1)    <span style="COLOR: rgb(153,51,0)">拖放</span>        <br />                   <a >http://www.codeproject.com/listctrl/dragtest.asp</a></p><p>                   <span style="COLOR: rgb(153,51,0)">在CListCtrl和CTreeCtrl间拖?/span><br />                   <a >http://support.microsoft.com/kb/148738/en-us</a><br />  <br />          (2)    <span style="COLOR: rgb(153,51,0)">多功能listctrl</span><br />                   支持subitem可编辑,图标QradiobuttonQcheckboxQ字W串改变颜色的类<br />                   <a >http://www.codeproject.com/listctrl/quicklist.asp</a><br />  <br />                   <span style="COLOR: rgb(153,51,0)">支持排序Qsubitem可编辑,subitem图标Qsubitem改变颜色的类</span><br />                   <a >http://www.codeproject.com/listctrl/ReportControl.asp</a></p><p>          (3)    <span style="COLOR: rgb(153,51,0)">subitem中显C链接</span><br />                   <a >http://www.codeproject.com/listctrl/CListCtrlLink.asp</a></p><p>          (4)    <span style="COLOR: rgb(153,51,0)">subitem的tooltip提示</span><br />                   <a >http://www.codeproject.com/listctrl/ctooltiplistctrl.asp</a></p><p>          (5)   <span style="COLOR: rgb(153,51,0)"> subitem中显C度条</span>    <br />                   <a >http://www.codeproject.com/listctrl/ProgressListControl.asp</a><br />                   <a >http://www.codeproject.com/listctrl/napster.asp</a><br />                   <a >http://www.codeguru.com/Cpp/controls/listview/article.php/c4187/</a></p><p>          (6)    <span style="COLOR: rgb(153,51,0)">动态改变subitem的颜色和背景?/span><br />                    <a >http://www.codeproject.com/listctrl/highlightlistctrl.asp</a><br />                    <a >http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c4757/</a><br /> <br />          (7)    <span style="COLOR: rgb(153,51,0)">cvb属性对话框</span><br />                    <a >http://www.codeproject.com/listctrl/propertylistctrl.asp</a><br />                    <a >http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c995/</a><br />                    <a >http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c1041/</a><br />  <br />          (8)    <span style="COLOR: rgb(153,51,0)">选中subitem(只高亮选中的item)</span><br />                    <a >http://www.codeproject.com/listctrl/SubItemSel.asp</a><br />                    <a >http://www.codeproject.com/listctrl/ListSubItSel.asp</a><br />  <br />          (9)    <span style="COLOR: rgb(153,51,0)">改变行高</span><br />                    <a >http://www.codeproject.com/listctrl/changerowheight.asp</a><br />  <br />          (10)   <span style="COLOR: rgb(153,51,0)">改变行颜?/span><br />                    <a >http://www.codeproject.com/listctrl/coloredlistctrl.asp</a><br />  <br />          (11)   <span style="COLOR: rgb(153,51,0)">可编辑subitem的listctrl</span><br />                    <a >http://www.codeproject.com/listctrl/nirs2000.asp</a><br />                    <a >http://www.codeproject.com/listctrl/editing_subitems_in_listcontrol.asp</a><br />  <br />          (12)   <span style="COLOR: rgb(153,51,0)">subitem可编辑,插入comboboxQ改变行颜色Qsubitem的tooltip提示</span><br />                    <a >http://www.codeproject.com/listctrl/reusablelistcontrol.asp</a><br />  <br />          (13)   <span style="COLOR: rgb(153,51,0)">header 中允许多行字W串</span><br />                    <a >http://www.codeproject.com/listctrl/headerctrlex.asp</a><br />  <br />          (14)   <span style="COLOR: rgb(153,51,0)">插入combobox</span><br />                    <a >http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c979/</a><br />  <br />          (15)   <span style="COLOR: rgb(153,51,0)">d背景囄</span><br />                    <a >http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c4173/</a><br />                    <a >http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/</a><br />                    <a >http://www.vchelp.net/vchelp/archive.asp?type_id=9&class_id=1&cata_id=1&article_id=1088&search_term</a>=<br />    <br />          (16)  <span style="COLOR: rgb(153,51,0)">自适应宽度的listctrl</span><br />                    <a >http://www.codeproject.com/useritems/AutosizeListCtrl.asp</a><br /></p>          (17)  <span style="COLOR: rgb(153,51,0)">改变ListCtrl高亮时的颜色(默认?</span><br />                   处理<code><font face="新宋?> NM_CUSTOMDRAW <br />           </font><a ><font face="新宋?>http://www.codeproject.com/listctrl/lvcustomdraw.asp</font></a></code></div><img src ="http://m.shnenglu.com/qiaodong/aggbug/16361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2006-12-13 11:44 <a href="http://m.shnenglu.com/qiaodong/archive/2006/12/13/16361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OnClose和OnDestroyhttp://m.shnenglu.com/qiaodong/archive/2006/12/11/16287.html乔栋乔栋Mon, 11 Dec 2006 13:29:00 GMThttp://m.shnenglu.com/qiaodong/archive/2006/12/11/16287.htmlhttp://m.shnenglu.com/qiaodong/comments/16287.htmlhttp://m.shnenglu.com/qiaodong/archive/2006/12/11/16287.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/16287.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/16287.htmlOnClose()Q消息响应函敎ͼ响应WM_CLOSE消息Q当"关闭"按钮被单ȝ时候(而不是我们眼睛所见的对话框从屏幕上消失时Q,该函数被调用Q用户在响应OnOk()或者OnCancel()函数之后Q不会发送WM_CLOSE消息

OnDestroy()Q消息响应函敎ͼ响应WM_DESTROY消息Q当一个窗口即被销毁时Q被发?/p>

在单视图E序?Ҏ<<深入出MFC>>所?E序退出时执行的操作顺序ؓ
(1)用户点击退出按?发送了WM_CLOSE消息
(2)在WM_CLOSE消息的处理函C,调用DestroyWindow()
(3)在DestroyWindow()中发送了WM_DESTROY消息
(4)在WM_DESTROY消息中调用PostQuitMessage(),发送WM_QUIT消息,l束消息循环

lgQ程序先调用OnClose()Q也可能不调用)Q然后调用OnDestroy()Q必调用Q,所以,如果要进行程序结束时的清理工作,应该在OnDestroyQ)中,而不是在OnClose()Q否则就有可能会出现内存泄漏的危险了Q?/p>

乔栋 2006-12-11 21:29 发表评论
]]>
UpdateData (FALSE) (TRUE)http://m.shnenglu.com/qiaodong/archive/2006/12/11/16284.html乔栋乔栋Mon, 11 Dec 2006 12:41:00 GMThttp://m.shnenglu.com/qiaodong/archive/2006/12/11/16284.htmlhttp://m.shnenglu.com/qiaodong/comments/16284.htmlhttp://m.shnenglu.com/qiaodong/archive/2006/12/11/16284.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/16284.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/16284.html

乔栋 2006-12-11 20:41 发表评论
]]>
string tablehttp://m.shnenglu.com/qiaodong/archive/2006/12/07/16087.html乔栋乔栋Thu, 07 Dec 2006 06:38:00 GMThttp://m.shnenglu.com/qiaodong/archive/2006/12/07/16087.htmlhttp://m.shnenglu.com/qiaodong/comments/16087.htmlhttp://m.shnenglu.com/qiaodong/archive/2006/12/07/16087.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/16087.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/16087.html一个可以给人很多方便也能制造麻烦的家伙,今天我被他折腄不轻,加错一个就有出错的危险.

事后:
q个事情l我的教育很深刻,l致而烦琐的单工作更加重?因ؓ一个疏忽造成的结?有时候是无法
承担?



乔栋 2006-12-07 14:38 发表评论
]]>
CRECThttp://m.shnenglu.com/qiaodong/archive/2006/12/07/16077.html乔栋乔栋Thu, 07 Dec 2006 02:39:00 GMThttp://m.shnenglu.com/qiaodong/archive/2006/12/07/16077.htmlhttp://m.shnenglu.com/qiaodong/comments/16077.htmlhttp://m.shnenglu.com/qiaodong/archive/2006/12/07/16077.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/16077.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/16077.html左上右下,W二和第四参数决定上下位|?W一和第三参数决定左右位|?

乔栋 2006-12-07 10:39 发表评论
]]>
Unicode Debug和Debug有什么区别? http://m.shnenglu.com/qiaodong/archive/2006/11/30/15816.html乔栋乔栋Thu, 30 Nov 2006 08:13:00 GMThttp://m.shnenglu.com/qiaodong/archive/2006/11/30/15816.htmlhttp://m.shnenglu.com/qiaodong/comments/15816.htmlhttp://m.shnenglu.com/qiaodong/archive/2006/11/30/15816.html#Feedback0http://m.shnenglu.com/qiaodong/comments/commentRss/15816.htmlhttp://m.shnenglu.com/qiaodong/services/trackbacks/15816.html
Unicode   Debug是宽字符(UNICODE)版本Q每个字W占用两个字节的存储I间   普通的Debug是单?MBCS)版本Q一个是unicode工程Q另一是ansi工程?br />
 相对于ASCIIQUnicode为双字节长的字符集,到目前已定义了世界上l大多数文字的常用字QASCII字符集是它的子集Q即Unicode字符集兼容ASCII字符集。用Unicode最大的好处是可以应用E序方便地实现多语言支持Q不再基于CODEPAGE。微软的IE   5.0、WINDOWS   2000QOFFICE   97以上版都是基于UICODE的? 
            关于使用UNICODE的问题:因WINDOWS   95?8   不支持UNICODEQWINDOWS   NT?000Q完全支持,若要使基于UNICODE的应用程序在上述OS上运行,那是个较ȝ的问题,请参考微软经怹c:<<DEVELOPING   INTERNATIONAL   SOFTWARE   FOR   WINDOWS   95   AND   WINDOWS   NT>>   ---   NADINE   KANO  

乔栋 2006-11-30 16:13 发表评论
]]>
listctrl的菜?/title><link>http://m.shnenglu.com/qiaodong/archive/2006/11/29/15770.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Wed, 29 Nov 2006 02:48:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2006/11/29/15770.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/15770.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2006/11/29/15770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/15770.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/15770.html</trackback:ping><description><![CDATA[ <p> <br />void   dialog5::OnRclickList1(NMHDR*   pNMHDR,   LRESULT*   pResult)     <br />  {   <br />  //   TODO:   Add   your   control   notification   handler   code   here   <br />  CMenu   menu1,*menu2;   <br />  CPoint   point1;   <br />  menu1.LoadMenu(IDR_MENU1);   <br />  menu2=menu1.GetSubMenu(0);   <br />  ::GetCursorPos(&point1);   <br />  menu2->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,   <br />  point1.x,point1.y,this);   <br />    <br />  *pResult   =   0;   <br />  }   </p> <img src ="http://m.shnenglu.com/qiaodong/aggbug/15770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2006-11-29 10:48 <a href="http://m.shnenglu.com/qiaodong/archive/2006/11/29/15770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个关于结构体的问?/title><link>http://m.shnenglu.com/qiaodong/archive/2006/11/20/15449.html</link><dc:creator>乔栋</dc:creator><author>乔栋</author><pubDate>Mon, 20 Nov 2006 02:54:00 GMT</pubDate><guid>http://m.shnenglu.com/qiaodong/archive/2006/11/20/15449.html</guid><wfw:comment>http://m.shnenglu.com/qiaodong/comments/15449.html</wfw:comment><comments>http://m.shnenglu.com/qiaodong/archive/2006/11/20/15449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qiaodong/comments/commentRss/15449.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qiaodong/services/trackbacks/15449.html</trackback:ping><description><![CDATA[ <p>#include<stdio.h></p> <p>struct a<br />{<br /> int b;<br />};<br />struct b<br />{<br />    int a;<br />};<br />void main()<br />{<br /> a A;<br /> A.b = NULL;<br /> A.b = 1;<br /> <br /> b a;<br /> a.a = 3;<br />}</p> <p>在C的环境下Q会报错Q在C++的情况,q样的操作就是允许的?br />在C++的编译器中,允许结构体名作Z个变量名来对待?/p> <img src ="http://m.shnenglu.com/qiaodong/aggbug/15449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qiaodong/" target="_blank">乔栋</a> 2006-11-20 10:54 <a href="http://m.shnenglu.com/qiaodong/archive/2006/11/20/15449.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.bltt.net.cn" target="_blank">˾ƷۺϾþþ</a>| <a href="http://www.shisanshui.cn" target="_blank">þþþþϸ</a>| <a href="http://www.oqiang.cn" target="_blank">99þùں;Ʒ1ӳ</a>| <a href="http://www.jrsddk.cn" target="_blank">ձƷþþĻ</a>| <a href="http://www.y447.cn" target="_blank">Ʒþþþþø</a>| <a href="http://www.99yingyuan.cn" target="_blank">˾þþƷһ</a>| <a href="http://www.bekin.com.cn" target="_blank">žžþþƷ</a>| <a href="http://www.ppmm163.cn" target="_blank">ۺϾþһ</a>| <a href="http://www.shidaqizhong.cn" target="_blank">ٸþĻһ </a>| <a href="http://www.gkbv.cn" target="_blank">ѹ99þþ㽶</a>| <a href="http://www.chaoyuemobile.com.cn" target="_blank">91Ʒþþþþio </a>| <a href="http://www.bestsilm.cn" target="_blank">þ99Ʒ</a>| <a href="http://www.bjhaoruida.com.cn" target="_blank">ƷƵþþ</a>| <a href="http://www.dianwowang.cn" target="_blank">þþþ18</a>| <a href="http://www.tvue.cn" target="_blank">þԭƷӰԺ</a>| <a href="http://www.pr010.cn" target="_blank">þҹɫƷ</a>| <a href="http://www.hlbelss.org.cn" target="_blank">ݺɫۺϾþ</a>| <a href="http://www.v0008.cn" target="_blank">þþûɫƬ</a>| <a href="http://www.shebianfen.cn" target="_blank">պ뾫Ʒþһ</a>| <a href="http://www.riyuelitian.cn" target="_blank">ձþþþþĻ</a>| <a href="http://www.yzx777.cn" target="_blank">޹þþþƷ</a>| <a href="http://www.bhxs.net.cn" target="_blank">þùƷ͵99</a>| <a href="http://www.xjdht.cn" target="_blank">þAëƬѹۿ</a>| <a href="http://www.ezchem.cn" target="_blank">Ӱ7777þþƷˬ</a>| <a href="http://www.maituogangwan.cn" target="_blank">һaƬþëƬ</a>| <a href="http://www.vwdg.cn" target="_blank">þþƷ99Ʒ</a>| <a href="http://www.2046film.cn" target="_blank">ӰһѾþþþþþþ </a>| <a href="http://www.airyai.cn" target="_blank">þþþĸ</a>| <a href="http://www.psia.cn" target="_blank">þþþþѹۿ</a>| <a href="http://www.hfdsbw.cn" target="_blank">޾þþþþAV</a>| <a href="http://www.micgroup.cn" target="_blank">þ99Ʒ</a>| <a href="http://www.wanghaochuju.cn" target="_blank">Ʒþþ21p</a>| <a href="http://www.yweishang.cn" target="_blank">˼˼þ99ֻƵƷ66 </a>| <a href="http://www.liaojiaren.cn" target="_blank">㽶þþþþúݺɫ</a>| <a href="http://www.mxylzc.cn" target="_blank">þ99Ʒ鶹</a>| <a href="http://www.cn-yb.cn" target="_blank">þӰ㶮</a>| <a href="http://www.export-trade.com.cn" target="_blank">þþþþҹƷƷ</a>| <a href="http://www.p146.cn" target="_blank">޹ŮƷþþþá </a>| <a href="http://www.shdad.cn" target="_blank">þۺϾþۺϾþ</a>| <a href="http://www.sklly.cn" target="_blank">ھƷ˾þþþ</a>| <a href="http://www.aqbfrmi.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>