建議文件conn.inc
1
<%
2
set conn=server.createobject("adodb.connection")
3
provider="provider=microsoft.jet.oledb.4.0;"
4
DBPath ="data source=" & Server.MapPath("db.mdb")
5
conn.Open provider & DBPath
6
%>
然后再每個(gè)頁(yè)前面加一句<!--#include file="conn.inc--">
posted @
2008-06-08 21:54 天書(shū) 閱讀(146) |
評(píng)論 (0) |
編輯 收藏
Public Function SplitPageShow(ByRef rs)
rs.PageSize = 5 'pagesize屬性指定了每頁(yè)要顯示的記錄條數(shù)
Page = "1"
Page = CLng(Request("Page")) 'string型轉(zhuǎn)化為long型
If Page < 1 Then Page = 1
If Page > rs.PageCount Then Page = rs.PageCount
If Page <> 1 Then
Response.Write "<A HREF=Manage.asp?Page=1>第一頁(yè)</A>"
Response.Write "<A HREF=Manage.asp?Page="& (Page-1) & ">上一頁(yè)</A>"
End If
If Page <> rs.PageCount Then
Response.Write "<A HREF=Manage.asp?Page=" & (Page+1) & ">下一頁(yè)</A>"
Response.Write "<A HREF=Manage.asp?Page="& rs.PageCount & ">最后一頁(yè)</A>"
End If
Response.write"頁(yè)碼:" & Page & "/" & rs.PageCount & "</font>"
'每一頁(yè)的顯示
'循環(huán)顯示每條記錄
rs.AbsolutePage = Page '把頁(yè)碼賦給absolutepage屬性從而知當(dāng)前頁(yè)的首條記錄號(hào)
For iPage = 1 To rs.PageSize
Response.WRITE "<TR><TD bgcolor='#FFFFFF'>" & rs("ID") & "</TD>"
Response.WRITE "<TD bgcolor='#FFFFFF'>" & rs("Title") & "</TD>"
Response.WRITE "<TD bgcolor='#FFFFFF'>" & rs("CName") & "</TD>"
Response.WRITE "<TD bgcolor='#FFFFFF'><a href='Update.asp?id="&rs("ID") &"'>修改</a></TD>"
Response.WRITE "<TD bgcolor='#FFFFFF'><a href='DeleteProcess.asp?id="& rs("ID") &"'>刪除</a></TD></TR>"
rs.MoveNext
If rs.EOF Then Exit For
Next

