2009年9月22日
使用wininet
一般流程:
1,
BOOL AFXAPI AfxParseURLEx(
LPCTSTR pstrURL,
DWORD& dwServiceType,
CString& strServer,
CString& strObject,
INTERNET_PORT& nPort,
CString& strUsername,
CString& strPassword,
DWORD dwFlags = 0
); 使用該函數解析URP
其中 strServer :The first segment of the URL following the service type.
2,
GetHttpConnection()
3,
OpenRequest()
4,
AddRequestHeaders() 通用頭 域包含請求和響應消息都支持的頭域
5,
SendRequest
6,
QueryInfo
2009年5月20日
用pDC->SetBkMode(TRANSPARENT);
設置透明后,要改變控件的文字就會發生文字重疊,如果不使用透明就不會,請問在透明狀態下改變文字如何不發生重疊?
static的背景已經是透明的了,那么殘留的文本應該是畫在static的父窗口上的。
辦法有了:在給static 設置新的文本之后(不是之前!)刷新父窗口。
void CTestStaticDlg::OnTimer(UINT nIDEvent)
{
CString strTime;
CTime time = CTime::GetCurrentTime();
strTime = time.Format("%y年%m月%d日 %H:%M:%S");
GetDlgItem(IDC_STATIC)->SetWindowText(strTime);
GetDlgItem(IDC_STATIC)->GetParent()->RedrawWindow(); //就這兩句話而已,呵呵
CDialog::OnTimer(nIDEvent);
}
2009年4月23日
PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_KEYDOWN )
{
switch( pMsg->wParam )
{
case VK_RETURN:
AfxMessageBox("return");
}
}
return CDialog::PreTranslateMessage(pMsg);
}
重寫該函數, 就可以截獲鍵盤消息.
2009年4月22日
1
void CTestdbDlg::OnOK()
2

