第一篇:個(gè)人總結(jié)的VC編程技巧(范文模版)
1.等于號(hào)=表示賦值操作;= =表示邏輯操作。在使用if或(a= =b)時(shí)候需要注意。2.浮點(diǎn)型數(shù)據(jù)判斷相等使用fabs(a-b)<0.00001f 3.數(shù)組使用SetSize(nSize)之前需要清空RemoveAll()4.修改資源編譯后exe不執(zhí)行處理方法:選中資源,將其Property屬性對(duì)話框中,修改其File Name屬性,改名,保存后會(huì)生成其他文件名
5.對(duì)于繪制文字TextOut(),在SetMapMode(MM_LOMETRIC)后,需要重新選擇字體,否則打印預(yù)覽時(shí)候會(huì)出現(xiàn)字體亂碼現(xiàn)象。
6.賦值型條件語(yǔ)句需要加括號(hào),否則先執(zhí)行運(yùn)算符,再執(zhí)行條件語(yǔ)句,如int a=b+c>0 ? 1 :-1,時(shí),將先執(zhí)行(b+c)。
MFC的消息處理函數(shù)
1.AfxWndProc()該函數(shù)負(fù)責(zé)接收消息,找到消息所屬的CWnd對(duì)象,然后調(diào)用AfxCallWndProc
2.AfxCallWndProc()該函數(shù)負(fù)責(zé)保存消息(保存的內(nèi)容主要是消息標(biāo)識(shí)符和消息參數(shù))供應(yīng)用程序以后使用,然后調(diào)用WindowProc()函數(shù)
3.WindowProc()該函數(shù)負(fù)責(zé)發(fā)送消息到OnWndMsg()函數(shù),如果未被處理,則調(diào)用DefWindowProc()函數(shù)
4.OnWndMsg()該函數(shù)的功能首先按字節(jié)對(duì)消息進(jìn)行排序,對(duì)于WM_COMMAND消息,調(diào)用OnCommand()消息響應(yīng)函數(shù),對(duì)于WM_NOTIFY消息調(diào)用OnNotify()消息響應(yīng)函數(shù)。任何被遺漏的消息將是一個(gè)窗口消息。OnWndMsg()函數(shù)搜索類的消息映像,以找到一個(gè)能處理任何窗口消息的處理函數(shù)。如果OnWndMsg()函數(shù)不能找到這樣的處理函數(shù)的話,則把消息返回到WindowProc()函數(shù),由它將消息發(fā)送給DefWindowProc()函數(shù)
5.OnCommand()該函數(shù)查看這是不是一個(gè)控件通知(lParam參數(shù)不為NULL,如果lParam參數(shù)為空的話,說(shuō)明該消息不是控件通知),如果它是,OnCommand()函數(shù)會(huì)試圖將消息映射到制造通知的控件;如果他不是一個(gè)控件通知(或者如果控件拒絕映射的消息)OnCommand()就會(huì)調(diào)用OnCmdMsg()函數(shù)
6.OnCmdMsg()根據(jù)接收消息的類,OnCmdMsg()函數(shù)將在一個(gè)稱為命令傳遞(Command Routing)的過(guò)程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類是一個(gè)框架類,則命令和通知消息也被傳遞到視圖和文檔類,并為該類尋找一個(gè)消息處理函數(shù)
MFC應(yīng)用程序創(chuàng)建窗口的過(guò)程
1.PreCreateWindow()該函數(shù)是一個(gè)重載函數(shù),在窗口被創(chuàng)建前,可以在該重載函數(shù)中改變創(chuàng)建參數(shù)(可以設(shè)置窗口風(fēng)格等等)
2.PreSubclassWindow()這也是一個(gè)重載函數(shù),允許首先子分類一個(gè)窗口
3.OnGetMinMaxInfo()該函數(shù)為消息響應(yīng)函數(shù),響應(yīng)的是WM_GETMINMAXINFO消息,允許設(shè)置窗口的最大或者最小尺寸
4.OnNcCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_NCCREATE消息,發(fā)送消息以告訴窗口的客戶區(qū)即將被創(chuàng)建
5.OnNcCalcSize()該函數(shù)也是消息響應(yīng)函數(shù),響應(yīng)WM_NCCALCSIZE消息,作用是允許改變窗口客戶區(qū)大小
6.OnCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送消息告訴一個(gè)窗口已經(jīng)被創(chuàng)建
7.OnSize()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送該消息以告訴該窗口大小已經(jīng)發(fā)生變化
8.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息說(shuō)明窗口在移動(dòng)
9.OnChildNotify()該函數(shù)為重載函數(shù),作為部分消息映射被調(diào)用,告訴父窗口即將被告知一個(gè)窗口剛剛被創(chuàng)建
MFC應(yīng)用程序關(guān)閉窗口的順序(非模態(tài)窗口)
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_CLOSE消息,當(dāng)關(guān)閉按鈕被單擊的時(shí)候發(fā)送此消息
2.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_DESTROY消息,當(dāng)一個(gè)窗口將被銷(xiāo)毀時(shí),發(fā)送此消息
3.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀后發(fā)送此消息
4.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作,被CWnd調(diào)用
MFC應(yīng)用程序中打開(kāi)模式對(duì)話框的函數(shù)調(diào)用順序
1.DoModal()重載函數(shù),重載DoModal()成員函數(shù) 2.PreSubclassWindow()重載函數(shù),允許首先子分類一個(gè)窗口
3.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被創(chuàng)建
4.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
5.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息,以告訴窗口正在移動(dòng)
6.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息,以允許改變對(duì)話框中控件的字體
7.OnInitDialog()消息響應(yīng)函數(shù),響應(yīng)WM_INITDIALOG消息,發(fā)送此消息以允許初始化對(duì)話框中的控件,或者是創(chuàng)建新控件
8.OnShowWindow()消息響應(yīng)函數(shù),響應(yīng)WM_SHOWWINDOW消息,該函數(shù)被ShowWindow()函數(shù)調(diào)用
9.OnCtlColor()消息響應(yīng)函數(shù),響應(yīng)WM_CTLCOLOR消息,被父窗口發(fā)送已改變對(duì)話框或?qū)υ捒蛏厦婵丶念伾?/p>
10.OnChildNotify()重載函數(shù),作為WM_CTLCOLOR消息的結(jié)果發(fā)送
MFC應(yīng)用程序中關(guān)閉模式對(duì)話框的順序
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)WM_CLOSE消息,當(dāng)“關(guān)閉”按鈕被單擊的時(shí)候,該函數(shù)被調(diào)用
2.OnKillFocus()消息響應(yīng)函數(shù),響應(yīng)WM_KILLFOCUS消息,當(dāng)一個(gè)窗口即將失去鍵盤(pán)輸入焦點(diǎn)以前被發(fā)送
3.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_DESTROY消息,當(dāng)一個(gè)窗口即將被銷(xiāo)毀時(shí),被發(fā)送
4.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀以后被發(fā)送
5.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作被CWnd調(diào)用
打開(kāi)無(wú)模式對(duì)話框的順序
1.PreSubclassWindow()重載函數(shù),允許用戶首先子分類一個(gè)窗口 2.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被創(chuàng)建
3.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
4.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息以告訴窗口正在移動(dòng)
5.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息以允許改變對(duì)話框中控件的字體
以上這些的執(zhí)行都是按給定的順序執(zhí)行!
只有清楚的了解應(yīng)用程序的執(zhí)行順序,才能在編寫(xiě)代碼的時(shí)候知道,在什么時(shí)候應(yīng)該執(zhí)行什么,以及在什么地方該處理什么!
這只是本人總結(jié)的一點(diǎn)小小的經(jīng)驗(yàn),希望能對(duì)MFC的初學(xué)者有所幫助!MFC應(yīng)用程序中處理消息的順序
1.AfxWndProc()該函數(shù)負(fù)責(zé)接收消息,找到消息所屬的CWnd對(duì)象,然后調(diào)用AfxCallWndProc
2.AfxCallWndProc()該函數(shù)負(fù)責(zé)保存消息(保存的內(nèi)容主要是消息標(biāo)識(shí)符和消息參數(shù))供應(yīng)用程序以后使用,然后調(diào)用WindowProc()函數(shù)
3.WindowProc()該函數(shù)負(fù)責(zé)發(fā)送消息到OnWndMsg()函數(shù),如果未被處理,則調(diào)用DefWindowProc()函數(shù)
4.OnWndMsg()該函數(shù)的功能首先按字節(jié)對(duì)消息進(jìn)行排序,對(duì)于WM_COMMAND消息,調(diào)用OnCommand()消息響應(yīng)函數(shù),對(duì)于WM_NOTIFY消息調(diào)用OnNotify()消息響應(yīng)函數(shù)。任何被遺漏的消息將是一個(gè)窗口消息。OnWndMsg()函數(shù)搜索類的消息映像,以找到一個(gè)能處理任何窗口消息的處理函數(shù)。如果OnWndMsg()函數(shù)不能找到這樣的處理函數(shù)的話,則把消息返回到WindowProc()函數(shù),由它將消息發(fā)送給DefWindowProc()函數(shù)
5.OnCommand()該函數(shù)查看這是不是一個(gè)控件通知(lParam參數(shù)不為NULL,如果lParam參數(shù)為空的話,說(shuō)明該消息不是控件通知),如果它是,OnCommand()函數(shù)會(huì)試圖將消息映射到制造通知的控件;如果他不是一個(gè)控件通知(或者如果控件拒絕映射的消息)OnCommand()就會(huì)調(diào)用OnCmdMsg()函數(shù)
6.OnCmdMsg()根據(jù)接收消息的類,OnCmdMsg()函數(shù)將在一個(gè)稱為命令傳遞(Command Routing)的過(guò)程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類是一個(gè)框架類,則命令和通知消息也被傳遞到視圖和文檔類,并為該類尋找一個(gè)消息處理函數(shù)
MFC應(yīng)用程序創(chuàng)建窗口的過(guò)程
1.PreCreateWindow()該函數(shù)是一個(gè)重載函數(shù),在窗口被創(chuàng)建前,可以在該重載函數(shù)中改變創(chuàng)建參數(shù)(可以設(shè)置窗口風(fēng)格等等)
2.PreSubclassWindow()這也是一個(gè)重載函數(shù),允許首先子分類一個(gè)窗口
3.OnGetMinMaxInfo()該函數(shù)為消息響應(yīng)函數(shù),響應(yīng)的是WM_GETMINMAXINFO消息,允許設(shè)置窗口的最大或者最小尺寸
4.OnNcCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_NCCREATE消息,發(fā)送消息以告訴窗口的客戶區(qū)即將被創(chuàng)建
5.OnNcCalcSize()該函數(shù)也是消息響應(yīng)函數(shù),響應(yīng)WM_NCCALCSIZE消息,作用是允許改變窗口客戶區(qū)大小
6.OnCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送消息告訴一個(gè)窗口已經(jīng)被創(chuàng)建
7.OnSize()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送該消息以告訴該窗口大小已經(jīng)發(fā)生變化
8.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息說(shuō)明窗口在移動(dòng)
9.OnChildNotify()該函數(shù)為重載函數(shù),作為部分消息映射被調(diào)用,告訴父窗口即將被告知一個(gè)窗口剛剛被創(chuàng)建
MFC應(yīng)用程序關(guān)閉窗口的順序(非模態(tài)窗口)
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_CLOSE消息,當(dāng)關(guān)閉按鈕被單擊的時(shí)候發(fā)送此消息
2.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_DESTROY消息,當(dāng)一個(gè)窗口將被銷(xiāo)毀時(shí),發(fā)送此消息
3.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀后發(fā)送此消息
4.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作,被CWnd調(diào)用
MFC應(yīng)用程序中打開(kāi)模式對(duì)話框的函數(shù)調(diào)用順序
1.DoModal()重載函數(shù),重載DoModal()成員函數(shù) 2.PreSubclassWindow()重載函數(shù),允許首先子分類一個(gè)窗口
3.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被創(chuàng)建
4.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
5.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息,以告訴窗口正在移動(dòng)
6.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息,以允許改變對(duì)話框中控件的字體
7.OnInitDialog()消息響應(yīng)函數(shù),響應(yīng)WM_INITDIALOG消息,發(fā)送此消息以允許初始化對(duì)話框中的控件,或者是創(chuàng)建新控件
8.OnShowWindow()消息響應(yīng)函數(shù),響應(yīng)WM_SHOWWINDOW消息,該函數(shù)被ShowWindow()函數(shù)調(diào)用
9.OnCtlColor()消息響應(yīng)函數(shù),響應(yīng)WM_CTLCOLOR消息,被父窗口發(fā)送已改變對(duì)話框或?qū)υ捒蛏厦婵丶念伾?/p>
10.OnChildNotify()重載函數(shù),作為WM_CTLCOLOR消息的結(jié)果發(fā)送
MFC應(yīng)用程序中關(guān)閉模式對(duì)話框的順序
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)WM_CLOSE消息,當(dāng)“關(guān)閉”按鈕被單擊的時(shí)候,該函數(shù)被調(diào)用
2.OnKillFocus()消息響應(yīng)函數(shù),響應(yīng)WM_KILLFOCUS消息,當(dāng)一個(gè)窗口即將失去鍵盤(pán)輸入焦點(diǎn)以前被發(fā)送 3.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_DESTROY消息,當(dāng)一個(gè)窗口即將被銷(xiāo)毀時(shí),被發(fā)送
4.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀以后被發(fā)送
5.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作被CWnd調(diào)用
打開(kāi)無(wú)模式對(duì)話框的順序
1.PreSubclassWindow()重載函數(shù),允許用戶首先子分類一個(gè)窗口
2.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被創(chuàng)建
3.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
4.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息以告訴窗口正在移動(dòng)
5.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息以允許改變對(duì)話框中控件的字體
MFC的一些主要成員函數(shù)
CWinThread::m_pMainWnd:保存指向應(yīng)用程序的主窗口指針。CWinThread::GetMainWnd:查詢指向線程主窗口的指針。CWinThread::InitInstance:重載以實(shí)現(xiàn)線程實(shí)例的初始化。AfxGetApp:獲得指向CWinApp對(duì)象的指針。
AfxGetInstanceHandle:獲得當(dāng)前應(yīng)用程序?qū)嵗木浔?。AfxGetResourceHandle:獲得應(yīng)用程序資源的句柄。
AfxGetAppName:獲得一個(gè)字符串指針,其中包含了應(yīng)用程序的名字。另外,如果你擁有一個(gè)指向CWinApp對(duì)象的指針,可以通過(guò)m_pszExename來(lái)獲得應(yīng)用程序的名字。
CDocument::IsModified:標(biāo)識(shí)文檔從最近一次保存以來(lái)是否被修改過(guò)。CDocument::UpdateAllViews:通知所有視圖文檔已被修改的消息。CWnd::m_hWnd:指明與這個(gè)CWnd對(duì)象相關(guān)聯(lián)的HWND句柄。CWnd::Create:創(chuàng)建并初始化與CWnd對(duì)象相關(guān)聯(lián)的子窗口。
CWnd::PreCreateWindow:在與CWnd對(duì)象相關(guān)聯(lián)的窗口被創(chuàng)建之前調(diào)用。CWnd::IsWindowEnabled:確定一個(gè)窗口是否允許鼠標(biāo)和鍵盤(pán)輸入。CWnd::EnableWindow:允許或禁止鼠標(biāo)和鍵盤(pán)輸入。CWnd::SetWindowPos:改變子窗口、彈出窗口和頂層窗口的大小、位置以及順序。CWnd::GetDlgItem:獲得指定的對(duì)話框中具有指定ID的控件。CWnd::UpdateData:初始化對(duì)話框或獲得對(duì)話框中的數(shù)據(jù)。CWnd::GetWindowRect:獲得CWnd的屏幕坐標(biāo)。CWnd::GetDC:獲得客戶區(qū)的設(shè)備環(huán)境。
CWnd::RedrawWindow:更新客戶區(qū)中的指定矩形或區(qū)域。CWnd::UpdateWindow:更新客戶區(qū)。
CWnd::Invalidate:使整個(gè)客戶區(qū)無(wú)效。CWnd::ShowWindow:顯示或隱藏窗口。
CWnd::ClientToScreen:將給定點(diǎn)或顯示器上矩形的客戶區(qū)坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)。
CWnd::ScreenToClient:將給定點(diǎn)或顯示器上矩形的屏幕坐標(biāo)轉(zhuǎn)換為客戶坐標(biāo)。CWnd::SetWindowText:將窗口的文本或標(biāo)題文字(如果有)設(shè)為指定的文本。CWnd::SetFont:設(shè)置當(dāng)前字體。
CWnd::GetDlgItemInt:將給定對(duì)話框中控件的文本轉(zhuǎn)換為整數(shù)。
CWnd::SetTimer:安裝一個(gè)系統(tǒng)定時(shí)器,當(dāng)它被激活時(shí),發(fā)送一個(gè)WM_TIMER消息。
CWnd::KillTimer:銷(xiāo)毀一個(gè)系統(tǒng)定時(shí)器。CWnd::FlashWindow:使窗口閃爍一次。CWnd::MessageBox:創(chuàng)建并顯示一個(gè)窗口,其中包含了應(yīng)用程序提供的消息和標(biāo)題
第二篇:VC編程資料總結(jié)
CString類的完美總結(jié)
2012-05-04 15:50:50 我來(lái)說(shuō)兩句
收藏
我要投稿
①、CString 類對(duì)象的初始化: CString str;
CString str1(_T(“abc”));CString str2 = _T(“defg”);
TCHAR szBuf[] = _T(“kkk”);CString str3(szBuf);CString str4 = szBuf;
TCHAR *p = _T(“1k2”);//TCHAR * 轉(zhuǎn)換為 CString CString str5(p);CString str6 = p;
CString str7(str1);CString str8 = str7;
②、字符串基本操作: ● 長(zhǎng)度:GetLength();CString str(_T(“abc”));
int len = str.GetLength();//len == 3
● 是否為空,即不含字符:IsEmpty();● 清空字符串:Empty();CString str(_T(“abc”));
BOOL mEmpty = str.IsEmpty();//mEmpty == FALSE str.Empty();
mEmpty = str.IsEmpty();//mEmpty == TRUE
● 轉(zhuǎn)換大小寫(xiě):MakeUpper、MakeLower ● 轉(zhuǎn)換順序:MakeReverse CString str(_T(“Abc”));str.MakeUpper();//str == ABC str.MakeLower();//str == abc str.MakeReverse();//str == cba
● 字符串的連接:+、+= CString str(_T(“abc”));
str = _T(“de”)+ str + _T(“kp”);//str == deabckp str += _T(“123”);//str == deabckp123 TCHAR szBuf[] = _T(“789”);
str += szBuf;//str == deabckp123789
● 字符串的比較:==、!=、(<、>、<=、>= 不常用)、Compare(區(qū)分大小寫(xiě))、CompareNoCase(不區(qū)分大小寫(xiě))
CString str1(_T(“abc”));CString str2 = _T(“aBc”);if(str1 == str2){
MessageBox(_T(“str1 等于 str2”));}else{
MessageBox(_T(“str1 不等于 str2”));}
③、字符串的查找:
Find、ReverseFind、FindOneOf 三個(gè)函數(shù)可以實(shí)現(xiàn)字符串的查找操作
Find 從指定位置開(kāi)始查找指定的字符或者字符串,返回其位置,找不到返回-1;
舉例:
CString str(_T(“abcdefg”));
int idx = str.Find(_T(“cde”), 0);//idx 的值為2;
ReverseFind 從字符串末尾開(kāi)始查找指定的字符,返回其位置,找不到返回-1,雖然是從后向前查找,但是位置為從開(kāi)始算起;
CString str(_T(“abcdefg”));
int idx = str.ReverseFind('e');//idx 的值為4;
FindOneOf 查找參數(shù)中給定字符串中的任意字符,返回第一次出現(xiàn)的位置,找不到返回-1;
CString str(_T(“abcabcd”));
int idx = str.FindOneOf(_T(“cbd”));//idx 的值為1;
④、字符串的替換與刪除:
Replace 替換 CString 對(duì)象中的指定的字符或者字符串,返回替換的個(gè)數(shù),無(wú)匹配字符返回 0;
CString str(_T(“abcdabc”));int num = str.Replace('b', 'k');//str == akcdakc, num == 2
CString str(_T(“abcdabc”));
int num = str.Replace(_T(“bc”), _T(“kw”));//str == akwdakw, num == 2
Remove 刪除 CString 對(duì)象中的指定字符,返回刪除字符的個(gè)數(shù),有多個(gè)時(shí)都會(huì)刪除;
CString str(_T(“abcdabcb”));
int num = str.Remove('b');//str == acdac, num == 3
Delete 刪除 CString 對(duì)象中的指定位置的字符,返回處理后的字符串長(zhǎng)度;
CString str(_T(“abcd”));
int num = str.Delete(1, 3);//str == a, num == 1
⑤、字符串的提?。?/p>
Left、Mid、Right 三個(gè)函數(shù)分別實(shí)現(xiàn)從 CString 對(duì)象的 左、中、右 進(jìn)行字符串的提取操作;
CString str(_T(“abcd”));
CString strResult = str.Left(2);//strResult == ab strResult = str.Mid(1);//strResult == bcd strResult = str.Mid(0, 2);//strResult == ab strResult = str.Right(2);//strResult == cd
⑥、單個(gè)字符的修改: GetAt、SetAt 可以獲取與修改 CString 對(duì)象中的單個(gè) TCHAR 類型字符;
操作符也可以獲取 CString 對(duì)象中的單個(gè)字符,但為只讀的,不能進(jìn)行修改;
CString str(_T(“abcd”));
str.SetAt(0, 'k');//str == kbck TCHAR ch = str.GetAt(2);//ch == c
⑦、其他類型與 CString 對(duì)象類型的轉(zhuǎn)換:
● 格式化字符串:Format 方法,實(shí)現(xiàn)從 int、long 等數(shù)值類型、TCHAR、TCHAR * 等類型向 CString 類型的轉(zhuǎn)換;
int num = 6;CString str;
str.Format(_T(“%d”), num);
● CString 類型向 int 等數(shù)值類型、TCHAR * 類型的轉(zhuǎn)換: TCHAR *pszBuf = str.GetBuffer();str.ReleaseBuffer();
TCHAR *p =(LPTSTR)(LPCTSTR)str;
CString str1(_T(“123”));int num = _ttoi(str1);
⑧、CString 對(duì)象的 Ansi 與 Unicode 轉(zhuǎn)換: 大家可以直接使用上節(jié)課給大家講解的方法,此外這里給大家介紹一種從 Ansi 轉(zhuǎn)換到 Unicode 的隱含方法:
//當(dāng)前工程環(huán)境為Unicode CString str;str = “abc”;char *p = “defg”;str = p;
⑨、CString 對(duì)象字符串所占用的字節(jié)數(shù): CString str = _T(“abc”);
錯(cuò)誤的求法:sizeof(CString)、sizeof(str)
正確的求法:str.GetLength()*sizeof(TCHAR)
⑩、當(dāng)作為 TCHAR * 類型傳參時(shí),確保申請(qǐng)了足夠用的空間,比如使用 GetModuleFileName 函數(shù)
轉(zhuǎn)載]CString、TCHAR*、char*轉(zhuǎn)換
[轉(zhuǎn)載]CString、TCHAR*、char*轉(zhuǎn)換 char*、TCHAR*轉(zhuǎn)換CString CString str(****)下面詳細(xì)寫(xiě)一下其它轉(zhuǎn)換
////////////////////////////// /* *********************************************************************** * 函數(shù): TransCStringToTCHAR * 描述:將CString 轉(zhuǎn)換為 TCHAR* * 日期:
*********************************************************************** */ TCHAR* CPublic::CString2TCHAR(CString &str){ int iLen = str.GetLength();TCHAR* szRs = new TCHAR[iLen];lstrcpy(szRs, str.GetBuffer(iLen));str.ReleaseBuffer();return szRs;} /* *********************************************************************** * 函數(shù): TCHAR2Char * 描述:將TCHAR* 轉(zhuǎn)換為 char* * 日期:
*********************************************************************** */ char* TCHAR2char(TCHAR* tchStr){ int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個(gè)字符,因此不用普通計(jì)算長(zhǎng)度
char* chRtn = new char[iLen+1] wcstombs(chRtn,tchStr,iLen+1);//轉(zhuǎn)換成功返回為非負(fù)值 return chRtn;} /* *********************************************************************** * 函數(shù): char2tchar * 描述:將 char* 轉(zhuǎn)換為 TCHAR* * 日期:
*********************************************************************** */ TCHAR *char2tchar(char *str){ int iLen = strlen(str);TCHAR *chRtn = new TCHAR[iLen+1];mbstowcs(chRtn, str, iLen+1);return chRtn;} /* *********************************************************************** * 函數(shù): CString2char * 描述:將CString轉(zhuǎn)換為 char* * 日期:
*********************************************************************** */ char* CPublic::CString2char(CString &str){ int len = str.GetLength();char* chRtn =(char*)malloc((len*2+1)*sizeof(char));//CString的長(zhǎng)度中漢字算一個(gè)長(zhǎng)度
memset(chRtn, 0, 2*len+1);USES_CONVERSION;strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));return chRtn;} //參考
/////////////////////// //Pocket PC上的UNICODE和ANSI字符串
//By Vassili Philippov, September 26, 2001.//楊方思歧 譯
//////////////////////// /* *********************************************************************** * 函 數(shù) 名:GetAnsiString * 描 述:將CString(unicode)轉(zhuǎn)換為char*(ANSI)* 參 數(shù):CString &s 要轉(zhuǎn)換的CString * 返 回 值:返回轉(zhuǎn)換結(jié)果 * 創(chuàng)建日期:
* 最后修改:
*********************************************************************** */ char* GetAnsiString(const CString &s){ int nSize = 2*s.GetLength();char *pAnsiString = new char[nSize+1];wcstombs(pAnsiString, s, nSize+1);return pAnsiString;}
////////////////////////////////////////////////////////////////////////////////////////////// WideCharToMultiByte和MultiByteToWideChar函數(shù)的用法
支持Unicode編碼,需要多字節(jié)與寬字節(jié)之間的相互轉(zhuǎn)換
WideCharToMultiByte的代碼頁(yè)用來(lái)標(biāo)記與新轉(zhuǎn)換的字符串相關(guān)的代碼頁(yè)。
MultiByteToWideChar的代碼頁(yè)用來(lái)標(biāo)記與一個(gè)多字節(jié)字符串相關(guān)的代碼頁(yè)。
常用的代碼頁(yè)由CP_ACP和CP_UTF8兩個(gè)。
使用CP_ACP代碼頁(yè)就實(shí)現(xiàn)了ANSI與Unicode之間的轉(zhuǎn)換。
使用CP_UTF8代碼頁(yè)就實(shí)現(xiàn)了UTF-8與Unicode之間的轉(zhuǎn)換。
wstring AnsiToUnicode((const string& str){ int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(),-1,NULL,0);
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP,0, str.c_str(),-1,(LPWSTR)pUnicode, unicodeLen);
wstring rt;rt =(wchar_t*)pUnicode;delete pUnicode;return rt;}
string UnicodeToAnsi(const wstring& str){
char* pElementText;int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_ACP, 0, str.c_str(),-1, NULL, 0, NULL, NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char)*(iTextLen + 1));
::WideCharToMultiByte(CP_ACP, 0, str.c_str(),-1, pElementText,iTextLen,NULL,NULL);
string strText;
strText = pElementText;
delete[] pElementText;
return strText;}
wstring UTF8ToUnicode((const string& str){ int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0, str.c_str(),-1,NULL,0);
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_UTF8,0, str.c_str(),-1,(LPWSTR)pUnicode, unicodeLen);
wstring rt;rt =(wchar_t*)pUnicode;delete pUnicode;return rt;}
string UnicodeToUTF8(const wstring& str){
char* pElementText;int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_UTF8, 0, str.c_str(),-1, NULL, 0, NULL, NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char)*(iTextLen + 1));
::WideCharToMultiByte(CP_UTF8, 0, str.c_str(),-1, pElementText,iTextLen,NULL,NULL);
string strText;
strText = pElementText;
delete[] pElementText;
return strText;}
第三篇:PB11.5+WEB客戶端編程技巧總結(jié)
PB11.5 WEB客戶端編程技巧總結(jié)
一、概述
用PB11.5把現(xiàn)有C/S程序轉(zhuǎn)換成WEB應(yīng)用程序后,保留了大部分C/S環(huán)境下的代碼,并且大部分都能執(zhí)行過(guò)去。但是在BS平臺(tái)下,原來(lái)的PB代碼從客戶端轉(zhuǎn)成了IIS上的服務(wù)代碼,原的“客戶端”就成了瀏覽器,轉(zhuǎn)換后的客戶端編程其實(shí)就是面向?yàn)g覽器的編程。
根據(jù)目前我對(duì)PB11.5所了解的情況,PB11在代碼方面可以使用條件編譯方式嵌入.NET代碼,其實(shí)我感覺(jué).net里能實(shí)現(xiàn)的內(nèi)容,用PB代碼也基本能實(shí)現(xiàn),.net里不能實(shí)現(xiàn)的,PB也可實(shí)現(xiàn)(如datawindow),但這些都屬于服務(wù)端的編程范疇,實(shí)際應(yīng)用中很少會(huì)碰到在PB里再嵌入.net代碼的,除非要寫(xiě)一些很特殊的代碼,所以,可以說(shuō),服務(wù)端方面僅用PB代碼就可以徹底解決。
但實(shí)際上,這種純PB代碼的程序一發(fā)布成WEB后,會(huì)存在不少問(wèn)題,在C/S環(huán)境下,要完成一個(gè)操作往往需要多個(gè)交互過(guò)程,如“打開(kāi)窗口、選擇行、輸入數(shù)據(jù)、返回、刷新頁(yè)面”這么一個(gè)過(guò)程,轉(zhuǎn)成B/S后,運(yùn)行是這樣的“打開(kāi)窗口(POSTBACK)、選擇行(POSTBACK)、輸入數(shù)據(jù)(回車(chē)后POSTBACK)、返回(POSTBACK)”,那么多的POSTBACK使得操作變得很笨重,就連簡(jiǎn)單的一個(gè)MESSAGEBOX,都要2次POSTBACK:“打開(kāi)消息窗(POSTBACK)、點(diǎn)確定(POSTBACK)”。因此,使用PB11開(kāi)發(fā)WEB程序?qū)⒁媾R一個(gè)很?chē)?yán)峻的問(wèn)題:如何提高客戶端的性能,減少POSTBACK次數(shù)。
值得慶幸的是,PB11.5的WEB頁(yè)面使用了AJAX技術(shù),POSTBACK并不會(huì)產(chǎn)生整個(gè)頁(yè)面的提交,而是部分提交。另外,PB11.5還提供了不少客戶端的編程接口,可以通過(guò)這些編程接口進(jìn)一步優(yōu)化頁(yè)面。那么,有哪些地方可以運(yùn)用javascript和html代碼優(yōu)化頁(yè)面呢?
1、數(shù)據(jù)窗口對(duì)象appendedhtml屬性。
剛接觸PB11.5的WEB開(kāi)發(fā)的時(shí)候,一定會(huì)被他的那么多unsupport屬性所蒙蔽,原先在C/S下絢麗多彩的界面,轉(zhuǎn)成B/S后變得暗淡無(wú)光,因此也就失去了進(jìn)一步開(kāi)發(fā)的樂(lè)趣。其實(shí)不然,PB提供了appendedhtml的屬性后,使WEB界面編程變得更為靈活,一個(gè)小小的appendedhtml,可以將DHTML、javascript等所有頁(yè)面技術(shù)嵌入到里面去??梢詫?shí)現(xiàn)的效果如:透明、垂直居中、漸變、鼠標(biāo)移動(dòng)特效等等。
查看發(fā)布成WEB后的頁(yè)面代碼,會(huì)發(fā)現(xiàn),appendedhtml里的內(nèi)容是放在
2、數(shù)據(jù)窗口事件。此方法是在數(shù)據(jù)窗口對(duì)象初始化的時(shí)候?qū)懭雽?duì)應(yīng)的腳本,如: #IF DEFINED PBWEBFORM THEN dw_1.JavaScriptFile = ”uo_dw.js“ dw_1.OnClientItemChanged = ”MyItemChanged“ #END IF 另外,在發(fā)布成WEB的時(shí)候,必須嵌入已寫(xiě)好的javascript腳本,這些被腳本會(huì)在頁(yè)面的head區(qū)被包含進(jìn)去。
經(jīng)過(guò)上面代碼一處理,數(shù)據(jù)窗口的事件被觸發(fā)后就會(huì)直接跳到j(luò)avascript腳本去處理而不執(zhí)行回調(diào)(就是PB里寫(xiě)的程序不會(huì)被執(zhí)行)。
那么,哪些事件支持腳本編程呢?根據(jù)PB11.5文檔所提供的技術(shù)說(shuō)明,目前僅限于數(shù)據(jù)窗口內(nèi)事件處理,包括clicked、DoubleClicked、RButtonDown、ButtonClicked、ButtonClicking、ItemFocusChanged、ItemError、ItemChanged、RowFocusChanged。在指定客戶端事件腳本的時(shí)候,事件前都必須加”O(jiān)nClient”。
二、客戶端程序的優(yōu)化思路
借助javascript腳本技術(shù),我們可以對(duì)目前程序上的幾個(gè)操作瓶頸進(jìn)行優(yōu)化。
1、數(shù)據(jù)窗口的條件性POSTBACK。
如果不對(duì)datawindow進(jìn)行腳本處理,那么如果事件內(nèi)有代碼,則將會(huì)在觸發(fā)該事件的時(shí)候執(zhí)行POSTBACK,這樣會(huì)有很多沒(méi)必要的POSTBACK。如,在itemchanged事件里寫(xiě)入了對(duì)身份證輸入后進(jìn)行檢查的代碼,在IE下運(yùn)行的情況是,該數(shù)據(jù)窗口的任何列輸入完后都會(huì)執(zhí)行POSTBACK,有沒(méi)有辦法實(shí)現(xiàn)只輸入身份證的時(shí)候才POSTBACK呢?可以通過(guò)以下方法:
(1)在窗口的open事件里寫(xiě)入腳本。#IF DEFINED PBWEBFORM THEN dw_1.JavaScriptFile = ”uo_dw.js“ dw_1.OnClientItemChanged = ”MyItemChanged“ #END IF(2)腳本里寫(xiě)入條件回調(diào)程序。
function MyItemChanged(sender, rowNumber, columnName,newValue){if(columnName== ‘sfz’){return PBDataWindow_ItemChangedReject(sender, rowNumber, columnName, newValue);} Else {//do nothing} } 其中,PBDataWindow_ItemChangedReject為調(diào)用數(shù)據(jù)窗口的itemchanged事件,數(shù)據(jù)窗口提供的回調(diào)函數(shù),可以在PBDataWindow.js找到,查閱PB幫助文檔可以查看其具體用法。
2、PB代碼向javascript腳本轉(zhuǎn)化。
首先,必須理解PB-WEB程序的運(yùn)行模式,見(jiàn)下圖: 數(shù)據(jù)庫(kù) SQL 數(shù)據(jù)集 EASERVER 代理對(duì)象 IIS PBVM request IE 代理對(duì)象 response 從上圖可以看出,IE與數(shù)據(jù)庫(kù)之間其實(shí)就是數(shù)據(jù)請(qǐng)求的關(guān)系,我們可以認(rèn)為,除了需要從服務(wù)端下載數(shù)據(jù)和頁(yè)面加載的請(qǐng)求外,其他都是沒(méi)必要的請(qǐng)求。這些沒(méi)必要的請(qǐng)求包括:
1)messagebox。消息提示可以說(shuō)是UI界面交互的最重要的環(huán)節(jié)之一,幾乎所有業(yè)務(wù)操作都會(huì)涉及,很遺憾的是,除了數(shù)據(jù)窗口事件里的javascript支持本地消息提示外,目前還沒(méi)有一種辦法可以脫離IIS,直接在PB代碼里調(diào)用IE消息提示的方法。2)簡(jiǎn)單的數(shù)據(jù)檢查。如登錄時(shí)的驗(yàn)證碼、輸入格式校驗(yàn)、身份證合法性檢查等,可以直接在javascript里處理。
3)輔助性的數(shù)據(jù)輸入。包括下拉數(shù)據(jù)窗口、下拉日歷等。在傳統(tǒng)的C/S模式下,直接打開(kāi)一個(gè)窗口就可以實(shí)現(xiàn)下拉數(shù)據(jù)選擇功能,但是這種方法在WEB下已經(jīng)行不通,頻繁的POSTBACK會(huì)使操作變得笨重、緩慢,甚至比直接輸入來(lái)的慢。但是有些下拉的數(shù)據(jù)又需要從服務(wù)端取,這樣可以將下拉窗口設(shè)計(jì)成共用模塊啟動(dòng)時(shí)直接裝載到頁(yè)面,在需要調(diào)用的地方用javascript代碼顯示出來(lái),然后象服務(wù)端請(qǐng)求數(shù)據(jù),選擇數(shù)據(jù)后返回、設(shè)置數(shù)據(jù)、隱藏下拉窗口,這一過(guò)程只要一個(gè)POSTBACK,即數(shù)據(jù)請(qǐng)求過(guò)程。
4)頁(yè)面切換。在IE下打開(kāi)多個(gè)業(yè)務(wù)窗口,這些窗口都已經(jīng)裝載到了IE下,可以通過(guò)javascript腳本實(shí)現(xiàn)頁(yè)面顯示、隱藏,以提高響應(yīng)速度。
5)窗口、對(duì)象的關(guān)閉、銷(xiāo)毀。類似此操作,可以直接在IE下完成,無(wú)需要再送到IIS上處理。
6)實(shí)現(xiàn)回車(chē)后焦點(diǎn)切換。打開(kāi)PB安裝文件所在路徑,打開(kāi)F:Program FilesSybasePowerBuilder 11.5DotNETwebrootscripts目錄下的dwcommon.js,并修改其代碼段。函數(shù)為: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);實(shí)現(xiàn)按回車(chē)鍵的tab效果。
三、PB與javascript混合編程技巧
1、使用PB提供的javascript函數(shù)
打開(kāi)IIS目錄,在發(fā)布好的站點(diǎn)文件夾下,有個(gè)scripts文件夾,存放的是所有PB的內(nèi)置函數(shù),這些函數(shù)描述了客戶端的調(diào)用、回調(diào)方法,具體使用方法在PB文檔里有做了描述。
數(shù)據(jù)窗口對(duì)象(大部分?jǐn)?shù)據(jù)窗口函數(shù)接口里都用sender做為參數(shù))可以引用的函數(shù)可以在dwcommon.js里的function HTDW_DataWindowClass(name)里找到,如下圖:
如:this.SetItem = HTDW_SetItem;這行表示,可以調(diào)用數(shù)據(jù)窗口的SetItem()函數(shù)進(jìn)行設(shè)置數(shù)據(jù)窗口值,至于SetItem參數(shù),可以查找HTDW_SetItem函數(shù)的參數(shù)結(jié)構(gòu)。如下圖:
調(diào)用舉例:
數(shù)據(jù)窗口的回調(diào)函數(shù),可以在PBDataWindow.js里找到,上面已經(jīng)舉過(guò)例子,這里不做描述了。
2、靈活地操控WEB元素
WEB頁(yè)面上,每個(gè)元素都有一個(gè)ID值,是唯一標(biāo)識(shí)該元素的鍵值。如表示“確定”按鈕的ID為ID_OK。
要在javascript里編寫(xiě)程序?qū)崿F(xiàn)與頁(yè)面元素交互,最重要的一點(diǎn)是要弄清楚從PB轉(zhuǎn)換成頁(yè)面后的元素的ID值,這些ID值是IIS發(fā)送過(guò)來(lái)的,與PB里的對(duì)象名有一定的對(duì)應(yīng)關(guān)系。目前PB技術(shù)文檔沒(méi)有這方面的說(shuō)明,但我們可以通過(guò)多種途徑來(lái)獲得這些元素ID。1)利用event對(duì)象獲得窗口事件的源、父對(duì)象
如,可以定義var o = window.event.srcElement;獲取鼠標(biāo)在窗口上點(diǎn)擊的對(duì)象,通過(guò)o.parentElement可以獲取該對(duì)象的父對(duì)象。
2)通過(guò)getElementByName、getElementById、getElementsByTagName等方法獲取對(duì)象ID。
3)通過(guò)alert消息提示將對(duì)象ID顯示出來(lái)。
有了這些ID,接下去如何操控界面元素,就和C/S編程差不多了,有關(guān)函數(shù)操作、屬性操作等可以參考javascript和DHTML相關(guān)資料。
應(yīng)用舉例:
第四篇:數(shù)控車(chē)床編程(個(gè)人總結(jié))
數(shù)控車(chē)床編程入門(mén)
第一節(jié)
在數(shù)控系統(tǒng)中采用了兩種系統(tǒng)即機(jī)床坐標(biāo)系XOY和編程坐標(biāo)系XpOpYp,在手動(dòng)控制、對(duì)刀、回零過(guò)程中采用的市機(jī)床坐標(biāo)系。在編程即自動(dòng)加工時(shí)則是編程坐標(biāo)系。
一、機(jī)床坐標(biāo)系
機(jī)床坐標(biāo)系采用標(biāo)準(zhǔn)坐標(biāo)系,即右手笛卡爾坐標(biāo)系
二、編程坐標(biāo)系
第二節(jié)
在數(shù)控系統(tǒng)中,每個(gè)加工程序的最大容量是8K(即8196個(gè)字符),并最多可擁有999個(gè)程序段。在輸入程序時(shí),必須按照系統(tǒng)所能接受的格式來(lái)編程。
一、程序段的格式
所謂程序段的格式,是指程序段書(shū)寫(xiě)規(guī)則,它包含機(jī)床所要求執(zhí)行的功能和運(yùn)動(dòng)所需要的幾何數(shù)據(jù)和工藝數(shù)據(jù)。
一個(gè)零件加工程序由若干以段號(hào)大小次序排列的程序段組成,每個(gè)程序段由以下幾個(gè)部分組成:
N程序段號(hào)001——999
G準(zhǔn)備功能01——99
XZ坐標(biāo)或增量值?0.01——?9999.99
F進(jìn)給速度10mm/min——500mm/min
M輔助功能
S主軸速度0——2500轉(zhuǎn)/分
T刀具號(hào)1——8
數(shù)控車(chē)床控制系統(tǒng)采用的程序段格式是可變程序段格式,所謂可變程序段格式就是程序段長(zhǎng)度隨著輸入數(shù)據(jù)和字長(zhǎng)的變化而變化。
程序通常由地址字和地址字后的數(shù)字和符號(hào)組成。一個(gè)程序段由一個(gè)或多個(gè)程序地址字組成。例如:
X——110F400
這種程序段格式,以地址功能字為首,后跟一串?dāng)?shù)字組成。若干個(gè)程序地址字組成程序段。例如:
N072G03X70Z——36.5I0K——2F200(上段程序中NGXZIKF均為地址字功能字)
N程序段號(hào)G準(zhǔn)備功能X Z I K 坐標(biāo)地址F進(jìn)給量除英制螺紋加工段中螺紋節(jié)距值以外,其余的加工段中坐標(biāo)值均為公制(mm)。
直徑編程:程序段中X軸的編程采用直徑編程,也就是說(shuō)輸入X軸的尺寸值均采用直徑量。
第三節(jié)
準(zhǔn)備功能用字母G后跟兩位數(shù)字來(lái)編程,它總是編在程序段的開(kāi)始,用來(lái)定義幾何形態(tài)和車(chē)床的工作狀態(tài)。
下面就G功能作詳細(xì)說(shuō)明:
① G90絕對(duì)值方式:一旦采用本指令后,后面的程序段的坐標(biāo)值都按絕對(duì)值方式編程,即所有點(diǎn)的表示數(shù)值都是在編程坐標(biāo)系中的點(diǎn)坐標(biāo)值,直到執(zhí)行G91為
止。
② G91增量方式:一旦采用本指令后,后面的程序段的坐標(biāo)值都應(yīng)按增量方式來(lái)
編程,即所有點(diǎn)的表示數(shù)值均以前一個(gè)坐標(biāo)位置作為起點(diǎn)來(lái)計(jì)算運(yùn)動(dòng)終點(diǎn)的位置矢量。直到執(zhí)行G90指令為止。
G00快速定位:執(zhí)行此條指令時(shí)將先沿X方向再沿Z方向快速運(yùn)動(dòng)至定位點(diǎn)。G01直線插補(bǔ):不運(yùn)動(dòng)的坐標(biāo)可以省略,數(shù)值不必寫(xiě)入。
G02順時(shí)針圓弧插補(bǔ):用G02指令編時(shí),可以自動(dòng)過(guò)象限,但不得超過(guò)1800。G03逆時(shí)針圓弧插補(bǔ):用G03指令編時(shí),除圓弧運(yùn)動(dòng)方向相反外,其余跟G02指令完全相同。
⑦ G04暫停指令:指程序在執(zhí)行到某一段后,需要暫停一段時(shí)間,進(jìn)行某些人為的調(diào)整,這時(shí)就可以用G04指令使程序暫停,當(dāng)暫停時(shí)間一到,繼續(xù)執(zhí)行下一⑧ 段程序。暫停時(shí)間由P后數(shù)值說(shuō)明,單位為秒,范圍為0.01——99.99秒。③ ④ ⑤ ⑥
第五篇:powerbuilder編程簡(jiǎn)單入門(mén)(個(gè)人總結(jié))
2011-4 by 邵家鑫 From Tsinghua 一種簡(jiǎn)單的powerbuilder10數(shù)據(jù)庫(kù)編程介紹
1、需求分析與數(shù)據(jù)庫(kù)建立
進(jìn)行需求分析(需求分析文檔),確定數(shù)據(jù)關(guān)系,建立各種數(shù)據(jù)表,建立數(shù)據(jù)庫(kù)(Access),設(shè)置ODBC數(shù)據(jù)源(控制面板->管理工具->數(shù)據(jù)源ODBC->“用戶DSN”菜單下點(diǎn)“添加”?選相應(yīng)的數(shù)據(jù)源驅(qū)動(dòng)程序,如果用Access2003建立的,則選第三項(xiàng)“Driver do Microsoft Access(*.mdb),然后點(diǎn)擊“完成”->輸入數(shù)據(jù)源名,如mydata,然后點(diǎn)擊“選擇”按鈕選擇建好的數(shù)據(jù)庫(kù),最后點(diǎn)“確定”,如下圖所示)
2、界面設(shè)計(jì)(功能界面、重要數(shù)據(jù)表維護(hù)界面)
界面設(shè)計(jì)主要分為幾個(gè)部分
(1)按照管理系統(tǒng)所需的功能設(shè)計(jì)界面。
首先畫(huà)出所有可能的業(yè)務(wù)流程(數(shù)據(jù)的各種可能輸入、修改、刪除業(yè)務(wù),數(shù)據(jù)的輸出、顯示業(yè)務(wù))
(2)按照需要維護(hù)的表設(shè)計(jì)界面(往往給最高權(quán)限管理員直接修改數(shù)據(jù)用)
3、開(kāi)始程序編寫(xiě)
(1)新建一個(gè)workspace(new->workspace->workspace)(2)在workspace下建立一個(gè)目標(biāo)
(new->Target->application),可取名frame
2011-4 by 邵家鑫 From Tsinghua(3)在目標(biāo)下建一個(gè)主窗口
可取名w_main,窗體名一般以w_開(kāi)頭(new->PB Object->Window),將其Window Type設(shè)為“mdihelp!”
(4)為主窗口建一個(gè)主菜單
可取名m_frame,菜單名一般以m_開(kāi)頭(new->PB Object->Menu)(5)程序中設(shè)置ODB ODBC 點(diǎn)擊按鈕,選中“ODB ODBC”項(xiàng),然后單擊右邊“New”按鈕,彈出如下對(duì)話框,設(shè)置Profile Name和Data Source,如圖所示。
(6)建立配置文件
配置文件取名“config.ini”,內(nèi)容如下:
[MyDB] DBMS=ODBC AutoCommit=False DBParm=ConnectString='DSN=mydata;UID=;PWD='
(7)自動(dòng)連接數(shù)據(jù)庫(kù)與退出程序關(guān)閉數(shù)據(jù)庫(kù)的編寫(xiě)
2011-4 by 邵家鑫 From Tsinghua 首先建立Global Variables如下: string gs_userid,gs_username //登錄用戶標(biāo)識(shí)、用戶姓名 string gs_root_path,gs_ini_path
//應(yīng)用路徑和主配置文件路徑
其次申明Global External Functions如下:
FUNCTION int GetComputerNameA(ref string computername,ref long size)LIBRARY “KERNEL32.DLL” alias for “GetComputerNameA;Ansi” FUNCTION long GetCurrentDirectoryA(long nBufferLength, REF string szBuffer)LIBRARY “KERNEL32.DLL” alias for “GetCurrentDirectoryA;Ansi” FUNCTION long SetCurrentDirectoryA(string szPathName)LIBRARY “KERNEL32.DLL” alias for “SetCurrentDirectoryA;Ansi” //end prototypes 在程序的總?cè)肟冢ㄟM(jìn)入“”)Open事件中寫(xiě)入以下代碼: // Profile moneyandfriends string ls_1
//設(shè)置應(yīng)用根目錄
gs_root_path = space(255)GetCurrentDirectoryA(255, gs_root_path)if right(gs_root_path,1)= '' then gs_root_path = left(gs_root_path,len(gs_root_path)1)if pos(ps_sql, “group by ”)> 0 then
ls_end = right(ps_sql, len(ps_sql)pos(ps_sql, “order by ”)+ 1)
ls_where = mid(ps_sql, pos(ps_sql, “where ”)+6, len(ps_sql)-len(ls_front)-len(ls_end)-6)else
ls_where = mid(ps_sql, pos(ps_sql, “where ”)+6, len(ps_sql)-len(ls_front)-6)end if
2011-4 by 邵家鑫 From Tsinghua ls_return = ls_front + “where(” + ls_where +“)and ” + ps_where + “ ” + ls_end else if pos(ps_sql, “group by ”)> 0 then
ls_front = left(ps_sql, pos(ps_sql, “group by ”)pos(ps_sql, “group by ”)+ 1)elseif pos(ps_sql, “order by ”)> 0 then
ls_front = left(ps_sql, pos(ps_sql, “order by ”)pos(ps_sql, “order by ”)+ 1)else
ls_front = ps_sql
ls_end = “" end if ls_return = ls_front + ” where “ + ps_where + ” “ + ls_end end if return ls_return(2)在窗口中聲明局部變量用來(lái)記錄最初的沒(méi)有where語(yǔ)句的窗口的SQL查詢語(yǔ)句 string is_original_sql
(3)聲明局部變量ls_old_select, ls_new_select,如下使用 string ls_old_select, ls_new_select ls_old_select = dw_ttxx.GetSQLSelect()if is_original_sql = ”" then is_original_sql = ls_old_select else //避免條件被循環(huán)添加
ls_old_select = is_original_sql end if
ls_new_select = f_change_where(ls_old_select, is_conditions)dw_窗口.SetSQLSelect(ls_new_select)


