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
); 使用該函數(shù)解析URP
其中 strServer :The first segment of the URL following the service type.
2,
GetHttpConnection()
3,
OpenRequest()
4,
AddRequestHeaders() 通用頭 域包含請求和響應(yīng)消息都支持的頭域
5,
SendRequest
6,
QueryInfo
2009年5月20日
用pDC->SetBkMode(TRANSPARENT);
設(shè)置透明后,要改變控件的文字就會發(fā)生文字重疊,如果不使用透明就不會,請問在透明狀態(tài)下改變文字如何不發(fā)生重疊?
static的背景已經(jīng)是透明的了,那么殘留的文本應(yīng)該是畫在static的父窗口上的。
辦法有了:在給static 設(shè)置新的文本之后(不是之前!)刷新父窗口。
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);
}
重寫該函數(shù), 就可以截獲鍵盤消息.
2009年4月22日
1
void CTestdbDlg::OnOK()
2

{
3
// TODO: Add extra validation here
4
//AfxOleInit();
5
CoInitialize(NULL); //初始化
6
//打開數(shù)據(jù)庫
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; //設(shè)置超時(shí)時(shí)間為5秒
14
m_pConnection->Open(strConnect,"","",adModeUnknown);
15
}
16
catch(_com_error e)
17
{
18
AfxMessageBox(e.ErrorMessage());
19
}
20
_RecordsetPtr m_pRecordset; //一個(gè)指向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();/**////關(guān)閉記錄集
50
m_pConnection->Close();/**////關(guān)閉連接
51
// AfxOleTerm();
52
CoUninitialize();
53
54
}
在連接數(shù)據(jù)庫之前要添加#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF")
路徑根據(jù)本機(jī)設(shè)置修改
rename("EOF","adoEOF") //重新命名
2009年4月20日
在對話框類中添加如下函數(shù)
BOOL CRegister::PreTranslateMessage(MSG *pMsg)
{
if(WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
{
if(pMsg->wParam == VK_RETURN ||pMsg->wParam ==VK_ESCAPE)//按回車鍵不響應(yīng)
{
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
2009年3月25日
OO的精髓是繼承、封裝和多態(tài)
繼承就是說:你的愛人會繼承做你女朋友時(shí)的相當(dāng)多的優(yōu)點(diǎn),因?yàn)檫@些優(yōu)點(diǎn)對你都是public的,但同時(shí)她也會繼承以前的更多的缺點(diǎn),因?yàn)槠渲泻芏嗳秉c(diǎn)對你是protected,繼承后才讓你能訪問。
封裝就是說:許多不想讓你知道的東西她會封裝起來,你只能通過她提供的有限的接口來訪問到被接口函數(shù)做了手腳的東西。
多態(tài)就是說:在她心情不同時(shí),你去訪問以她為參數(shù)的一個(gè)函數(shù)得到的結(jié)果是不同的。比如對她說“我愛你” 。
2009年3月21日
虛函數(shù)有時(shí)候也被稱為方法。它可以使有差異的實(shí)體對象公用一種方法實(shí)現(xiàn)不同的操作。
虛函數(shù)能克服類型域解決方案中的缺陷,它使程序員能夠在基類聲明一些能夠在各個(gè)派生類里面重新定義的函數(shù)。編譯器和裝載程序能保證對象和應(yīng)用于他們的函數(shù)之間的正確對應(yīng)關(guān)系。
class Employee
{
string name;
public:
Employee(const string &name);
virtual void print() const;
}
void Employee::print() const
{
cout<<name<endl;
}
關(guān)鍵字virtual指明print的作用就像是一個(gè)界面,既可以服務(wù)本類print函數(shù),又可以服務(wù)于派生類的print函數(shù)。對于派生類定義的print函數(shù),編譯器保證對于生成的每一個(gè)實(shí)體對象都能調(diào)用正確的print函數(shù)。
在派生類中對于有關(guān)函數(shù)的參數(shù)類型必須于虛函數(shù)的的參數(shù)類型相同,但可以在返回值類型上不同。
所謂的多態(tài)性就是從Employee中取得了正確的行為,而不依賴于實(shí)際使用的是哪一種Employee。一個(gè)帶有虛函數(shù)的類型被稱為是一個(gè)多態(tài)類型。在C++要取得多態(tài)行為,被調(diào)用的函數(shù)必須是虛函數(shù),而對象必須是通過指針或者引用操作。如果直接操作一個(gè)對象(而不是通過指針或者引用),它的確切類型已經(jīng)被編譯器所知,就不需要多態(tài)了。
為了實(shí)現(xiàn)多態(tài)性,編譯器必須在類的每個(gè)對象里存儲某種類型信息,并且在需要虛函數(shù)的時(shí)候利用這些信息。在典型的實(shí)例中,所需要的空間是一個(gè)指針。只有那些包含了虛函數(shù)的類才需要這點(diǎn)空間,而不是任何對象,甚至不是任何派生類的對象。使用時(shí),只需要為含有虛函數(shù)的類付出開銷。
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日
類成員默認(rèn)訪問權(quán)限為私有(private),結(jié)構(gòu)體成員默認(rèn)訪問權(quán)限為公共public
從class繼承默認(rèn)是私有繼承,從struct繼承默認(rèn)是公有繼承。
結(jié)構(gòu)體類型不包括操作。
(一)const修飾參數(shù)。const只能修飾輸入?yún)?shù)。
如果輸入?yún)?shù)是指針型的,用const修飾可以防止指針被意外修改。
(二)const修飾函數(shù)返回值。
函數(shù)返回const指針,表示該指針不能被改動,只能把該指針賦給const修飾的同類型指針變量。
(三)const+成員函數(shù)。
任何不修改數(shù)據(jù)成員的函數(shù)都應(yīng)該聲明為const類型,如果const成員函數(shù)修改了數(shù)據(jù)成員或者調(diào)用了其他函數(shù)修改數(shù)據(jù)成員,編譯器都將報(bào)錯(cuò)!
(四)const 修飾變量,表示該變量不能被修改。
1、const char *p 表示 指向的內(nèi)容不能改變
2、char * const p,就是將P聲明為常指針,它的地址不能改變,是固定的,但是它的內(nèi)容可以改變。
3、這種const指針是前兩種的結(jié)合,使得指向的內(nèi)容和地址都不能發(fā)生變化.
const double pi = 3.14159;
const double *const pi_ptr = π