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

📄 05o007.htm

📁 VC知识库5_chm_decompile_20040520_210715
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>

<body>

<div align="justify">
  <table border="0" width="100%" class="font" height="57">
    <tr>
      <td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
      <font color="#800080">VC知识库(五)</font>
      </td>
      <td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
      <font color="#800080">www.vckbase.com</font>
      </td>
    </tr>
    <tr>
      <td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
      <hr>
      </td>
    </tr>
    <tr>
      <td width="100%" height="17" class="header" valign="top" align="center" colspan="2">
      <small><big>几个编程技巧</big></small>
      </td>
    </tr>
    <tr>
      <td width="100%" height="17" class="info" align="center" colspan="2">
      </td>  
    </tr>  
    <tr> 
      <td width="100%" height="22" class="font" colspan="2">
        <hr>
      </td>  
    </tr> 
    <tr> 
      <td width="100%" height="5" class="font" colspan="2"> 
<small>

<p>1:要生成平面工具栏是十分简单的。你只需要在CMainFrame的OnCreate()函数中添<br>
加一句话就可以(必须加在工具栏生成函数之后,因为MFC在生成工具栏时,要清除<br>
其式样)<br>
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) <br> 
{   if(!m_wndToolBar.Create(this) <br>
  //!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) <br>
   { <br> 
   TRACE0(&quot;Failed to create toolbar\n&quot;); <br> 
   return -1; // fail to create <br> 
   } <br> 
  m_wndToolBar.ModifyStyle(0,TBSTYLE_FLAT);}//设置工具栏为平面格式 <br>
<br>
 2:从窗口中删除了极大按钮并设置了初始位置和大小:<br>
 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&amp; cs)<br> 
{cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;<br> 
&nbsp;&nbsp;&nbsp; // Set the position of the window to the upper -left corner.<br> 
cs.x =cs. y =0;<br> 
//Set the width and height of the window .<br> 
cs. cx=GetSystemMetrics (SM_CXSCREEN);<br> 
cs. cy=GetSystemMetrics (SM_CYSCREEN) /2;<br> 
return CFrameWnd::PreCreateWindow(cs);} <br>
3:用户可以在代码的任何地方调用Cwnd::ShowWindow将窗口设置为极大或极小。<br>
BOOL CSampleApp : : InitInstance ( )<br> 
{ <br> 
pMainWnd -&gt;Show Window (SW_SHOWMINMIZED或者SW_SHOWMAXIMIZED);}<br> 
4:如何移动窗口 <br> 
调用CWnd : : SetWindowPos并指定SWP_NOSIZE标志。目的位置与父窗口有关<br> 
(顶层窗口与屏幕有关)。调用CWnd : : MoveWindow时必须要指定窗口的大小。<br> 
//Move window to positoin 100 , 100 of its parent window .<br> 
SetWindowPos (NULL, 100 , 100 , 0 , 0 , SWP_NOSIZE |SWP_NOACTIVATE);<br> 
5:如何改变视窗的背景颜色<br> 
Windows向窗口发送一个WM_ERASEBKGND消息通知该窗口擦除背景,可以使用<br> 
ClassWizard重载该消息的缺省处理程序来擦除背景(实际是画),并返回TRUE以<br> 
防止Windows擦除窗口。 <br> 
BOOL CBoxView::OnEraseBkgnd(CDC* pDC) <br> 
{CBrush brush(RGB (128 , 0 , 128) );<br> 
// Select the brush into the device context .<br> 
CBrush* pOldBrush = pDC-&gt;SelectObject (&amp;brush);.<br> 
CRect rcClip ;<br> 
pDC-&gt;GetClipBox (&amp;rcClip);//Paint the area.<br> 
pDC-&gt; PatBlt (rcClip.left , rcClip.top ,rcClip.Width() , rcClip.Height() ,PATCOPY );<br> 
pDC-&gt;SelectObject (pOldBrush );<br> 
return TRUE;}<br> 
<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
 