End Function
posted @
2008-06-08 21:44 天書(shū) 閱讀(142) |
評(píng)論 (0) |
編輯 收藏
事件是最實(shí)用的委托應(yīng)用程序之一。
EventHandler這是一個(gè)事件委托,定義在system.EventHandler;
btnOne.Click+=new EventHandler(Button_Click);
btnTwo.Click+=new EventHandler(Button_Click);
EventHandler委托沒(méi)有返回值,參數(shù)必需是object和EventArgs
private void Button_Click(object sender,Eventargs e)
{
}
上面定義的是一個(gè)接收器
操作系統(tǒng)對(duì)每個(gè)輸入設(shè)備產(chǎn)生的操作,如按下MOUSE或鍵盤,就會(huì)發(fā)送一條消息,應(yīng)用程序就得捕獲消息,并根據(jù)消息調(diào)用委托,通過(guò)委托調(diào)用相應(yīng)的過(guò)程處理消息,沒(méi)有處理的消息再發(fā)送給操作系統(tǒng),由操作系統(tǒng)處理。
發(fā)送消息:按下MOUSE左鍵,首先由操作系統(tǒng)捕獲交給當(dāng)前應(yīng)用程序,再由當(dāng)前應(yīng)用程序交給當(dāng)前窗口,如果當(dāng)前窗口處理完就告訴應(yīng)用程序由應(yīng)用程序告訴操作系統(tǒng)。如果當(dāng)前程序沒(méi)的處理也告訴操作系統(tǒng),由它處理。如果當(dāng)前窗口處理就根據(jù)當(dāng)前窗口的情況及狀態(tài)通知委托,由委托調(diào)用用定義的處理過(guò)程,或者交回操作系統(tǒng)。
posted @
2008-05-20 12:53 天書(shū) 閱讀(204) |
評(píng)論 (0) |
編輯 收藏
1:地板透明化(注:透明物體最后畫(huà)出)
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE );
g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA );
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
2:畫(huà)出反射對(duì)象(注:一份頂點(diǎn)數(shù)據(jù)通過(guò)矩陣變換畫(huà)出反射對(duì)象)
D3DXMATRIXA16 tmp;
D3DXMatrixScaling(&tmp,1,-1,1);//通過(guò)放縮矩陣來(lái)實(shí)現(xiàn)倒影(或D3DXMatrixReflect(&tmp,&plane);)
3:Stencil Buffer 模板緩存(啟用Stencil Buffer保證轉(zhuǎn)到地板下面時(shí)看不到實(shí)際存在的反射物體以免漏餡)
鏡面既要最先畫(huà)又要最后畫(huà),那么畫(huà)兩遍,最先畫(huà)時(shí)設(shè)置Aphha混合如下不改變后臺(tái)緩存只是在模板緩存中標(biāo)記鏡面區(qū)域?yàn)?.
最先畫(huà)地板時(shí):
//設(shè)置模板緩存
g_pd3dDevice->SetRenderState(D3DRS_STENCILENABLE,true);
g_pd3dDevice->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS);
g_pd3dDevice->SetRenderState(D3DRS_STENCILREF,0x1);
g_pd3dDevice->SetRenderState(D3DRS_STENCILMASK,0xffffffff);
g_pd3dDevice->SetRenderState(D3DRS_STENCILWRITEMASK,0xffffffff);
g_pd3dDevice->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP);
g_pd3dDevice->SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_KEEP);
g_pd3dDevice->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_REPLACE);
//繪制地板鏡面
g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ZERO);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);
繪制物體影像時(shí)啟用模板緩存并對(duì)其函數(shù)狀態(tài)進(jìn)行設(shè)置:
g_pd3dDevice->SetRenderState(D3DRS_STENCILENABLE,true);
g_pd3dDevice->SetRenderState( D3DRS_STENCILFUNC,D3DCMP_EQUAL);
最后在渲染時(shí)照常:
g_pd3dDevice->SetStreamSource( 0, obj.g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->SetIndices( obj.g_pIB );
g_pd3dDevice->SetTexture( 0, g_pTexture[obj.textureID] ); //設(shè)置紋理
g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,obj.numOfVertex,0,obj.numOfFace);
其中 g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,obj.numOfVertex,0,obj.numOfFace);這句話根據(jù)模板緩存的設(shè)置及開(kāi)啟情況,寫(xiě)入后臺(tái)緩沖區(qū)的同時(shí)寫(xiě)入模板緩存。或在與模板緩存中數(shù)據(jù)比較后決定是否要往后臺(tái)緩沖區(qū)中寫(xiě)。
posted @
2008-05-17 19:25 天書(shū) 閱讀(1977) |
評(píng)論 (3) |
編輯 收藏
D3D中燈光的表現(xiàn)注意事項(xiàng):
1:一定要注意平面法向量的方向,進(jìn)而再確定光源的位置。到底在平面的哪一側(cè)才能把平面照亮。
2:因?yàn)辄c(diǎn)光源中只有少數(shù)幾條對(duì)平面其作用的光線,所以當(dāng)平面離光源越遠(yuǎn)(照亮范圍內(nèi))照亮的區(qū)域越大。
3:光源照射后渲染三角形時(shí)當(dāng)平面被分割的三角形越多,三角形頂點(diǎn)在光照范圍內(nèi)時(shí)容易照亮。
posted @
2008-05-12 14:08 天書(shū) 閱讀(220) |
評(píng)論 (0) |
編輯 收藏
漫反射顏色,紋理顏色,光照效果表現(xiàn)
光源所造成的明暗效果是表現(xiàn)在Diffuse上,也就是設(shè)定的Material上的。紋理要想表現(xiàn)出光照的明暗效果,就要啟用紋理階段混合了。
1 D3DMATERIAL9 mtrl;
2 ZeroMemory( &mtrl, sizeof(D3DMATERIAL9) );
3
4 mtrl.Diffuse.r = mtrl.Ambient.r = 1.0f;
5 mtrl.Diffuse.g = mtrl.Ambient.g = 1.0f;
6 mtrl.Diffuse.b = mtrl.Ambient.b = 1.0f;
7 mtrl.Diffuse.a = mtrl.Ambient.a = 0.0f;
8 g_pd3dDevice->SetMaterial( &mtrl );
9 //漫反射顏色和紋理顏色疊加,光照效果折痕表現(xiàn)。光源效果只表現(xiàn)在diffuse上
10 g_pd3dDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
11 g_pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
12 g_pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
posted @
2008-04-30 11:00 天書(shū) 閱讀(314) |
評(píng)論 (0) |
編輯 收藏
cctype開(kāi)頭的c表示ctype程序是c++語(yǔ)言繼承自c語(yǔ)言的一部分。<cctype>頭文件為操作字符串提供了有用的函數(shù)
isspace(c) 如果c是一個(gè)空白字符就返回真
isalpha(c) 如果c是一個(gè)文字字符就返回真
isdigit(c) 如果c是一個(gè)數(shù)字字符就返回真
isalnum(c) 如果c是一個(gè)字母或數(shù)字就返回真
ispunct(c) 如果c是一個(gè)標(biāo)點(diǎn)符號(hào)就返回真
isupper(c) 如果c是一個(gè)大寫(xiě)字母就返回真
islower(c) 如果c是一個(gè)小寫(xiě)字母就返回真
toupper(c) 產(chǎn)生c對(duì)應(yīng)的大寫(xiě)字母
tolower(c) 產(chǎn)生c對(duì)應(yīng)的小寫(xiě)字母
posted @
2008-04-27 10:16 天書(shū) 閱讀(487) |
評(píng)論 (0) |
編輯 收藏
c++標(biāo)準(zhǔn)模板庫(kù)中表示大小的類型是一個(gè)無(wú)符號(hào)整數(shù)類型,這種類型不存放負(fù)值。 比如:vector<T> homework; homework.size()-100會(huì)生成無(wú)符號(hào)類型的結(jié)果,也就是說(shuō)它永遠(yuǎn)不會(huì)比0小,即便homework.size()<100。
不管什么時(shí)候,如果一個(gè)表達(dá)式中同時(shí)出現(xiàn)普通的整數(shù)和無(wú)符號(hào)類型的整數(shù),普通的整數(shù)就會(huì)被轉(zhuǎn)換成無(wú)符號(hào)類型。一個(gè)值得注意的地方是:vector<double>::size_type,與所有標(biāo)準(zhǔn)庫(kù)表示大小的類型相同,也是一個(gè)無(wú)符號(hào)整數(shù)類型。
posted @
2008-04-24 13:43 天書(shū) 閱讀(501) |
評(píng)論 (0) |
編輯 收藏
vector<NODE>::iterator FindMin(vector<NODE> &vect)
{
vector<NODE>::iterator min = vect.begin();
vector<NODE>::iterator iter = vect.begin();
while(iter != vect.end())
{
if((*itor).Value < (*min).Value)
{
min = iter;
}
iter ++;
}
return min;
}
iterator的概念源自于對(duì)遍歷一個(gè)線性容器工具的抽象,即如何你能訪問(wèn)這個(gè)容器的某個(gè)元素。對(duì)于最簡(jiǎn)單的數(shù)組,當(dāng)然可以用數(shù)組的索引值,因?yàn)閿?shù)組是連續(xù)存放在內(nèi)存中的;但對(duì)于鏈表,就必須用指針。除此之外,還有還有很多種數(shù)據(jù)結(jié)構(gòu)需要提供一個(gè)方便的工具來(lái)訪問(wèn)其中的元素,方法有ID,關(guān)鍵字等等。為了統(tǒng)一所有的容器的這種工具的使用,一般提供一整套容器的開(kāi)發(fā)者就會(huì)用一種方式來(lái)表示各種容器的訪問(wèn)工具。例如C++ STL就是使用iterator。MFC自己的容器使用position。C#和java也有自己的方法,但方法是不變的。
iterator的用法可以被統(tǒng)一,但不同的底層容器實(shí)現(xiàn)其iterator的原理是不一樣的。例如iterator++你可以理解為移動(dòng)到容器的下一個(gè)元素,如果底層如果是數(shù)組,把索引值加一就行;如果底層是鏈表,就得執(zhí)行類似于m_pCurrent = m_pCurrent->pNext;的操作。因此每種容器都有自己的iterator實(shí)現(xiàn)方法。
C++ STL iterator的常用方法有:
iterator++ 移到下個(gè)元素
iterator-- 移到上個(gè)元素
*iterator 訪問(wèn)iterator所指元素的值]
< > == != iterator之間的比較,例如判斷哪個(gè)元素在前
iterator1 + iterator2 iterator之間的加法運(yùn)算,類似于指針加法
posted @
2008-04-23 13:27 天書(shū) 閱讀(5016) |
評(píng)論 (0) |
編輯 收藏
C++ Lists(鏈表)
Lists將元素按順序儲(chǔ)存在鏈表中. 與 向量(vectors)相比, 它允許快速的插入和刪除,但是隨機(jī)訪問(wèn)卻比較慢.
assign() 給list賦值
back() 返回最后一個(gè)元素
begin() 返回指向第一個(gè)元素的迭代器
clear() 刪除所有元素
empty() 如果list是空的則返回true
end() 返回末尾的迭代器
erase() 刪除一個(gè)元素
front() 返回第一個(gè)元素
get_allocator() 返回list的配置器
insert() 插入一個(gè)元素到list中
max_size() 返回list能容納的最大元素?cái)?shù)量
merge() 合并兩個(gè)list
pop_back() 刪除最后一個(gè)元素
pop_front() 刪除第一個(gè)元素
push_back() 在list的末尾添加一個(gè)元素
push_front() 在list的頭部添加一個(gè)元素
rbegin() 返回指向第一個(gè)元素的逆向迭代器
remove() 從list刪除元素
remove_if() 按指定條件刪除元素
rend() 指向list末尾的逆向迭代器
resize() 改變list的大小
reverse() 把list的元素倒轉(zhuǎn)
size() 返回list中的元素個(gè)數(shù)
sort() 給list排序
splice() 合并兩個(gè)list
swap() 交換兩個(gè)list
unique() 刪除list中重復(fù)的元素
posted @
2008-04-23 13:02 天書(shū) 閱讀(447) |
評(píng)論 (0) |
編輯 收藏