文檔為doc格式
聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。
[推薦]加工中心編程技巧小結(jié)
[推薦]加工中心編程技巧小結(jié) 一般編程技巧 cnc加工中心中幾組常用指令的區(qū)別及編程技巧 隨著科技的發(fā)展和社會(huì)的進(jìn)步,人們對(duì)產(chǎn)品的性能和質(zhì)量要求越來(lái)越高,從而使數(shù)控機(jī)床應(yīng)......
數(shù)控車(chē)床編程和改造技巧(5篇)
數(shù)控車(chē)床編程和改造技巧 摘 要:隨著科學(xué)技術(shù)的發(fā)展,普通機(jī)床越來(lái)越不能滿足市場(chǎng)的需求,其勞動(dòng)強(qiáng)度大,危險(xiǎn)性高,且不能滿足現(xiàn)代科學(xué)的批量生產(chǎn)需要,越來(lái)越多的企業(yè)將普通機(jī)床逐漸轉(zhuǎn)......
實(shí)驗(yàn)一 VC開(kāi)發(fā)環(huán)境的使用和常用算法的編程概要
實(shí)驗(yàn)一 VC開(kāi)發(fā)環(huán)境的使用和常用算法的編程 一、實(shí)驗(yàn)?zāi)康?熟悉VC++6.0的集成開(kāi)發(fā)環(huán)境,學(xué)會(huì)用它編寫(xiě)、調(diào)試、運(yùn)行程序。 二、 實(shí)驗(yàn)要求 對(duì)VC++6.0集成開(kāi)發(fā)環(huán)境進(jìn)行操作,用它編寫(xiě)......
C++編程例題個(gè)人總結(jié)2014-07-06
VS2008通過(guò)編譯 1、交換兩個(gè)數(shù)值 #include using namespace std; void swap(int x,int y); int main {int a=2,b=3;swap(a,b);printf("a=%d,b=%d",a,b);return 0;} void s......
刀具和編程總結(jié)
① 白鋼刀(即高速鋼刀具)因其通體銀白色而得名,主要用于直壁加工。白鋼刀價(jià)格便宜,但切削壽命短、吃刀量小、進(jìn)給速度低、加工效率低,在數(shù)控加工中較少使用。 ② 飛刀(即鑲嵌式刀......
編程題總結(jié)(范文大全)
C作業(yè)匯總 1. short a,b=32767; /*short類型在內(nèi)存中占2B*/ a=b+1; 問(wèn):a的值是多少?并分析原因。 2. 有一4位數(shù)整數(shù),假設(shè)用abcd表示,請(qǐng)把這個(gè)4位數(shù)的每個(gè)數(shù)位用表達(dá)式表示出來(lái)......
數(shù)據(jù)庫(kù)編程總結(jié)(推薦)
數(shù)據(jù)庫(kù)編程總結(jié) 當(dāng)前各種主流數(shù)據(jù)庫(kù)有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS A......
一點(diǎn)Duilib編程總結(jié)
一點(diǎn)Duilib編程總結(jié) 1.duilib簡(jiǎn)介 duilib是一個(gè)開(kāi)源的DirectUI界面庫(kù),簡(jiǎn)潔但是功能強(qiáng)大。而且還是BSD的license,所以即便是在商業(yè)上,大家也可以安心使用。 現(xiàn)在大家可以從這個(gè)......