</p> 
 
 
<p>1、取得系统时间<br> 
方法:<br> 
SYSTEMTIME systime;<br> 
::GetSystemTime(&amp;systime);<br> 
CTime time(systime);<br> 
<br> 
2、在程序中添加ODBC数据源<br> 
方法:使用SQLConfigDataSource函数。例如:<br> 
SQLConfigDataSource(NULL,ODBC_ADD_DSN,<br> 
(LPSTR)&quot;SQL Server&quot;,<br> 
(LPSTR)&quot;DSN=medicine1998\0&quot;<br> 
&quot;SERVER=DEC\0&quot;<br> 
&quot;DATABASE=medicine1998\0&quot;))//添加一个ODBC数据源,其类型为<br> 
//SQL Server,服务器为DEC,名字为medicine1998,数据库为medicine1998<br> 
<br> 
3、在Visual C++中使用DBGrid控件的方法<br> 
(1)、插入一个MicrosoftRemoteData控件;<br> 
(2)、设定其DataSource为所需要的ODBC数据源;<br> 
(3)、设定用户名和密码;<br> 
(4)、写入SQL查询语句;<br> 
(5)、插入一个DBGrid控件;<br> 
(6)、设定为绑定方式;<br> 
(7)、设定其绑定的数据源为前面插入的MicrosoftRemoteData控件的ID;<br> 
(8)、由于只能修改前两列的列头显示(至少我不知道如何去修改第3列),所以为了重新设定每一列的列头显示,同时也是为了指定显示的列,应该修改前面MicrosoftRemoteData控件中的查询语句,指定获取列和更改列名,例如:select  
name as 姓名,phone as 电话 from address。此语句就是从表address中选取name和phone两列,并指定了显示的列名为“姓名”和“电话”。<br> 
<br> 
4、去掉在主窗口标题上显示&quot;Untitled - MyApp.&quot;<br> 
方法一:重载CDocument的虚函数&quot;SetTitle&quot;:<br> 
void CMyDoc::SetTitle(LPCTSTR lpszTitle) <br> 
{<br> 
CDocument::SetTitle(&quot;MyTitle&quot;);<br> 
}<br> 
*这个方法是将标题改为&quot;MyTitle - MyApp&quot;<br> 
方法二:在程序中的任何位置调用下面的函数:<br> 
(AfxGetMainWnd( ))-&gt;SetWindowText(&quot;MyApp&quot;);<br> 
*这个方法是将标题改为&quot;MyApp&quot;,但是每当一个文档对象被创建时,MFC就会加上文档名<br> 
方法三:重载CFrameWnd的虚函数&quot;OnUpdateFrameTitle&quot;<br> 
void CMainFrame::OnUpdateFrameTitle(BOOL Nada) <br> 
{<br> 
// get app name from string table resource<br> 
//----------------------------------------<br> 
CString csAppName;<br> 
csAppName.Format(AFX_IDS_APP_TITLE); <br> 
// Set caption of main frame window<br> 
//---------------------------------<br> 
SetWindowText(csAppName);<br> 
}<br> 
*注意,在微软的联机帮助中是找不到这个函数的,在新的版本中也可能不支持这个函数,所以要慎用<br> 
方法四:最好的和最安全的方法,就是改写窗口的属性<br> 
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&amp; cs)<br> 
{<br> 
cs.style &amp;= ~(LONG) FWS_ADDTOTITLE;<br> 
<br> 
return CFrameWnd::PreCreateWindow(cs);<br> 
}<br> 
<br> 
5、在ODBC编程中,在过滤器中可以用参数取代过滤字符串,以便在运行时动态改变过滤器,但是该参数必须用如下方法声明:<br> 
(1)在记录集的定义中添加成员参数:<br> 
class CStudentSet : public CRecordset<br> 
{<br> 
// Field/Param Data<br> 
//{{AFX_FIELD(CStudentSet, CRecordset)<br> 
CString m_strFirstName;<br> 
CString m_strLastName;<br> 
CString m_strStudentID;<br> 
CString m_strGradYear;<br> 
//}}AFX_FIELD<br> 
<br> 
CString m_strGradYrParam; //成员参数<br> 
};<br> 
(2)改变在CPP文件中的DoFieldExchange成员函数,并且对每一个你添加在类中的成员参数都调用一次RFX函数,如下:<br> 
pFX-&gt;SetFieldType( CFieldExchange::param );//指示以下给出的是参数绑定<br> 
// RFX calls for parameter data members<br> 
//在此处加入RFX调用:,例如:<br> 
pFX-&gt;RFX_Text(pFX,&quot;bookname&quot;, m_strGradYrParam);<br> 
*其中,bookname是要在其上添加参数的列名,后面是参数名。<br> 
(3)在你的recordset类的构建函数中,增加反映参数个数的m_nParams成员变量的值。<br> 
(4)然后可以在你的SQL过滤串中以?代替可变过滤参数了,这种对应是一一对应的,即?的顺序要严格遵守RFX调用的顺序。然后给出过滤参数的值,就可以用此值代替?了。注意,该过滤参数的值一定要在数据源打开之前给定。</small> 
</p>  
      </td>     
    </tr>    
    <tr> 
      <td width="100%" height="12" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr> 
      <td width="100%" height="6" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr> 
      <td width="100%" height="8" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr>    
      <td width="100%" height="17" class="font" colspan="2"></td>     
    </tr>    
  </table>     
</div>     
     
</body>     
     
</html>     

⌨️ 快捷键说明

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