㈠ 可視化編程
可視化編程,亦即可視化程序設計:以「所見即所得」的編程思想為原則,力圖實現編程工作的可視化,即隨時可以看到結果,程序與結果的調整同步
可視化編程是與傳統的編程方式相比而言的,這里的「可視」,指的是無須編程,僅通過直觀的操作方式即可完成界面的設計工作,是目前最好的Windows應用程序開發工具
可視化編程語言的特點主要表現在兩個方面:一是基於面向對象的思想,引入了控制項的概念和事件驅動;二是程序開發過程一般遵循以下步驟,即先進行界面的繪制工作,再基於事件編寫程序代碼,以響應滑鼠、鍵盤的各種動作
可視化編程十問1
什麼是可視化程序設計?可視化(Visual)程序設計是一種全新的程序設計方法,它主要是讓程序設計人員利用軟體本身所提供的各種控制項,像搭積木式地構造應用程序的各種界面
2
可視化程序設計有哪些優點?可視化程序設計最大的優點是設計人員可以不用編寫或只需編寫悔瞎則很少的程序代碼,就能完成應用程序的設計,這樣就能極大地提高設計人員的工作效率
3
能夠進行可視化程序設計的語言有哪些?能進行可視化程序設計的語言很多,比較常用的有微軟的VisualBasic、VisualC++、中文VisualFoxpro、Borland公司的Delphi等
4
可視化程序設計中有哪些基本概念?主要的幾個基本概念有表單、組件、屬性、事件、方法等
5
什麼是表單(Form)?表單是指進行程序設計時的窗口,我們主要是通過在表單中放置各種部件(如命令按鈕、復選框、單選框、滾動條等)來布置應用程序的運行界面
6
什麼是組件?所謂組件,就是組成程序運行界面的各種部件,如:命令按鈕、復選框、單選框、滾動條等
7
什麼是屬神慎性?屬性就是組件的性質
它說明組件在程序運行的過程中是如何顯示的、組件的大小是多少、顯示在何處、是否可見、是否有效8
屬性可以分成哪幾類?屬性可分成三類,設計屬性:是在進行設計時就可發揮作用的屬性;運行屬性:這是在程序運行過程中才發揮作用的屬性;只讀屬性:是一種只能查看而不能改變的屬性
9
什麼是事件?事件就是對一個組件的操作
如用滑鼠點擊一個命令按鈕,在這里,點擊滑鼠就稱為一個事件(Click事件)
10
什麼是方法?方法就是某個事件發生後要執行的具體操作,類似以前的程序
例如當我們用滑鼠單擊「退出」命令按鈕時,程序就會通過執行一條命令而結束運行,命令的執行過程就叫方法
面向對象程序設計1.歷史回顧1967年挪威計算中心的KistenNygaard和OleJohanDahl開發了Simula67語言,它提供了比子程序更高一級的抽象和封裝,引入了數據抽象和類的概念,它被認為是第一個面向對象語言
20世紀70年代初,PaloAlto研究中心的AlanKay所在的研究小組開發出Smalltalk語言,之後又開發出Smalltalk-80,Smalltalk-80被認為是最純正的面向對象語言,它對後來出現的面向對象語言,如Object-C,C,Self,Eiffl都產生了深遠的影響
隨著面向對象語言的出現,面向對象程序設計也就應運而生且得到迅速發展
之後,面向對象不斷向其他階段滲透,1980年GradyBooch提出了面向對象設計的概念,之後面向對象分析開始
1985年,第一個商用面向對象資料庫問世
1990年以來,面向對象分析、測試、度量和管理等研究都得到長足發展
實際上,「對象」和「對象的屬性」這樣的概念可以追溯到20世紀50年代初,它們首先出現於關於人工智慧的早期著作中
但是出現了面向對象語言之後,面向對象思想才得到了迅速的發展
過去的幾十年中,程序設計語言對抽象機制的支持程度不斷提高:從機器語言到匯編語言,到高級語言,直到面向對象語言
匯編語言出現後,程序員就避免了直接使用0-1,而是利用符號來表示機器指令,從而更方便地編寫程序;當程序規模繼續增長的時候,出現了Fortran、C、Pascal等高級語言,這些高級語言使得編寫復雜的程序變得容易,程序員們可以更好地對付日益增加的復雜性
但是,如果軟體系統達到一定規模,即使應用結構化程序設計方法,局勢仍將變得不可控制
作為一種降低復雜性的工具,面向對象語言產生了,面向對象程序設計也隨之產生
2.面向對象程序設計的基本概念面向對象程序設計中的概念主要包括:對象、類、數據抽象、繼承、動態綁定、數據封裝、多態性碧棚、消息傳遞
通過這些概念面向對象的思想得到了具體的體現
1)對象對象是運行期的基本實體,它是一個封裝了數據和操作這些數據的代碼的邏輯實體
2)類類是具有相同類型的對象的抽象
一個對象所包含的所有數據和代碼可以通過類來構造
3)封裝封裝是將數據和代碼捆綁到一起,避免了外界的干擾和不確定性
對象的某些數據和代碼可以是私有的,不能被外界訪問,以此實現對數據和代碼不同級別的訪問許可權
4)繼承繼承是讓某個類型的對象獲得另一個類型的對象的特徵
通過繼承可以實現代碼的重用:從已存在的類派生出的一個新類將自動具有原來那個類的特性,同時,它還可以擁有自己的新特性
5)多態多態是指不同事物具有不同表現形式的能力
多態機制使具有不同內部結構的對象可以共享相同的外部介面,通過這種方式減少代碼的復雜度
6)動態綁定綁定指的是將一個過程調用與相應代碼鏈接起來的行為
動態綁定是指與給定的過程調用相關聯的代碼只有在運行期才可知的一種綁定,它是多態實現的具體形式
7)消息傳遞對象之間需要相互溝通,溝通的途徑就是對象之間收發信息
消息內容包括接收消息的對象的標識,需要調用的函數的標識,以及必要的信息
消息傳遞的概念使得對現實世界的描述更容易
3.面向對象語言一個語言要稱為面向對象語言必須支持幾個主要面向對象的概念
根據支持程度的不同,通常所說的面向對象語言可以分成兩類:基於對象的語言,面向對象的語言
基於對象的語言僅支持類和對象,而面向對象的語言支持的概念包括:類與對象、繼承、多態
舉例來說,Ada就是一個典型的基於對象的語言,因為它不支持繼承、多態,此外其他基於對象的語言還有Alphard、CLU、Euclid、Mola
面向對象的語言中一部分是新發明的語言,如Smalltalk、Java,這些語言本身往往吸取了其他語言的精華,而又盡量剔除他們的不足,因此面向對象的特徵特別明顯,充滿了蓬勃的生機;另外一些則是對現有的語言進行改造,增加面向對象的特徵演化而來的
如由Pascal發展而來的ObjectPascal,由C發展而來的Objective-C,C,由Ada發展而來的Ada95等,這些語言保留著對原有語言的兼容,並不是純粹的面向對象語言,但由於其前身往往是有一定影響的語言,因此這些語言依然寶刀不老,在程序設計語言中佔有十分重要的地位
4.面向對象程序設計的優點面向對象出現以前,結構化程序設計是程序設計的主流,結構化程序設計又稱為面向過程的程序設計
在面向過程程序設計中,問題被看作一系列需要完成的任務,函數(在此泛指常式、函數、過程)用於完成這些任務,解決問題的焦點集中於函數
其中函數是面向過程的,即它關注如何根據規定的條件完成指定的任務
在多函數程序中,許多重要的數據被放置在全局數據區,這樣它們可以被所有的函數訪問
每個函數都可以具有它們自己的局部數據
下圖顯示了一個面向過程程序中函數和數據的關系
圖1面向過程程序設計中函數和數據的關系示例這種結構很容易造成全局數據在無意中被其他函數改動,因而程序的正確性不易保證
面向對象程序設計的出發點之一就是彌補面向過程程序設計中的一些缺點:對象是程序的基本元素,它將數據和操作緊密地連結在一起,並保護數據不會被外界的函數意外地改變
下圖顯示了一個面向對象程序中對象與函數和數據的關系
圖2面向對象程序設計中函數和數據的關系示例比較面向對象程序設計和面向過程程序設計,還可以得到面向對象程序設計的其他優點:1)數據抽象的概念可以在保持外部介面不變的情況下改變內部實現,從而減少甚至避免對外界的干擾;2)通過繼承大幅減少冗餘的代碼,並可以方便地擴展現有代碼,提高編碼效率,也減低了出錯概率,降低軟體維護的難度;3)結合面向對象分析、面向對象設計,允許將問題域中的對象直接映射到程序中,減少軟體開發過程中中間環節的轉換過程;4)通過對對象的辨別、劃分可以將軟體系統分割為若干相對為獨立的部分,在一定程度上更便於控制軟體復雜度;6)以對象為中心的設計可以幫助開發人員從靜態(屬性)和動態(方法)兩個方面把握問題,從而更好地實現系統;7)通過對象的聚合、聯合可以在保證封裝與抽象的原則下實現對象在內在結構以及外在功能上的擴充,從而實現對象由低到高的升級
面對對象的程序設計方法在數據輸入模塊內部設計中,採用面向對象的設計方法
[6]面向對象的基本概念如下:對象:對象是要研究的任何事物
從一本書到一家圖書館,單的整數到整數列龐大的資料庫、極其復雜的自動化工廠、太空梭都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規則、計劃或事件
對象由數據(描述事物的屬性)和作用於數據的操作(體現事物的行為)構成一獨立整體
從程序設計者來看,對象是一個程序模塊,從用戶來看,對象為他們提供所希望的行為
在對內的操作通常稱為方法
類:類是對象的模板
即類是對一組有相同數據和相同操作的對象的定義,一個類所包含的方法和數據描述一組對象的共同屬性和行為
類是在對象之上的抽象,對象則是類的具體化,是類的實例
類可有其子類,也可有其它類,形成類層次結構
消息:消息是對象之間進行通信的一種規格說明
一般它由三部分組成:接收消息的對象、消息名及實際變元
面向對象主要特徵:封裝性:封裝是一種信息隱蔽技術,它體現於類的說明,是對象的重要特性
封裝使數據和加工該數據的方法(函數)封裝為一個整體,以實現獨立性很強的模塊,使得用戶只能見到對象的外特性(對象能接受哪些消息,具有那些處理能力),而對象的內特性(保存內部狀態的私有數據和實現加工能力的演算法)對用戶是隱蔽的
封裝的目的在於把對象的設計者和對象者的使用分開,使用者不必知曉行為實現的細節,只須用設計者提供的消息來訪問該對象
繼承性:繼承性是子類自動共享父類之間數據和方法的機制
它由類的派生功能體現
一個類直接繼承其它類的全部描述,同時可修改和擴充
繼承具有傳遞性
繼承分為單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類)
類的對象是各自封閉的,如果沒繼承性機制,則類對象中數據、方法就會出現大量重復
繼承不僅支持系統的可重用性,而且還促進系統的可擴充性
多態性:對象根據所接收的消息而做出動作
同一消息為不同的對象接受時可產生完全不同的行動,這種現象稱為多態性
利用多態性用戶可發送一個通用的信息,而將所有的實現細節都留給接受消息的對象自行決定,如是,同一消息即可調用不同的方法
例如:Print消息被發送給一圖或表時調用的列印方法與將同樣的Print消息發送給一正文文件而調用的列印方法會完全不同
多態性的實現受到繼承性的支持,利用類繼承的層次關系,把具有通用功能的協議存放在類層次中盡可能高的地方,而將實現這一功能的不同方法置於較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不同的響應
在OOPL中可通過在派生類中重定義基類函數(定義為重載函數或虛函數)來實現多態性
綜上可知,在面對對象方法中,對象和傳遞消息分別表現事物及事物間相互聯系的概念
類和繼承是是適應人們一般思維方式的描述範式
方法是允許作用於該類對象上的各種操作
這種對象、類、消息和方法的程序設計範式的基本點在於對象的封裝性和類的繼承性
通過封裝能將對象的定義和對象的實現分開,通過繼承能體現類與類之間的關系,以及由此帶來的動態聯編和實體的多態性,從而構成了面向對象的基本特徵
面向對象設計是一種把面向對象的思想應用於軟體開發過程中,指導開發活動的系統方法,是建立在「對象」概念基礎上的方法學
對象是由數據和容許的操作組成的封裝體,與客觀實體有直接對應關系,一個對象類定義了具有相似性質的一組對象
而每繼承性是對具有層次關系的類的屬性和操作進行共享的一種方式
所謂面向對象就是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統
按照BjarneSTroustRUP的說法,面向對象的編程範式:l決定你要的類;2給每個類提供完整的一組操作;3明確地使用繼承來表現共同點
由這個定義,我們可以看出:面向對象設計就是「根據需求決定所需的類、類的操作以及類之間關聯的過程」
面向對象設計方法的特點和面臨的問題面向對象設計方法以對象為基礎,利用特定的軟體工具直接完成從對象客體的描述到軟體結構之間的轉換
這是面向對象設計方法最主要的特點和成就
面向對象設計方法的應用解決了傳統結構化開發方法中客觀世界描述工具與軟體結構的不一致性問題,縮短了開發周期,解決了從分析和設計到軟體模塊結構之間多次轉換映射的繁雜過程,是一種很有發展前途的系統開發方法
但是同原型方法一樣,面向對象設計方法需要一定的軟體基礎支持才可以應用,另外在大型的MIS開發中如果不經自頂向下的整體劃分,而是一開始就自底向上的採用面向對象設計方法開發系統,同樣也會造成系統結構不合理、各部分關系失調等問題
所以面向對象設計方法和結構化方法目前仍是兩種在系統開發領域相互依存的、不可替代的方法
㈡ 如何用Delphi編寫自己的可視化控制項
可視化控制項(Visual Component)實際上就是一個類(class) 要編寫一個類 可以直接在* pas文件中編寫 但是要編寫控制項 則必須使橘陸陸用包(package) 從File菜單中選擇New 新建一個Package 這就是存放和安裝控制項用的包 然後單擊Package窗口中的Add按鈕 添加一個元件(Unit)在彈出的對話框最上方選擇New Component 因為一個控制項的所有屬性 方法 事件不可能都由自己編 所以就需要選擇祖先類(或者叫做 父類 或 基類 ) 然後再在其上面添加自己的屬性 方法 事件 在Ancestor type後的下拉框中選擇所需的祖先類 由於編寫可視化控制項必須要畫圖 所以選擇TGraphicControl作為祖先類 再在Class Name框中輸入新控制項(類)的名稱 一般以 T 開頭 Palette Page是用來選擇新控制項在Delphi的窗口中的控制項頁面名稱 例如 Standard 這個可以自己取 在Unit File Name中添好新控制項文件的路徑及文件名 單擊OK按鈕 新的控制項便加入了 現在可以為該控制項編寫代碼了
下面以編寫一個可以自定義圖片的滾動條為例 說明編寫可視化控制項的方法 按照上面的方法 選擇TGraphicControl為祖先類 新控制項的名稱是TPigHorizontalScroller (小豬水平滾動條) 選擇好文件路徑和文件名後 單擊OK按鈕 開始編寫代碼
每一個控制項 都會被創建(Create)和刪除(Destroy) 所以必須首先編寫這兩個過程 對於控制項中的每一個過程 都必須在前面先定義 然後再在後面編寫 定義的過程或屬性有三種 (1)在private後定義的是屬於控制項圓頃內部使用的 使用該控制項的人無法看到 (2)在protected後定義的一般是看不到的 只在別人使用該控制項作為祖先類編寫其它控制項時才可見 (3)在public後定義的只允許別人在程序中調用 (4)在published後定義的可以在屬性窗口(Object Inspector)中看到 由於創建和刪除過程除了在編程過程中建立控制項時自動執行外 還可能在程序運行過程中動態創建控制項時被調用 所以把它定義在public後⑴ (該序號表示次步驟在所附源程序中的代碼的位置 下同)現在也許還不知到應該在這兩個過程中編寫什麼 如何去編 我們在下面將會講到
我們首先為這個控制項添加一些屬性 我們定義一個Max屬性用於設置或讀取滾動條的最大值 因為在程序中一般不直接使用屬性 所以要定義一個變數 和該屬性對應起來 一邊修改或讀取其值 因為它只在控制項內部使用 所以我們把它定義在private後⑵ (一般與屬性相關聯的變數都以 F 開頭 例如FMax)定義好變數後 再定義屬性 這個屬性需要再Object Inspector窗口中可見 所以把它定義再published後⑶ 定義的語法是
property <屬性名>:<類型> read <讀取該屬性時對應的變數> write <寫入該屬性時對應的變數或過程>
其它的變數和屬性也類似的定義(例如Min最小值 Value當前值等) 下面我們定義幾個屬性和變數 用於設置滾動條的圖片(因為圖片變數比較特殊 所以單獨講一下) 我們把LeftButtonUpPicture(向左按鈕圖片) LeftButtonDownPicture(向左按鈕按下圖片)等定義為TBitmap類型(一定要定義相對應的變數)
大家一定注意到了 在所附的源程序中悉橡 定義這幾個屬性時 read後所指定的讀取屬性時對應的變數是F… 而write後指定的寫入該屬性時對應的不是一個變數 而是一個Set…之類的東西 這是一個自定義的過程 作為該功能的過程的定義為
procere <過程名>(Value: <被設置的屬性的值的類型>)
因為執行寫入該類屬性的時候需要做其它的事情 所以不能光用一個變數來處理 應該用一個過程來處理 這中過程一般定義在protected後 在該類過程中 使用一個在⑷處這樣一個語句來給TBitmap類型的變數來賦值 這是由於該類型的變數不能直接賦值而採用的
定義完這些TBitmap類型的變數的屬性後 上面講的create過程和destroy過程中就需要編寫代碼了 因為TBitmap也是一個類 所以在create過程中必須創建⑸ 在destroy過程中必須釋放掉(free)⑹ 這里⑺所指的inherited語句是用於指明該過程是從祖先類類中繼承來的 (這個一定不能掉)
因為我們編寫的是可視化控制項 所以必須在控制項上畫圖 我們這個控制項的祖先類TGraphicControl中封裝有一個Canvas(畫布)對象 我們可以直接使用它來畫圖 如果你對畫布的使用還不太熟悉 最好去找一本書來看一看
下面要做的工作就是畫圖了 如何在控制項上畫圖呢?祖先類TGraphicControl中有一個Paint事件 當控制項需要重畫時便會自動觸發 我們現在要做的就是要為這個事件編寫一段程序 首先在protected後定義一個Canvas對象 由於它是祖先類中已有的 所以不需要加任何說明⑻ 我們將使用這個對象來畫圖 接著 就要定義一個Paint過程 編寫繪制控制項的代碼 先在public後定義Paint過程 由於它是由祖先類觸發的 而不是由用戶調用的 所以後面必須加上override 否則 該控制項將會由於Paint過程永遠不會被調用而不成為可視化控制項⑼ 下面我們就來編寫Paint過程的代碼⑽
該文章所附的源程序的Paint過程中的T_Height等變數是用來保存滾動條中按鈕 滑塊等的大小的 這部分程序和普通的Application中的程序差別不大 大部分都是對畫布進行操作 相信大家一看就明白 值得注意的是下面對FAutoSize變數的判斷⑾ FAutoSize是和該控制項的屬性AutoSize相關聯的布爾型變數 是用來設置這個控制項的大小是否隨圖片的大小而變化的 注意 在控制項的代碼中 一般都不直接調用屬性 而是使用與其相對應的的變數
程序編到這里 就算是終於給自己的新控制項做了一個外型了 不過它還不能滾動 現在我們來編寫滑鼠事件 讓我們能夠操縱它 滑鼠事件的過程的定義和Paint過程很相似 只是後面要加上參數說明⑿ 滑鼠事件分為MouseDown MouseMove和MouseUp三個 在定義後面都要加上override 接下來在後面編寫它的代碼 注意 這里的滑鼠事件是Mouse… 而不是通常的OnMouse… 可是在⒀處的定義是干什麼用的呢?這里的事件定義 都是給用戶使用的 也就是說 當使用該控制項時 會在Object Inspector中的Event頁面中顯示出來
這些滑鼠事件的代碼也非常簡單 判斷滑鼠的坐標 在畫布上畫出相應的圖片等 並同時觸發相應的事件 值得注意的是 在調用自定義事件時 都要先用⒁處的這樣一個語句來判斷用戶是否已經為該事件編寫代碼 這一點非常重要 否則會調用出錯
大家注意到了 剛才所調用的事件都是自定義的 定義的方法也很簡單 和定義屬性差不多 只是類型時TNotifyEvent罷了
TNotifyEvent是默認事件 其定義為
TNotifyEvent = procere(Sender: TObject)
如果你要定義另外形式的事件 就必須這樣 先在type後編寫
<事件類型名稱> = procere(<參?gt;:<類型>)
例如
TCustomEvent = procere(a: Integer; b:String);
然後在public後定義
<事件名稱>:<事件類型名稱>
例如
AnEvent: TCustomEvent;
看完這些 這整個程序你應該理解了吧 如果編譯或運行出錯 注意檢查以下幾點
(1)create和destroy過程中是否有inherited語句 (2)TBitmap類型的變數create和free了沒有 (3)過程前有沒有控制項名 例如 TPigHorizontalScroller MoseMove
判斷滑鼠是否進入或離開控制項的方法
定義如下的過程
procere MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;procere MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
lishixin/Article/program/Delphi/201311/8448
㈢ 怎樣用c語言在vc上編寫可視化
用API函數來編程,完全可以實現可視化的應用。
#include <windows.h>悄派
#include "resource.h"
#define _UNICODE
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("CommonDlg") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_MYICON)) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = MAKEINTRESOURCE(IDM_MYMENU) ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, // window class name
TEXT ("CommonDlg"), // window caption
WS_OVERLAPPEDWINDOW, //啟鋒賀 window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, //基臘 program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
HBRUSH hbrush ;
CHOOSECOLOR cc ; //顏色對話框結構
static COLORREF rgbColorDlg, rgbFontDlg ;
static COLORREF acrCustClr[16];
CHOOSEFONT cf; // 字體對話框結構
static LOGFONT lf; // 邏輯字體的結構
static HFONT hfont, hfontPrev;
OPENFILENAME ofn; // 打開、另存為對話框結構
static TCHAR szFile[MAX_PATH]; //存儲路徑、文件名的緩沖區
static TCHAR szFilter[] = TEXT ("Common Dialog Files (*.CDF)\0*.cdf\0")
TEXT ("文本文件 (*.TXT)\0*.cdf\0")
TEXT ("All Files (*.*)\0*.*\0\0") ;
switch (message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_FILE_OPEN: // 創建"打開"通用對話框
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter ;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH ;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// 創建對話框,若對話框結束後返回TRUE,則將ofn的lpstrFile域中返回
// 文件名復制到緩沖區szFile
if (GetOpenFileName(&ofn) == TRUE)
{
strcpy(szFile, ofn.lpstrFile );
MessageBox(hwnd, szFile, "打開完畢", MB_OK | MB_ICONINFORMATION) ;
}
return 0 ;
case IDM_FILE_SAVE: // 創建"另存為"通用對話框
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter ;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrDefExt = TEXT(".cdf") ;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// 創建對話框,若對話框結束後返回TRUE,則將ofn的lpstrFile域中返回
// 文件名復制到緩沖區szFile
if (GetSaveFileName(&ofn) == TRUE)
{
strcpy(szFile, ofn.lpstrFile );
MessageBox(hwnd, szFile, "保存完畢", MB_OK | MB_ICONINFORMATION) ;
}
return 0;
case IDM_FILE_EXIT:
PostMessage(hwnd, WM_QUIT, wParam, lParam);
return 0 ;
case IDM_SET_FONT: // 創建"字體"通用對話框
ZeroMemory(&cf, sizeof(CHOOSEFONT)) ;
cf.lStructSize = sizeof (CHOOSEFONT);
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = rgbFontDlg ;
cf.Flags = CF_SCREENFONTS | CF_EFFECTS;
// 對話框結束返回若為TRUE,則以返回的字體信息創建邏輯字體
if (ChooseFont(&cf)==TRUE)
{
hfont = CreateFontIndirect(cf.lpLogFont);
rgbFontDlg = cf.rgbColors;
}
InvalidateRect(hwnd, NULL, TRUE) ;
return 0 ;
case IDM_SET_COLOR: // 創建"顏色"通用對話框
ZeroMemory(&cc, sizeof(CHOOSECOLOR));
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = hwnd;
cc.lpCustColors = (LPDWORD) acrCustClr;
cc.Flags = CC_FULLOPEN ;
if (ChooseColor(&cc) == TRUE)
{
rgbColorDlg = cc.rgbResult;
hbrush = CreateSolidBrush(rgbColorDlg);
SetClassLong(hwnd, GCL_HBRBACKGROUND, (LONG)hbrush);// 改變客戶區的顏色
}
InvalidateRect(hwnd, NULL, TRUE) ;
return 0 ;
}
break;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect(hwnd, &rect) ;
if(rgbColorDlg != 0)
SetBkColor(hdc, rgbColorDlg);
if(hfont != 0 )
{
SelectObject(hdc, hfont);
SetTextColor(hdc, rgbFontDlg);
}
DrawText(hdc, TEXT("通用對話框"), -1 , &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
是否能看懂
㈣ 怎麼使用編程語言程序「實現可視化界面」
你說的是桌面GUI程序開發吧,目前來說,用c語言來做桌面GUI程序開發的不多,主要做底層開發,下面我主要介紹一下c++和Python主流的做桌面GUI開發的一些框架和庫,主要如下:
c++開發GUI
1.第一個比較經典的框架了,相信大部分初學c++的GUI開發的人都學過,微軟自己推出
的開發框架,在vc,vs中經常用到,微軟基礎類庫MFC,封裝了底層WindowsAPI,可以明顯降低開發人員的工作量,但是只能在windows平台下使用,不具有跨平台性,而且就目前來說,靈活性不是很高,過程設計的有些繁瑣:
2.Qt,這是一個跨平台的c++圖形用戶開發框架,易學易用,很快就能上手,相對於MFC來說,學起來能更快一些,比較簡單,自帶的QtDesigner可以更快的設計用戶界面,更靈活,也更方便:
python開發GUI
1.第一個就是python自帶的Tkinter包,基本可以滿足小的GUI程序的開發,但是資料比較少,開發起來也不夠靈活:
2.就是wxPython,這個包的功能相對於Tkinter來說,功能能更強大一些,也能靈活一些,網上的教程和例子也挺多的:
3.最後就是PyQt,這個是Qt提供給python的一個介麵包,專門為了python開發GUI程序,功能很強大也很靈活,只要你有一定的Qt基礎,很快就能掌握:
其實python還有許多開發GUI程序的包,像kivy,pygame等,都可以開發GUI程序,我這里就不贅述了,感興趣的話可以到官網搜搜相關資料和文檔,挺多的。
桌面GUI程序開發,其實幾乎每門主流語言都有對應的框架殲臘禪或包直接來用,我這里就大概介紹了c++和python兩種語言常用的框架和局鬧包,像C#,java等,都有對應的包或類直接可以調用使用,開發起來GUI程序也很快,我這里就不詳細介紹了,可以到網上搜搜相關教程和例子,希望以上分享的內容能對你有所幫助吧氏塵。
㈤ 如何可視化編輯這個exe程序
1、可視化編輯exe?你是指修改各個控制項的相對位置或者文本框的內容?這個要看情況,如果該軟體編程的時候沒有對資源文件進行加密之類處理,那就可以用pe修改工具強行打開(這種可以直接打開的軟體極為罕見,記得零幾年的時候還可以看到)
2、如果你說可視化編棗鄭輯exe,同時還要芹李修改嫌岩遲功能性代碼(例如添加其他功能),既然你說錢不是問題,你直接去找開發人員買代碼算了,反匯編根本不可能達到完全可逆的地步(任何人說能夠做到那一定是騙人,編譯、鏈接是有損耗的)。
3、PEid已經很久沒有更新了,檢測新軟體的時候,通常需要開啟核心掃描才能查找軟體殼或者編譯軟體
㈥ rust語言怎麼編寫可視化界面
1、直接寫在rust語言程序沒歲轎里,適合編程使用。
2、使用input函數,運行程序時輸入。
3、做成可視化枯肆界面,然後讓雀裂程序獲得。
㈦ 想用C語言編寫一個有可視化的界面,有按鈕,有輸入框的程序
可以用MFC做界面,在Visual C++新建》項目》MFC AppWizard(exe)》dialog based》下面都默認,就能建立一個MFC工程。可以添加控制項,控制項響應的原理與VB中的類似,建議你找本MFC的教材仔細了解其原理
㈧ 如何用C語言寫出可視化程序
可以。。有專門的介面,函數運閉,api,,。。
但現在基本上不用它來寫可視化程序,,,十分費勁。。需要了解的東西也更多。。
而寫寫
控制台的程賣隱序還可以。。。。
就像我們熟知的
ping
程序中悄廳就可以。。用c來寫。。。(好像就是它寫的吧。。呵呵。。