第一篇:PB11.5+WEB客戶端編程技巧總結
PB11.5 WEB客戶端編程技巧總結
一、概述
用PB11.5把現有C/S程序轉換成WEB應用程序后,保留了大部分C/S環境下的代碼,并且大部分都能執行過去。但是在BS平臺下,原來的PB代碼從客戶端轉成了IIS上的服務代碼,原的“客戶端”就成了瀏覽器,轉換后的客戶端編程其實就是面向瀏覽器的編程。
根據目前我對PB11.5所了解的情況,PB11在代碼方面可以使用條件編譯方式嵌入.NET代碼,其實我感覺.net里能實現的內容,用PB代碼也基本能實現,.net里不能實現的,PB也可實現(如datawindow),但這些都屬于服務端的編程范疇,實際應用中很少會碰到在PB里再嵌入.net代碼的,除非要寫一些很特殊的代碼,所以,可以說,服務端方面僅用PB代碼就可以徹底解決。
但實際上,這種純PB代碼的程序一發布成WEB后,會存在不少問題,在C/S環境下,要完成一個操作往往需要多個交互過程,如“打開窗口、選擇行、輸入數據、返回、刷新頁面”這么一個過程,轉成B/S后,運行是這樣的“打開窗口(POSTBACK)、選擇行(POSTBACK)、輸入數據(回車后POSTBACK)、返回(POSTBACK)”,那么多的POSTBACK使得操作變得很笨重,就連簡單的一個MESSAGEBOX,都要2次POSTBACK:“打開消息窗(POSTBACK)、點確定(POSTBACK)”。因此,使用PB11開發WEB程序將要面臨一個很嚴峻的問題:如何提高客戶端的性能,減少POSTBACK次數。
值得慶幸的是,PB11.5的WEB頁面使用了AJAX技術,POSTBACK并不會產生整個頁面的提交,而是部分提交。另外,PB11.5還提供了不少客戶端的編程接口,可以通過這些編程接口進一步優化頁面。那么,有哪些地方可以運用javascript和html代碼優化頁面呢?
1、數據窗口對象appendedhtml屬性。
剛接觸PB11.5的WEB開發的時候,一定會被他的那么多unsupport屬性所蒙蔽,原先在C/S下絢麗多彩的界面,轉成B/S后變得暗淡無光,因此也就失去了進一步開發的樂趣。其實不然,PB提供了appendedhtml的屬性后,使WEB界面編程變得更為靈活,一個小小的appendedhtml,可以將DHTML、javascript等所有頁面技術嵌入到里面去??梢詫崿F的效果如:透明、垂直居中、漸變、鼠標移動特效等等。
查看發布成WEB后的頁面代碼,會發現,appendedhtml里的內容是放在
2、數據窗口事件。此方法是在數據窗口對象初始化的時候寫入對應的腳本,如: #IF DEFINED PBWEBFORM THEN dw_1.JavaScriptFile = ”uo_dw.js“ dw_1.OnClientItemChanged = ”MyItemChanged“ #END IF 另外,在發布成WEB的時候,必須嵌入已寫好的javascript腳本,這些被腳本會在頁面的head區被包含進去。
經過上面代碼一處理,數據窗口的事件被觸發后就會直接跳到javascript腳本去處理而不執行回調(就是PB里寫的程序不會被執行)。
那么,哪些事件支持腳本編程呢?根據PB11.5文檔所提供的技術說明,目前僅限于數據窗口內事件處理,包括clicked、DoubleClicked、RButtonDown、ButtonClicked、ButtonClicking、ItemFocusChanged、ItemError、ItemChanged、RowFocusChanged。在指定客戶端事件腳本的時候,事件前都必須加”OnClient”。
二、客戶端程序的優化思路
借助javascript腳本技術,我們可以對目前程序上的幾個操作瓶頸進行優化。
1、數據窗口的條件性POSTBACK。
如果不對datawindow進行腳本處理,那么如果事件內有代碼,則將會在觸發該事件的時候執行POSTBACK,這樣會有很多沒必要的POSTBACK。如,在itemchanged事件里寫入了對身份證輸入后進行檢查的代碼,在IE下運行的情況是,該數據窗口的任何列輸入完后都會執行POSTBACK,有沒有辦法實現只輸入身份證的時候才POSTBACK呢?可以通過以下方法:
(1)在窗口的open事件里寫入腳本。#IF DEFINED PBWEBFORM THEN dw_1.JavaScriptFile = ”uo_dw.js“ dw_1.OnClientItemChanged = ”MyItemChanged“ #END IF(2)腳本里寫入條件回調程序。
function MyItemChanged(sender, rowNumber, columnName,newValue){if(columnName== ‘sfz’){return PBDataWindow_ItemChangedReject(sender, rowNumber, columnName, newValue);} Else {//do nothing} } 其中,PBDataWindow_ItemChangedReject為調用數據窗口的itemchanged事件,數據窗口提供的回調函數,可以在PBDataWindow.js找到,查閱PB幫助文檔可以查看其具體用法。
2、PB代碼向javascript腳本轉化。
首先,必須理解PB-WEB程序的運行模式,見下圖: 數據庫 SQL 數據集 EASERVER 代理對象 IIS PBVM request IE 代理對象 response 從上圖可以看出,IE與數據庫之間其實就是數據請求的關系,我們可以認為,除了需要從服務端下載數據和頁面加載的請求外,其他都是沒必要的請求。這些沒必要的請求包括:
1)messagebox。消息提示可以說是UI界面交互的最重要的環節之一,幾乎所有業務操作都會涉及,很遺憾的是,除了數據窗口事件里的javascript支持本地消息提示外,目前還沒有一種辦法可以脫離IIS,直接在PB代碼里調用IE消息提示的方法。2)簡單的數據檢查。如登錄時的驗證碼、輸入格式校驗、身份證合法性檢查等,可以直接在javascript里處理。
3)輔助性的數據輸入。包括下拉數據窗口、下拉日歷等。在傳統的C/S模式下,直接打開一個窗口就可以實現下拉數據選擇功能,但是這種方法在WEB下已經行不通,頻繁的POSTBACK會使操作變得笨重、緩慢,甚至比直接輸入來的慢。但是有些下拉的數據又需要從服務端取,這樣可以將下拉窗口設計成共用模塊啟動時直接裝載到頁面,在需要調用的地方用javascript代碼顯示出來,然后象服務端請求數據,選擇數據后返回、設置數據、隱藏下拉窗口,這一過程只要一個POSTBACK,即數據請求過程。
4)頁面切換。在IE下打開多個業務窗口,這些窗口都已經裝載到了IE下,可以通過javascript腳本實現頁面顯示、隱藏,以提高響應速度。
5)窗口、對象的關閉、銷毀。類似此操作,可以直接在IE下完成,無需要再送到IIS上處理。
6)實現回車后焦點切換。打開PB安裝文件所在路徑,打開F:Program FilesSybasePowerBuilder 11.5DotNETwebrootscripts目錄下的dwcommon.js,并修改其代碼段。函數為:HTDW_inputKeyDown()代碼if(event.keyCode == 9 &&!event.ctrlKey &&!event.altKey &&!event.shiftKey)ProcessTab(obj);修改為if((event.keyCode == 9 || event.keyCode == 13)&&!event.ctrlKey &&!event.altKey &&!event.shiftKey)ProcessTab(obj);實現按回車鍵的tab效果。
三、PB與javascript混合編程技巧
1、使用PB提供的javascript函數
打開IIS目錄,在發布好的站點文件夾下,有個scripts文件夾,存放的是所有PB的內置函數,這些函數描述了客戶端的調用、回調方法,具體使用方法在PB文檔里有做了描述。
數據窗口對象(大部分數據窗口函數接口里都用sender做為參數)可以引用的函數可以在dwcommon.js里的function HTDW_DataWindowClass(name)里找到,如下圖:
如:this.SetItem = HTDW_SetItem;這行表示,可以調用數據窗口的SetItem()函數進行設置數據窗口值,至于SetItem參數,可以查找HTDW_SetItem函數的參數結構。如下圖:
調用舉例:
數據窗口的回調函數,可以在PBDataWindow.js里找到,上面已經舉過例子,這里不做描述了。
2、靈活地操控WEB元素
WEB頁面上,每個元素都有一個ID值,是唯一標識該元素的鍵值。如表示“確定”按鈕的ID為ID_OK。
要在javascript里編寫程序實現與頁面元素交互,最重要的一點是要弄清楚從PB轉換成頁面后的元素的ID值,這些ID值是IIS發送過來的,與PB里的對象名有一定的對應關系。目前PB技術文檔沒有這方面的說明,但我們可以通過多種途徑來獲得這些元素ID。1)利用event對象獲得窗口事件的源、父對象
如,可以定義var o = window.event.srcElement;獲取鼠標在窗口上點擊的對象,通過o.parentElement可以獲取該對象的父對象。
2)通過getElementByName、getElementById、getElementsByTagName等方法獲取對象ID。
3)通過alert消息提示將對象ID顯示出來。
有了這些ID,接下去如何操控界面元素,就和C/S編程差不多了,有關函數操作、屬性操作等可以參考javascript和DHTML相關資料。
應用舉例:
第二篇:網絡數據庫講稿(客戶端開發編程)
網絡數據庫講稿(14)
3/26/2013 SQL Server客戶端開發與編程
一、引言
1.編程模式:C/S模式和B/S模式。
2.客戶端編程語言:ASP,VB,VC,VFP,PB,Delphi,Access,ASP,JSP等,都可訪問SQL數據庫。3.可訪問多種數據庫。
二、數據庫編程接口
1.ODBC ODBC(Open Database Connectivity,開放數據庫互連)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規范,并提供了一組對數據庫訪問的標準API(應用程序編程接口)。這些API利用SQL來完成其大部分任務。
ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。一個基于ODBC的應用程序對數據庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數據庫操作由ODBC驅動程序完成。也就是說,不論是FoxPro、Access , MYSQL還是Oracle數據庫,均可用ODBC API進行訪問。由此可見,ODBC的最大優點是能以統一的方式處理所有的數據庫。
2.OLE DB OLE DB(Object Linking and Embedding,對象連接與嵌入),簡稱OLE技術;DB(data base)。
OLE DB(OLEDB)是微軟的戰略性的通向不同的數據源的低級應用程序接口。OLE DB不僅包括ODBC的結構化查詢語言(SQL)能力,還具有面向其他非SQL數據類型的通路。作為微軟的組件對象模型(COM)的一種設計,OLE DB是一組讀寫數據的方法。
3.ADO ADO(ActiveX Data Objects)是微軟公司的一個用于存取數據源的COM組件。它提供了編程語言和統一數據訪問方式OLE DB的一個橋梁。允許開發人員編寫訪問數據的代碼而不用關心數據庫是如何實現的,而只用關心到數據庫的連接。
ADO是一種面向對象的編程接口,是一個能夠訪問不同數據庫的統一接口,它在OLE DB中提供了一種“橋”程序,這種程序能夠提供對數據庫的連接。開發人員在使用ADO時,其實就是在使用OLE DB,不過OLE DB更加接近底層。
4.三種接口之間的關系
ODBC是Microsoft引進的一種早期數據庫接口技術。它實際上是ADO的前身。早期的數據庫連接是非常困難的,每個數據庫的格式都不一樣,開發者得對他們所開發的每種數據庫的底層API有深刻的了解,因此,能處理各種各樣數據庫的通用的API就應運而生了,也就是現在的ODBC(Open Database Connectivity)。ODBC是人們在創建通用API的早期產物,有許多種數據庫遵從了這種標準,被稱為ODBC兼容的數據庫。
網絡數據庫講稿(14)
3/26/2013 OLEDB位于ODBC層與應用程序之間。在一些應用中,例如ASP、Delphi,ADO是位于OLEDB之上的“應用程序”。ADO調用先被送到OLEDB,然后再交由ODBC處理。
三、常用ADO對象方法和屬性
1.Connection對象
P214, P220 2.Command對象
P214, P227 3.Recordset對象
P215, P220
四、用其它語言訪問SQL數據庫
ASP,VB,VC,VFP,PB,Delphi,Access,ASP,JSP等,都可訪問SQL數據庫。
以下僅介紹ASP、VFP、Delphi。五.ASP訪問SQL數據庫
1.常用ASP內建對象 Request Response Application Session Server 2.建立訪問環境
可使用OLE DB或ODBC。
(1)建立使用OLE DB的訪問環境
需要在“程序/管理工具/Internet服務器管理”中,右擊“默認Web站點”,再單擊“屬性”,然后設置“主目錄”和“文檔”。(如P218圖6.8)(2)建立使用ODBC數據源的環境
需要在“程序/管理工具/數據源(ODBC)”中配置,在DNS配置框中選“使用用戶輸入登錄ID和密碼的SQL Server驗證”。P213 3.連接到數據源 P214 在ASP中引用ADO對象,要加前綴ADODB。(1)創建一個ADO Connection對象。例如:
Set cn=Server.CreateObject(“ADODB.Connection”)(2)連接到數據源
①使用OLE DB接口
首先指定OLD DB提供者 例:
cn.Provider=”sqloledb” 再連接到數據源 例:
cn.Open “Server=zyxy;Database=教學管理;uid=sa;pwd=??”
網絡數據庫講稿(14)
3/26/2013 ②使用ODBC數據源 例:
cn.Open “dsn=jxgl;uid=sa;pwd=??”
?jxgl是2(2)中建立的數據源
4.執行訪問數據源的命令并創建結果集對象
例:
set rs=cn.Execute(“select * from 學生 where 性別=?男?”)5.關閉連接
例: rs.close cn.close 6.應用舉例
例6.1
P221 用cn.Excute創建的Recordset對象,在結果集中只能用MoveNext逐步向尾部單方向移動記錄指針。還有另一種方法創建Recordset對象:P222L18。用此種方法創建的Recordset對象的Open方法有四個參數。
六、在客戶端用VFP訪問網絡數據庫SQL Server上的數據庫(一)在客戶端設置ODBC: 在本地機上:
開始/設置/控制面板/管理工具/數據源(ODBC)在此添加數據源,命名數據源名(假定命名為jxgl),填寫服務器名,使用SQL Server驗證,更改默認的數據庫。
附:可繼續完成以下設置: 在客戶端VFP環境下打開項目管理器(項目中至少應有一個數據庫),展開數據庫,選擇連接,單擊新建按鈕,打開連接設計器對話框,填寫有關內容(也可以打開一個數據庫,用create connection命令打開連接設計器對話框),最后在保存對話框輸入連接名(假定為LJ)。該連接還可使用以下命令建立:
CREATE CONNECTION <連接名> DATASOURCE <數據源名> USERID
DATABASE “教學管理”
(二)在客戶端VFP中使用SPT(SQL Pass Through)技術
1.連接數據源
<連接句柄變量名>=SQLConnect(<數據源名>,
dh=SQLCONNECT(“LJ”,”sa”,””)也可使用
<連接句柄變量名>=SQLStringConnect(“dsn=<數據源名>;uid=
pwd=<帳戶密碼>”)例如
dh=SQLStringConnect(“dsn=LJ;uid=sa;pwd=”)如果連接成功,dh返回正整數句柄,失敗返回-1。
附:也可以使用命令 <連接句柄變量名>=SQLConnect(<連接名>)例:DH=SQLConnect(“LJ”)2.執行SQL命令
SQLEXEC(<連接句柄變量名>,
網絡數據庫講稿(14)
3/26/2013 在查詢命令中添加READWRITE關鍵詞,可得到可讀寫的臨時表??捎肧QLCOMMIT(DH)、SQLROLLBACK(DH)提交或回滾事務。3.斷開連接
SQLDISCONNECT(DH)
七、Delphi訪問SQL數據庫
1.ADO控件
P304 2.使用TADODataSet訪問SQL數據庫
第三篇:個人總結的VC編程技巧(范文模版)
1.等于號=表示賦值操作;= =表示邏輯操作。在使用if或(a= =b)時候需要注意。2.浮點型數據判斷相等使用fabs(a-b)<0.00001f 3.數組使用SetSize(nSize)之前需要清空RemoveAll()4.修改資源編譯后exe不執行處理方法:選中資源,將其Property屬性對話框中,修改其File Name屬性,改名,保存后會生成其他文件名
5.對于繪制文字TextOut(),在SetMapMode(MM_LOMETRIC)后,需要重新選擇字體,否則打印預覽時候會出現字體亂碼現象。
6.賦值型條件語句需要加括號,否則先執行運算符,再執行條件語句,如int a=b+c>0 ? 1 :-1,時,將先執行(b+c)。
MFC的消息處理函數
1.AfxWndProc()該函數負責接收消息,找到消息所屬的CWnd對象,然后調用AfxCallWndProc
2.AfxCallWndProc()該函數負責保存消息(保存的內容主要是消息標識符和消息參數)供應用程序以后使用,然后調用WindowProc()函數
3.WindowProc()該函數負責發送消息到OnWndMsg()函數,如果未被處理,則調用DefWindowProc()函數
4.OnWndMsg()該函數的功能首先按字節對消息進行排序,對于WM_COMMAND消息,調用OnCommand()消息響應函數,對于WM_NOTIFY消息調用OnNotify()消息響應函數。任何被遺漏的消息將是一個窗口消息。OnWndMsg()函數搜索類的消息映像,以找到一個能處理任何窗口消息的處理函數。如果OnWndMsg()函數不能找到這樣的處理函數的話,則把消息返回到WindowProc()函數,由它將消息發送給DefWindowProc()函數
5.OnCommand()該函數查看這是不是一個控件通知(lParam參數不為NULL,如果lParam參數為空的話,說明該消息不是控件通知),如果它是,OnCommand()函數會試圖將消息映射到制造通知的控件;如果他不是一個控件通知(或者如果控件拒絕映射的消息)OnCommand()就會調用OnCmdMsg()函數
6.OnCmdMsg()根據接收消息的類,OnCmdMsg()函數將在一個稱為命令傳遞(Command Routing)的過程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類是一個框架類,則命令和通知消息也被傳遞到視圖和文檔類,并為該類尋找一個消息處理函數
MFC應用程序創建窗口的過程
1.PreCreateWindow()該函數是一個重載函數,在窗口被創建前,可以在該重載函數中改變創建參數(可以設置窗口風格等等)
2.PreSubclassWindow()這也是一個重載函數,允許首先子分類一個窗口
3.OnGetMinMaxInfo()該函數為消息響應函數,響應的是WM_GETMINMAXINFO消息,允許設置窗口的最大或者最小尺寸
4.OnNcCreate()該函數也是一個消息響應函數,響應WM_NCCREATE消息,發送消息以告訴窗口的客戶區即將被創建
5.OnNcCalcSize()該函數也是消息響應函數,響應WM_NCCALCSIZE消息,作用是允許改變窗口客戶區大小
6.OnCreate()該函數也是一個消息響應函數,響應WM_CREATE消息,發送消息告訴一個窗口已經被創建
7.OnSize()該函數也是一個消息響應函數,響應WM_SIZE消息,發送該消息以告訴該窗口大小已經發生變化
8.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息說明窗口在移動
9.OnChildNotify()該函數為重載函數,作為部分消息映射被調用,告訴父窗口即將被告知一個窗口剛剛被創建
MFC應用程序關閉窗口的順序(非模態窗口)
1.OnClose()消息響應函數,響應窗口的WM_CLOSE消息,當關閉按鈕被單擊的時候發送此消息
2.OnDestroy()消息響應函數,響應窗口的WM_DESTROY消息,當一個窗口將被銷毀時,發送此消息
3.OnNcDestroy()消息響應函數,響應窗口的WM_NCDESTROY消息,當一個窗口被銷毀后發送此消息
4.PostNcDestroy()重載函數,作為處理OnNcDestroy()函數的最后動作,被CWnd調用
MFC應用程序中打開模式對話框的函數調用順序
1.DoModal()重載函數,重載DoModal()成員函數 2.PreSubclassWindow()重載函數,允許首先子分類一個窗口
3.OnCreate()消息響應函數,響應WM_CREATE消息,發送此消息以告訴一個窗口已經被創建
4.OnSize()消息響應函數,響應WM_SIZE消息,發送此消息以告訴窗口大小發生變化
5.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息,以告訴窗口正在移動
6.OnSetFont()消息響應函數,響應WM_SETFONT消息,發送此消息,以允許改變對話框中控件的字體
7.OnInitDialog()消息響應函數,響應WM_INITDIALOG消息,發送此消息以允許初始化對話框中的控件,或者是創建新控件
8.OnShowWindow()消息響應函數,響應WM_SHOWWINDOW消息,該函數被ShowWindow()函數調用
9.OnCtlColor()消息響應函數,響應WM_CTLCOLOR消息,被父窗口發送已改變對話框或對話框上面控件的顏色
10.OnChildNotify()重載函數,作為WM_CTLCOLOR消息的結果發送
MFC應用程序中關閉模式對話框的順序
1.OnClose()消息響應函數,響應WM_CLOSE消息,當“關閉”按鈕被單擊的時候,該函數被調用
2.OnKillFocus()消息響應函數,響應WM_KILLFOCUS消息,當一個窗口即將失去鍵盤輸入焦點以前被發送
3.OnDestroy()消息響應函數,響應WM_DESTROY消息,當一個窗口即將被銷毀時,被發送
4.OnNcDestroy()消息響應函數,響應WM_NCDESTROY消息,當一個窗口被銷毀以后被發送
5.PostNcDestroy()重載函數,作為處理OnNcDestroy()函數的最后動作被CWnd調用
打開無模式對話框的順序
1.PreSubclassWindow()重載函數,允許用戶首先子分類一個窗口 2.OnCreate()消息響應函數,響應WM_CREATE消息,發送此消息以告訴一個窗口已經被創建
3.OnSize()消息響應函數,響應WM_SIZE消息,發送此消息以告訴窗口大小發生變化
4.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息以告訴窗口正在移動
5.OnSetFont()消息響應函數,響應WM_SETFONT消息,發送此消息以允許改變對話框中控件的字體
以上這些的執行都是按給定的順序執行!
只有清楚的了解應用程序的執行順序,才能在編寫代碼的時候知道,在什么時候應該執行什么,以及在什么地方該處理什么!
這只是本人總結的一點小小的經驗,希望能對MFC的初學者有所幫助!MFC應用程序中處理消息的順序
1.AfxWndProc()該函數負責接收消息,找到消息所屬的CWnd對象,然后調用AfxCallWndProc
2.AfxCallWndProc()該函數負責保存消息(保存的內容主要是消息標識符和消息參數)供應用程序以后使用,然后調用WindowProc()函數
3.WindowProc()該函數負責發送消息到OnWndMsg()函數,如果未被處理,則調用DefWindowProc()函數
4.OnWndMsg()該函數的功能首先按字節對消息進行排序,對于WM_COMMAND消息,調用OnCommand()消息響應函數,對于WM_NOTIFY消息調用OnNotify()消息響應函數。任何被遺漏的消息將是一個窗口消息。OnWndMsg()函數搜索類的消息映像,以找到一個能處理任何窗口消息的處理函數。如果OnWndMsg()函數不能找到這樣的處理函數的話,則把消息返回到WindowProc()函數,由它將消息發送給DefWindowProc()函數
5.OnCommand()該函數查看這是不是一個控件通知(lParam參數不為NULL,如果lParam參數為空的話,說明該消息不是控件通知),如果它是,OnCommand()函數會試圖將消息映射到制造通知的控件;如果他不是一個控件通知(或者如果控件拒絕映射的消息)OnCommand()就會調用OnCmdMsg()函數
6.OnCmdMsg()根據接收消息的類,OnCmdMsg()函數將在一個稱為命令傳遞(Command Routing)的過程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類是一個框架類,則命令和通知消息也被傳遞到視圖和文檔類,并為該類尋找一個消息處理函數
MFC應用程序創建窗口的過程
1.PreCreateWindow()該函數是一個重載函數,在窗口被創建前,可以在該重載函數中改變創建參數(可以設置窗口風格等等)
2.PreSubclassWindow()這也是一個重載函數,允許首先子分類一個窗口
3.OnGetMinMaxInfo()該函數為消息響應函數,響應的是WM_GETMINMAXINFO消息,允許設置窗口的最大或者最小尺寸
4.OnNcCreate()該函數也是一個消息響應函數,響應WM_NCCREATE消息,發送消息以告訴窗口的客戶區即將被創建
5.OnNcCalcSize()該函數也是消息響應函數,響應WM_NCCALCSIZE消息,作用是允許改變窗口客戶區大小
6.OnCreate()該函數也是一個消息響應函數,響應WM_CREATE消息,發送消息告訴一個窗口已經被創建
7.OnSize()該函數也是一個消息響應函數,響應WM_SIZE消息,發送該消息以告訴該窗口大小已經發生變化
8.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息說明窗口在移動
9.OnChildNotify()該函數為重載函數,作為部分消息映射被調用,告訴父窗口即將被告知一個窗口剛剛被創建
MFC應用程序關閉窗口的順序(非模態窗口)
1.OnClose()消息響應函數,響應窗口的WM_CLOSE消息,當關閉按鈕被單擊的時候發送此消息
2.OnDestroy()消息響應函數,響應窗口的WM_DESTROY消息,當一個窗口將被銷毀時,發送此消息
3.OnNcDestroy()消息響應函數,響應窗口的WM_NCDESTROY消息,當一個窗口被銷毀后發送此消息
4.PostNcDestroy()重載函數,作為處理OnNcDestroy()函數的最后動作,被CWnd調用
MFC應用程序中打開模式對話框的函數調用順序
1.DoModal()重載函數,重載DoModal()成員函數 2.PreSubclassWindow()重載函數,允許首先子分類一個窗口
3.OnCreate()消息響應函數,響應WM_CREATE消息,發送此消息以告訴一個窗口已經被創建
4.OnSize()消息響應函數,響應WM_SIZE消息,發送此消息以告訴窗口大小發生變化
5.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息,以告訴窗口正在移動
6.OnSetFont()消息響應函數,響應WM_SETFONT消息,發送此消息,以允許改變對話框中控件的字體
7.OnInitDialog()消息響應函數,響應WM_INITDIALOG消息,發送此消息以允許初始化對話框中的控件,或者是創建新控件
8.OnShowWindow()消息響應函數,響應WM_SHOWWINDOW消息,該函數被ShowWindow()函數調用
9.OnCtlColor()消息響應函數,響應WM_CTLCOLOR消息,被父窗口發送已改變對話框或對話框上面控件的顏色
10.OnChildNotify()重載函數,作為WM_CTLCOLOR消息的結果發送
MFC應用程序中關閉模式對話框的順序
1.OnClose()消息響應函數,響應WM_CLOSE消息,當“關閉”按鈕被單擊的時候,該函數被調用
2.OnKillFocus()消息響應函數,響應WM_KILLFOCUS消息,當一個窗口即將失去鍵盤輸入焦點以前被發送 3.OnDestroy()消息響應函數,響應WM_DESTROY消息,當一個窗口即將被銷毀時,被發送
4.OnNcDestroy()消息響應函數,響應WM_NCDESTROY消息,當一個窗口被銷毀以后被發送
5.PostNcDestroy()重載函數,作為處理OnNcDestroy()函數的最后動作被CWnd調用
打開無模式對話框的順序
1.PreSubclassWindow()重載函數,允許用戶首先子分類一個窗口
2.OnCreate()消息響應函數,響應WM_CREATE消息,發送此消息以告訴一個窗口已經被創建
3.OnSize()消息響應函數,響應WM_SIZE消息,發送此消息以告訴窗口大小發生變化
4.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息以告訴窗口正在移動
5.OnSetFont()消息響應函數,響應WM_SETFONT消息,發送此消息以允許改變對話框中控件的字體
MFC的一些主要成員函數
CWinThread::m_pMainWnd:保存指向應用程序的主窗口指針。CWinThread::GetMainWnd:查詢指向線程主窗口的指針。CWinThread::InitInstance:重載以實現線程實例的初始化。AfxGetApp:獲得指向CWinApp對象的指針。
AfxGetInstanceHandle:獲得當前應用程序實例的句柄。AfxGetResourceHandle:獲得應用程序資源的句柄。
AfxGetAppName:獲得一個字符串指針,其中包含了應用程序的名字。另外,如果你擁有一個指向CWinApp對象的指針,可以通過m_pszExename來獲得應用程序的名字。
CDocument::IsModified:標識文檔從最近一次保存以來是否被修改過。CDocument::UpdateAllViews:通知所有視圖文檔已被修改的消息。CWnd::m_hWnd:指明與這個CWnd對象相關聯的HWND句柄。CWnd::Create:創建并初始化與CWnd對象相關聯的子窗口。
CWnd::PreCreateWindow:在與CWnd對象相關聯的窗口被創建之前調用。CWnd::IsWindowEnabled:確定一個窗口是否允許鼠標和鍵盤輸入。CWnd::EnableWindow:允許或禁止鼠標和鍵盤輸入。CWnd::SetWindowPos:改變子窗口、彈出窗口和頂層窗口的大小、位置以及順序。CWnd::GetDlgItem:獲得指定的對話框中具有指定ID的控件。CWnd::UpdateData:初始化對話框或獲得對話框中的數據。CWnd::GetWindowRect:獲得CWnd的屏幕坐標。CWnd::GetDC:獲得客戶區的設備環境。
CWnd::RedrawWindow:更新客戶區中的指定矩形或區域。CWnd::UpdateWindow:更新客戶區。
CWnd::Invalidate:使整個客戶區無效。CWnd::ShowWindow:顯示或隱藏窗口。
CWnd::ClientToScreen:將給定點或顯示器上矩形的客戶區坐標轉換為屏幕坐標。
CWnd::ScreenToClient:將給定點或顯示器上矩形的屏幕坐標轉換為客戶坐標。CWnd::SetWindowText:將窗口的文本或標題文字(如果有)設為指定的文本。CWnd::SetFont:設置當前字體。
CWnd::GetDlgItemInt:將給定對話框中控件的文本轉換為整數。
CWnd::SetTimer:安裝一個系統定時器,當它被激活時,發送一個WM_TIMER消息。
CWnd::KillTimer:銷毀一個系統定時器。CWnd::FlashWindow:使窗口閃爍一次。CWnd::MessageBox:創建并顯示一個窗口,其中包含了應用程序提供的消息和標題
第四篇:客戶端學習總結
前面幾個星期,我們學習了客戶端的知識,其中主要有3個部分:xhtml,css,js。通過學習,我對客戶端網頁編程有了一個初步的了解,xhtml主要是頁面內容的一個體現,是靜態網頁設計的基礎,css用來控制頁面的布局和網頁的表現形式,javascript用于動態控制網頁,以及對表單收集的數據進行客戶端的驗證。
xhtml和css是基礎,這部分的內容不多也比較簡單,學起來也比較輕松,主要是把其中概念要理解,而我們在實際編寫網頁時可以借助幫助手冊,而且我們以后可能不會直接從事這方面的工作,所以現在只需要把基本的概念理解了就行了,以后在工作中能看懂代碼就行。
javascript是我們客戶端學習的重點,因為它也是一門編程語言,通過對它的學習,我們能掌握一些程序設計的技巧和思維。更為重要的是,它是一門面向對象的程序設計語言,它可以為我們以后學習java打下一個比較好的基礎。我們以前學過的c語言是一種面向過程的語言,通過它的學習,我們對程序設計的一些思維有了初步的了解,知道了3種流程控制,而對javascript的學習,我們了解到了面向對象的一些基礎知識,對象的概念等。
javascript也是我們這段時間學習的一個難點,由于以前沒有面向對象程序設計的經驗,這部分剛開始學的時候學得不是很好,要背的知識點太多,一部分知識要我們學習了java后重新回來才完全理解,有很多新的英語單詞需要記。幸好李老師給了我們一個中文手冊,有時候記不住的地方可以查手冊,提高了我們學習的效率。對這部分的學習,感覺要從總體上來把握學習的知識點,不要抓住細節不放,如果能夠將自己的思維提高到一個新的高度再回過頭來看細節就比較輕松了。
javascript是一種弱類型的語言,它的特點是一個變量可以被賦值為多種類型的數據,我們在聲明變量的時候不用聲明它的類型,因為我們并不關心它的具體類型,這也是為什么在javascript中沒有類這個概念的原因。類本身是一種復合的數據類型,對象才是具體的變量,在javascript中,任何一個變量可以被賦予任何類型的數據,我們對變量的類型并不關心,因此也沒有類的概念。
消防支隊開展先進性教育集中學習總結黨員先進性教育活動學習小結
科學發展觀活動學習調研階段總結
在javascript的后面幾章,我們著重學習了對象模型,重點是標準文檔對象模型dom和傳統對象模型,以及瀏覽器對象模型,這部分的內容,主要是要記得多,知道每個對象都有什么屬性和方法,最后我們總結了表單的驗證,只要前面的內容都弄懂了,這部分學習起來就沒有問題。
通過這2個多星期的學習,我對客戶端網頁編程有了一定的了解,已經進入java的學習了,這才是我們學習的重點,要更加的努力才行。
第五篇:[推薦]加工中心編程技巧小結
[推薦]加工中心編程技巧小結
一般編程技巧
cnc加工中心中幾組常用指令的區別及編程技巧
隨著科技的發展和社會的進步,人們對產品的性能和質量要求越來越高,從而使數控機床
應
用已得到一定程度的普及,而高性能高效率的加工中心也逐漸成為社會所需。通過幾年的加
工
中心實際應用和教學實踐及摸索,筆者將自己的體會和經驗總結出來,希望對廣大讀者有所
啟 迪。1. 暫停指令
G04X(U)_/P_ 是指刀具暫停時間(進給停止,主軸不停止),地址P或X后的數值是暫
停時
間。X后面的數值要帶小數點,否則以此數值的千分之一計算,以秒(s)為單位,P后面數
值
不能帶小數點(即整數表示),以毫秒(ms)為單位。例如,G04 X2.0;或G04 X2000;
暫停2秒
G04 P2000;但在某些孔系加工指令中(如G82、G88及G89),為了保證孔底的精糙度,當刀具加工至
孔底
時需有暫停時間,此時只能用地址P表示,若用地址X表示,則控制系統認為X是X軸坐標
值進行 執行。
例如,G82X100.0Y100.0Z-20.0R5.0F200P2000;鉆孔(100.0,100.0)至孔底暫停2秒 G82X100.0Y100.0Z-20.0R5.0F200X2.0;
鉆孔(2.0,100.0)至孔底不會暫停。
2. M00、M01、M02和M30的區別與聯系
M00為程序無條件暫停指令。程序執行到此進給停止,主軸停轉。重新啟動程序,必須先回? 絁OG狀態下,按下CW(主軸正轉)啟動主軸,接著返回AUTO狀態下,按下START鍵才能
啟動程序。
M01為程序選擇性暫停指令。程序執行前必須打開控制面板上OP STOP鍵才能執行,執行
后的
效果與M00相同,要重新啟動程序同上。M00和M01常常用于加工中途工件尺寸的檢驗或排屑。M02為主程序結束指令。執行到此指令,進給停止,主軸停止,冷卻液關閉。但程序光標停
在 程序末尾。
M30為主程序結束指令。功能同M02,不同之處是,光標返回程序頭位置,不管M30后是否
還有 其他程序段。3. 地址D、H的意義相同
刀具補償參數D、H具有相同的功能,可以任意互換,它們都表示數控系統中補償寄存器的地
址名稱,但具體補償值是多少,關鍵是由它們后面的補償號地址來決定。不過在加工中心
中,為了防止出錯,一般人為規定H為刀具長度補償地址,補償號從1~20號,D為刀具半徑補
償地
址,補償號從21號開始(20把刀的刀庫)。
例如,G00G43H1Z100.0;
G01G41D21X20.0Y35.0F200;
4. 鏡像指令
鏡像加工指令M21、M22、M23。當只對X軸或Y軸進行鏡像時,切削時的走刀順序(順銑與
逆銑),刀補方向,圓弧插補轉向都會與實際程序相反,如圖1所示。當同時對X軸和Y軸進行
鏡像
時,走刀順序,刀補方向,圓弧插補轉向均不變。
注意:使用鏡像指令后必須用M23進行取消,以免影響后面的程序。在G90模式下,使用鏡
像
或取消指令,都要回到工件坐標系原點才能使用。否則,數控系統無法計算后面的運動軌
跡,會出現亂走刀現象。這時必須實行手動原點復歸操作予以解決。主軸轉向不隨著鏡像指令變
化。
圖1 鏡像時刀補、順逆變化
5. 圓弧插補指令
G02為順時針插補,G03為逆時針插補,在XY平面中,格式如下:G02/G03X_Y_I_K_F_或
G02/G 03 X_Y_R_F_,其中X、Y為圓弧終點坐標,I、J為圓弧起點到圓心在X、Y軸上的增量值,R為圓
弧半徑,F為進給量。在圓弧切削時注意,q≤180°,R為正值;q>180°,R為負值;I、K的指定也可用R指定,當
兩者同時被指定時,R指令優先,I、K無效;R不能做整圓切削,整圓切削只能用I、J、K
編程,因為經過同一點,半徑相同的圓有無數個,如圖2所示。
圖2 經過同一點的圓
當有I、K為零時,就可以省略;無論G90還是G91方式,I、J、K都按相對坐標編程;圓
弧插補
時,不能用刀補指令G41/G42。6. G92與G54~G59之間的優缺點
G54~G59是在加工前設定好的坐標系,而G92是在程序中設定的坐標系,用了G54~G59就
沒有
必要再使用G92,否則G54~G59會被替換,應當避免,如表1所示。
表1 G92與工作坐標系的區別
注意:(1)一旦使用了G92設定坐標系,再使用G54~G59不起任何作用,除非斷電重新啟
動
系統,或接著用G92設定所需新的工件坐標系。(2)使用G92的程序結束后,若機床沒有
回? 紾92設定的原點,就再次啟動此程序,機床當前所在位置就成為新的工件坐標原點,易發
生事
故。所以,希望廣大讀者慎用。
7. 編制換刀子程序。
在加工中心上,換刀是不可避免的。但機床出廠時都有一個固定的換刀點,不在換刀位置,便不能夠換刀,而且換刀前,刀補和循環都必須取消掉,主軸停止,冷卻液關閉。條件繁多,如果每次手動換刀前,都要保證這些條件,不但易出錯而且效率低,因此我們可以編制一個
換
刀程序保存諳低襯詿婺冢諢壞妒保贛DI狀態下用M98調用就可以一次性完成換刀動
作。
以PMC-10V20加工中心為例,程序如下:
O2002;
(程序名)G80G40G49;(取消固定循環、刀補)
M05;
(主軸停止)M09;
(冷卻液關閉)G91G30Z0;
(Z軸回到第二原點,即換刀點)
M06;
(換刀)
M99;
(子程序結束)在需要換刀的時候,只需在MDI狀態下,鍵入“T5M98P2002”,即可換上所需刀具T5,從
而避
免了許多不必要的失誤。廣大讀者可根據自己機床的特點,編制相應的換刀子程序。
8.其他
程序段順序號,用地址N表示。一般數控裝置本身存儲器空間有限(64K),為了節省存儲
空
間,程序段順序號都省略不要。N只表示程序段標號,可以方便查找編輯程序,對加工過程
不
起任何作用,順序號可以遞增也可遞減,也不要求數值有連續性。但在使用某些循環指令,跳
轉指令,調用子程序及鏡像指令時不可以省略。
9.同一條程序段中,相同指令(相同地址符)或同一組指令,后出現的起作用。
例如,換刀程序,T2M06T3;換上的是T3而不是T2;G01G00X50.0Y30.0F200;執行的是G00(雖有F值,但也不執行G01)。不是同一組的指令代碼,在同一程序段中互換先后順序執行效果相同。
G90G54G00X0Y0Z100.0;G00G90G54X0Y0Z100.0;以上各項均在PMC-10V20(FANUC SYSTEM)加工中心上運行通過。在實際應用中,只有深
刻理
解各種指令的用法和編程規律,


文檔為doc格式
聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。
數控車床編程和改造技巧(5篇)
數控車床編程和改造技巧 摘 要:隨著科學技術的發展,普通機床越來越不能滿足市場的需求,其勞動強度大,危險性高,且不能滿足現代科學的批量生產需要,越來越多的企業將普通機床逐漸轉......
刀具和編程總結
① 白鋼刀(即高速鋼刀具)因其通體銀白色而得名,主要用于直壁加工。白鋼刀價格便宜,但切削壽命短、吃刀量小、進給速度低、加工效率低,在數控加工中較少使用。 ② 飛刀(即鑲嵌式刀......
編程題總結(范文大全)
C作業匯總 1. short a,b=32767; /*short類型在內存中占2B*/ a=b+1; 問:a的值是多少?并分析原因。 2. 有一4位數整數,假設用abcd表示,請把這個4位數的每個數位用表達式表示出來......
數據庫編程總結(推薦)
數據庫編程總結 當前各種主流數據庫有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS A......
一點Duilib編程總結
一點Duilib編程總結 1.duilib簡介 duilib是一個開源的DirectUI界面庫,簡潔但是功能強大。而且還是BSD的license,所以即便是在商業上,大家也可以安心使用。 現在大家可以從這個......
Mudos編程總結[推薦]
Mudos編程總結1,Mudos系統調用系統 MudLib系統文件 的過程和一些特點Mudos啟動以后先要尋找一個配置文件,用來配置MudLib文件系統的一些信息(這里時config.cfg),找不到就無法啟......
描述性編程總結(范文)
一、描述性編程 1、 QTP的運行原理 封裝被測對象(TO)到對象倉庫 對比對象倉庫里的對象屬性(TO)和運行時的真實被測對象的屬性(RO) 對比一致后,找得到相應的對象(RO),按照腳本......
編程題總結
大家必須掌握每種類型的1-3題。題號考點要求48、 將兩個兩位數的整數合并成一個整數 65、 兩個正整數合并成一個整數 71、 兩個正整數合并成一個整數 77、 兩個正整數合并成......