{
3
// TODO: Add extra validation here
4
//AfxOleInit();
5
CoInitialize(NULL); //初始化
6
//打開數據庫
7
_ConnectionPtr m_pConnection;
8
try
9
{
10
m_pConnection.CreateInstance("ADODB.Connection");
11
// ASSERT(m_pConnection != NULL);
12
_bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False";
13
m_pConnection->ConnectionTimeout=5; //設置超時時間為5秒
14
m_pConnection->Open(strConnect,"","",adModeUnknown);
15
}
16
catch(_com_error e)
17
{
18
AfxMessageBox(e.ErrorMessage());
19
}
20
_RecordsetPtr m_pRecordset; //一個指向Recordset對象的指針
21
//查詢
22
CString sql="select sno From [sn] ";
23
try
24
{
25
m_pRecordset.CreateInstance(__uuidof(Recordset));
26
m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
27
while(!m_pRecordset->GetadoEOF())
28
{
29
_variant_t var;
30
var=m_pRecordset->GetCollect("sno");
31
if(var.vt != VT_NULL)
32
{
33
CString strValue =(LPCSTR)_bstr_t(var);
34
MessageBox(strValue);
35
}
36
m_pRecordset->MoveNext();
37
}
38
}
39
catch(_com_error e)/**////捕捉異常
40
{
41
AfxMessageBox(e.ErrorMessage());
42
AfxMessageBox(e.Source());
43
AfxMessageBox(e.Description());
44
}
45
//更新
46
_bstr_t sql2="update [sn] set name='sss' where sno=3";
47
_variant_t RecordsAffected;
48
m_pConnection->Execute(sql2,&RecordsAffected,adCmdText);
49
m_pRecordset->Close();/**////關閉記錄集
50
m_pConnection->Close();/**////關閉連接
51
// AfxOleTerm();
52
CoUninitialize();
53
54
}
在連接數據庫之前要添加#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF")
路徑根據本機設置修改
rename("EOF","adoEOF") //重新命名
2009年4月20日
在對話框類中添加如下函數
BOOL CRegister::PreTranslateMessage(MSG *pMsg)
{
if(WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
{
if(pMsg->wParam == VK_RETURN ||pMsg->wParam ==VK_ESCAPE)//按回車鍵不響應
{
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
2009年3月25日
OO的精髓是繼承、封裝和多態
繼承就是說:你的愛人會繼承做你女朋友時的相當多的優點,因為這些優點對你都是public的,但同時她也會繼承以前的更多的缺點,因為其中很多缺點對你是protected,繼承后才讓你能訪問。
封裝就是說:許多不想讓你知道的東西她會封裝起來,你只能通過她提供的有限的接口來訪問到被接口函數做了手腳的東西。
多態就是說:在她心情不同時,你去訪問以她為參數的一個函數得到的結果是不同的。比如對她說“我愛你” 。
2009年3月21日
虛函數有時候也被稱為方法。它可以使有差異的實體對象公用一種方法實現不同的操作。
虛函數能克服類型域解決方案中的缺陷,它使程序員能夠在基類聲明一些能夠在各個派生類里面重新定義的函數。編譯器和裝載程序能保證對象和應用于他們的函數之間的正確對應關系。
class Employee
{
string name;
public:
Employee(const string &name);
virtual void print() const;
}
void Employee::print() const
{
cout<<name<endl;
}
關鍵字virtual指明print的作用就像是一個界面,既可以服務本類print函數,又可以服務于派生類的print函數。對于派生類定義的print函數,編譯器保證對于生成的每一個實體對象都能調用正確的print函數。
在派生類中對于有關函數的參數類型必須于虛函數的的參數類型相同,但可以在返回值類型上不同。
所謂的多態性就是從Employee中取得了正確的行為,而不依賴于實際使用的是哪一種Employee。一個帶有虛函數的類型被稱為是一個多態類型。在C++要取得多態行為,被調用的函數必須是虛函數,而對象必須是通過指針或者引用操作。如果直接操作一個對象(而不是通過指針或者引用),它的確切類型已經被編譯器所知,就不需要多態了。
為了實現多態性,編譯器必須在類的每個對象里存儲某種類型信息,并且在需要虛函數的時候利用這些信息。在典型的實例中,所需要的空間是一個指針。只有那些包含了虛函數的類才需要這點空間,而不是任何對象,甚至不是任何派生類的對象。使用時,只需要為含有虛函數的類付出開銷。
2009年3月20日
#include <iostream>
using namespace std;
class A
{
friend double count(A&);
public:
A(double t, double r):total(t),rate(r){}
private:
double total;
double rate;
};
double count(A&a)
{
a.total+=a.rate*a.total;
return a.total;
}
int main(void )
{
A x(100,0.5),y(50,0.1);
cout<<count(x)<<" "<<count(y)<<endl;
cout<<count(x) <<"\n";
return 0;
}
這段代碼是什么意思??
2009年3月19日
類成員默認訪問權限為私有(private),結構體成員默認訪問權限為公共public
從class繼承默認是私有繼承,從struct繼承默認是公有繼承。
結構體類型不包括操作。
(一)const修飾參數。const只能修飾輸入參數。
如果輸入參數是指針型的,用const修飾可以防止指針被意外修改。
(二)const修飾函數返回值。
函數返回const指針,表示該指針不能被改動,只能把該指針賦給const修飾的同類型指針變量。
(三)const+成員函數。
任何不修改數據成員的函數都應該聲明為const類型,如果const成員函數修改了數據成員或者調用了其他函數修改數據成員,編譯器都將報錯!
(四)const 修飾變量,表示該變量不能被修改。
1、const char *p 表示 指向的內容不能改變
2、char * const p,就是將P聲明為常指針,它的地址不能改變,是固定的,但是它的內容可以改變。
3、這種const指針是前兩種的結合,使得指向的內容和地址都不能發生變化.
const double pi = 3.14159;
const double *const pi_ptr = π