国产精品成人免费视频_91丝袜美腿美女视频网站_国产一区二区三区在线看_亚洲欧美另类中文字幕_在线电影av不卡网址_国产视频丨精品|在线观看_日韩一区二区三区国产_国产欧美va欧美va香蕉在线_热re91久久精品国99热蜜臀_亚洲第一精品电影_久久九九亚洲综合_国产成人综合精品_97视频在线观看网址_精品视频久久久久久_日韩av片免费在线观看_久久精品国产99国产精品澳门

聚集網(jujiwang.com) - 收錄免費分類目錄信息軟文發布網址提交
免費加入

mainwin32 與 .NET 的對比:優缺點分析 (mainwindow是什么程序)

文章編號:10617時間:2024-09-28人氣:


mainwin32

前言

MainWin32 和 .NET 都是流行的 Windows 開發框架。MainWin32 是一種基于 C 語言的底層框架,而 .NET 是一種基于托管代碼的現代框架。開發者在選擇合適的框架時須權衡多種因素。本文將對 MainWin32 和 .NET 進行對比分析,幫助開發者做出明智決策。

優缺點對比

MainWin32

優點:性能出色:MainWin32 是一個底層框架,提供了對 Windows API 的直接訪問,這使其具有出色的性能。高控制性:開發者擁有對底層代碼的完全控制,這使得他們可以創建高度定制的應用程序。低系統開銷:MainWin32 的系統開銷很低,使其非常適合開發輕量級和資源受限的應用程序。缺點:學習曲線陡峭:MainWin32 需要開發者對 Windows API 有深入的了解,學習曲線陡峭。代碼復雜度高:MainWin32 需要開發者手動管理內存和資源,這可能導致代碼復雜度較高。缺乏現代功能:MainWin32 缺乏某些現代功能,例如集成的垃圾回收和類型安全。

.NET

優點:易于使用:.NET 是一種托管框架,提供了直觀的語法和簡化的開發體驗。高效開發:.NET 集成了各種庫和工具,使開發者能夠快速高效地開發應用程序。豐富的功能:.NET 提供了廣泛的功能,例如垃圾回收、類型安全和跨平臺支持。缺點:性能較低:與 MainWin32 相比,.NET 的性能較低,因為它需要額外的步驟來管理托管代碼。系統開銷較高:.NET 具有較高的系統開銷,因為它需要運行時環境和垃圾回收器。許可費用:雖然 .NETFramework 是免費的,但 Visual Studio 等開發工具需要付費許可。

適用場景

適合使用 MainWin32 的場景:需要高性能和低系統開銷的應用程序需要高度定制的應用程序需要對底層代碼有完全控制的應用程序適合使用 .NET 的場景:需要快速開發和易于維護的應用程序需要跨平臺支持的應用程序需要現代功能的應用程序

結論

MainWin32 和 .NET 都是適用于 Windows 開發的強大框架。在選擇合適的框架時,開發者應考慮應用程序的特定要求和制約因素。MainWin32 提供了出色的性能和控制度,而 .NET 提供了易于使用和豐富的功能。通過權衡優缺點并考慮適用場景,開發者可以做出明智的決策,以選擇最適合其項目需求的框架。

vb.net怎么確定一個pid是否存在?

正好我寫個一個函數封裝在DLL里了,代碼是這樣的:

檢查進程是否運行 要檢查的進程名 Public Function CheckProcessByName(ByVal ProcessName As String) As BooleanDim MgmtClass As New ManagementClass(Win32_Process)Dim rtnVal As Boolean = FalseDim mo As New ManagementObject()For Each mo In ()If mo(Name)()() = () ThenrtnVal = TrueEnd IfNextReturn rtnValEnd Function知道PID的話: 返回所有窗口句柄 Public Function ListAllProcessesHandle() As StringDim sb As New StringBuilder()Dim p As New Process()For Each p In (.)TryIf > 0 (句柄: + () + )End IfCatchEnd TryNextReturn ()End Function 窗口隱藏進程總有吧,函數調用的參數是進程名,不是窗口名。函數是自己寫的沒有調用API

c語言中,在main函數一開始定義了 int i;后來又在for語句中有int i 這樣的語句,為什么編譯時出錯。

C語言是一種計算機程序設計語言。 它既有高級語言的特點,又具有匯編語言的特點。 它可以作為系統設計語言,編寫工作系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。 因此,它的應用范圍廣泛。 C語言對操作系統和系統使用程序以及需要對硬件進行操作的場合,用C語言明顯優于其它解釋型高級語言,有一些大型應用軟件也是用C語言編寫的。 C語言具有繪圖能力強,可移植性,并具備很強的數據處理能力,因此適于編寫系統軟件,三維,二維圖形和動畫。 它是數值計算的高級語言。 常用的C語言IDE(集成開發環境)有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,Microsoft C,High C,Turbo C等等......C語言的缺點1. C語言的缺點主要是表現在數據的封裝性上,這一點使得C在數據的安全性上做的有很大缺陷,這也是C和C++的一大區別。 2. C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。 從應用的角度,C語言比其他高級語言較難掌握。 [C語言指針]指針就是C語言的一大特色,可以說C語言優于其它高級語言的一個重要原因就是因為它有指針操作可以直接進行靠近硬件的操作,但是C的指針操作也給它帶來了很多不安全的因素。 C++在這方面做了很好的改進,在保留了指針操作的同時又增強了安全性。 Java取消了指針操作,提高了安全性。 C源程序的結構特點1.一個C語言源程序可以由一個或多個源文件組成。 2.每個源文件可由一個或多個函數組成。 3.一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。 4.源程序中可以有預處理命令(include 命令僅為其中的一種),預處理命令通常應放在源文件或源程序的最前面。 5.每一個說明,每一個語句都必須以分號結尾。 但預處理命令,函數頭和花括號“}”之后不能加分號。 6.標識符,關鍵字之間必須至少加一個空格以示間隔。 若已有明顯的間隔符,也可不再加空格來間隔。 學習C語言在初學C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數學學習中不同(如運算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進行學習,待學完后面的章節知識,前面的問題也就迎刃而解了,這一方面我感覺是我們同學最欠缺,大多學不好的就是因為一開始遇到困難就放棄,曾經和好多同學談他的問題,回答是聽不懂、不想聽、放棄這樣三個過程,我反問,這節課你聽過課嗎?回答又是沒有,根本就沒聽過課,怎么說自己聽不懂呢?相應的根本就沒學習,又談何學的好?學習C語言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學習知識的重要方法,就是說,學習后面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學生最不易做到的,然而卻又是最重要的。 學習C語言就是要經過幾個反復,才能前后貫穿,積累應該掌握的C知識。 那么,我們如何學好《C程序設計》呢?一.學好C語言的運算符和運算順序這是學好《C程序設計》的基礎,C語言的運算非常靈活,功能十分豐富,運算種類遠多于其它程序設計語言。 在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。 當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。 在學習中,只要我們對此合理進行分類,找出它們與我們在數學中所學到運算之間的不同點之后,記住這些運算也就不困難了,有些運算符在理解后更會牢記心中,將來用起來得心應手,而有些可暫時放棄不記,等用到時再記不遲。 先要明確運算符按優先級不同分類,《C程序設計》運算符可分為15種優先級,從高到低,優先級為1 ~ 15,除第2、3級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序.二.學好C語言的四種程序結構(1)順序結構順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。 例如;a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那么正確的程序為: c = a; a = b; b = c; 執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b = c; 則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。 順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑 r,計算s = 3.*r*r,輸出圓的面積s。 不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。 (2) 分支結構順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。 對于要先做判斷再選擇的問題就要使用分支結構。 分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。 分支結構的程序設計方法的關鍵在于構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。 分支結構適合于帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然后根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易于理解。 程序流程圖是根據解題分析所繪制的程序執行流程圖。 學習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執行的功能,嵌套結構也就不難了。 嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。 下面我介紹幾種基本的分支結構。 ①if(條件){分支體}這種分支結構中的分支體可以是一條語句,此時“”可以省略,也可以是多條語句即復合語句。 它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過分支體,這時分支體就不會執行。 如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程序段為:if(x<0) x=-x;②if(條件)else這是典型的分支結構,如果條件成立,執行分支1,否則執行分支2,分支1和分支2都可以是1條或若干條語句構成。 如:求ax^2+bx+c=0的根分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac<0)有兩個共軛復根。 其程序段如下:d=b*b-4*a*c;if(d>=0){x1=(-b+sqrt(d))/2a;x2=(-b-sqrt(d))/2a;printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);}else{r=-b/(2*a);i =sqrt(-d)/(2*a);printf(“x1=%8.4f+%8.4fi\n”r, i);printf(“x2=%8.4f-%8.4fi\n”r,i)}③嵌套分支語句:其語句格式為:if(條件1) ;else if(條件2) else if(條件3) ……else if(條件n) else 嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套后,語句結構變得非常復雜,對于程序的閱讀和理解都極為不便,建議嵌套在3重以內,超過3重可以用下面的語句。 ④switch開關語句:該語句也是多分支選擇語句,到底執行哪一塊,取決于開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if… else 語句,它的所有分支都是并列的,程序執行時,由第一分支開始查找,如果相匹配,執行其后的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。 這個語句在應用時要特別注意開關條件的合理設置以及break語句的合理應用。 (3)循環結構:循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即 goto循環、while循環、do –while循環和for循環。 四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤,在學習中我們主要學習while、do…while、for三種循環。 常用的三種循環結構學習的重點在于弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環的格式和執行順序,將每種循環的流程圖理解透徹后就會明白如何替換使用,如把while循環的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。 特別要注意在循環體內應包含趨于結束的語句(即循環變量值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。 在學完這三個循環后,應明確它們的異同點:用while和do…while循環時,循環變量的初始化的操作應在循環體之前,而for循環一般在語句1中進行的;while 循環和for循環都是先判斷表達式,后執行循環體,而do…while循環是先執行循環體后判斷表達式,也就是說do…while的循環體最少被執行一次,而while 循環和for就可能一次都不執行。 另外還要注意的是這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與 if構成的循環,是不能用break和 continue語句進行控制的。 順序結構、分支結構和循環結構并不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,我們均可廣義的把它們看成一個語句。 在實際編程過程中常將這三種結構相互結合以實現各種算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。 (4)模塊化程序結構C語言的模塊化程序結構用函數來實現,即將復雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然后通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。 因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,并通過上機調試加以鞏固。 三.掌握一些簡單的算法編程其實一大部分工作就是分析問題,找到解決問題的方法,再以相應的編程語言寫出代碼。 這就要求掌握算法,根據我們的《C程序設計》教學大綱中,只要求我們掌握一些簡單的算法,在掌握這些基本算法后,要完成對問題的分析就容易了。 如兩個數的交換、三個數的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些算法的內在含義結語:當我們把握好上述幾方面后,只要同學們能克服畏難、厭學、上課能專心聽講,做好練習與上機調試,其實C語言并不難學C源程序的關鍵字---------------------------------------------------------------------------------------所謂關鍵字就是已被C語言本身使用, 不能作其它用途使用的字。 例如關鍵字不能用作變量名、函數名等由ANSI標準定義的C語言關鍵字共32個 :auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static根據關鍵字的作用,可分其為數據類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其它關鍵字四類。 1 數據類型關鍵字(12個):(1) char :聲明字符型變量或函數(2) double :聲明雙精度變量或函數(3) enum :聲明枚舉類型(4) float:聲明浮點型變量或函數(5) int: 聲明整型變量或函數(6) long :聲明長整型變量或函數(7) short :聲明短整型變量或函數(8) signed:聲明有符號類型變量或函數(9) struct:聲明結構體變量或函數(10) union:聲明聯合數據類型(11) unsigned:聲明無符號類型變量或函數(12) void :聲明函數無返回值或無參數,聲明無類型指針(基本上就這三個作用)(2)控制語句關鍵字(12個):A循環語句(1) for:一種循環語句(可意會不可言傳)(2) do :循環語句的循環體(3) while :循環語句的循環條件(4) break:跳出當前循環(5) continue:結束當前循環,開始下一輪循環B條件語句(1)if: 條件語句(2)else :條件語句否定分支(與 if 連用)(3)goto:無條件跳轉語句C開關語句(1)switch :用于開關語句(2)case:開關語句分支(3)default:開關語句中的“其他”分支Dreturn :子程序返回語句(可以帶參數,也看不帶參數)3 存儲類型關鍵字(4個)(1)auto :聲明自動變量 一般不使用(2)extern:聲明變量是在其他文件正聲明(也可以看做是引用變量)(3)register:聲明積存器變量(4)static :聲明靜態變量4 其它關鍵字(4個):(1)const :聲明只讀變量(2)sizeof:計算數據類型長度(3)typedef:用以給數據類型取別名(當然還有其他作用(4)volatile:說明變量在程序執行中可被隱含地改變

關于electron-builder打包遇到的一點點問題

Electron打包一開始時出現error,去解決真的好累,報錯一個接一個,而且我這和網上一些bug解決方案還有點不同,不能照抄別人的作業。

本次我使用的electron打包工具是electron-builder(以后就換其他的試試)

當然也是我學藝不精了?

打包正常流程

在說自己錯誤經歷之前,先走一遍可以正確打包的流程吧

為了讓流程看起來干凈些,創建一個獨立的electron項目

使用yarninit命令創建項目,注意需要寫明author作者和description描述,后續打包時如果沒有會出現報錯

使用yarnaddelectron-D和yarnaddelectron-builder命令安裝需要的程序包。安裝完程序包后,在中添加運行命令和打包命令

scripts:{start:electron.,electron:build:electron-builder--win--x64},

如果yarnaddelectron-D出錯,可以看看是不是和我這篇文章中的錯誤相似:《yarnaddelectron安裝失敗》?

的對比

我在之前使用vue和vuecli4創建了一款簡易的小說閱讀器,現在將其使用yarnbuild命令打包出來,生成了一份dist

里面的頁面可以直接在瀏覽器中打開,就能夠直接看到效果。不過現在先將此文件夾改個名字在放入electron項目中,不然的話等等會和打包出來文件夾名字重復

在同級目錄下創建一個入口文件,該文件是electron所必須的程序進入文件

可以像下面這樣寫,這是一種較為簡單的入口文件寫法:

constelectron=require(electron);//控制應用生命周期的模塊。const{app}=electron;//創建原生瀏覽器窗口的模塊。const{BrowserWindow}=electron;letmainWindow;functioncreateWindow(){//創建瀏覽器窗口。mainWindow=newBrowserWindow({width:480,height:670});//加載應用的。(`file://${__dirname}/common/`);//啟用開發工具//();}//Electron會在初始化后并準備(ready,createWindow);//當全部窗口關閉時退出。(window-all-closed,()=>{//否則絕大部分應用及其菜單欄會保持激活。if(!==darwin){();}});(activate,()=>{//絕大部分應用會重新創建一個窗口。if(mainWindow===null){createWindow();}});

現在就可以嘗試使用yarnstart命令運行electron了,如果不出意外的話,會成功跳出小說閱讀器界面

此時小說閱讀器并沒有打包

接下來,使用yarnelectron:build命令進行打包,一路順利,沒有報錯,就能看到生成了一個dist文件夾

PS:在編寫build去對打包進行配置,我一開始以為這是必須的,后來發現即使不寫,基礎打包也可以成功。

在此文件夾中,如果使用打開文件,那么將會進行安裝程序,并且桌面會出現程序圖標,點擊即可打開項目。 此時已經是標準的桌面應用的了。

當然如果不想安裝,只是想看看打包后的結果,可以打開內部的win-unpacked/,這樣能跳過安裝直接啟動程序。

到目前為止,一個正確無誤的打包流程就走完了!

項目打包遇到各種問題

那么接下來,就說說我真正的錯誤之路吧:

省略一些中間的步驟,直到上面所說的第四步為止,我一切都還是順利的。

那么問題就出在第五步上,yarnelectron:build

問題1

運行此命令時,一開始還是挺順利的,但是很快遇到了第一個問題:

?Get當遇到打包報錯,肯定是哪里不會搜哪里了,發現原因還是和連接有關,根據網上找到的參考文章,可以通過先將下載下來,然后放到C:\Users\Administrator\AppData\Local\electron\Cache文件夾下。

參考文章:

同時分享一下下載包地址:

但是很尷尬的是,我Local下這并沒有electron文件夾。那么能否自己創建一個然后放入呢?

答案:不行,自己創建了一個electron也沒有用,后來想是不是因為我沒有全局安裝electron,可以把這放入項目的node_modules里,不過還是失敗了,只能另辟蹊徑,在中進行配置。(后面的nsis和winCodeSign也同樣如此)

其實這可能和這臺電腦一開始的配置有關系,因為后來我使用自己筆記本,發現Local下是存在electron和electron-builder兩個文件夾的。

在下載文件到本地失敗后,我采用在中進行設置electron_mirror路徑的方式。

的打開路徑在C:\Users\用戶文件夾下,同時也可以使用cmd命令直接打開此文件:npmconfigedit

然后通過添加一句話:electron_mirror=這樣包就能夠成功安裝了

問題2

成功解決了的問題之后,我又遇到了新的問題:

?Get這兩種同樣也是在中進行配置的,添加的是electron-builder-binaries_mirror的路徑:

electron-builder-binaries_mirror=其實一開始我添加的是路徑,但是發現會出現報錯,沒有這個地址,然后經過實際下載才發現nsis-3.0.4.1.7z的地址是,所以對electron-builder-binaries_mirror進行了重新設置,然后成功了

現在讓我重新進行打包,發現到此,沒有出現任何報錯,并且打包成功了

我遇到的問題終于解決了,和網上找到的直接下載包到本地方式不同,解決方案是修改了下載源。最后我發現成功一次之后,把中的修改下載源注釋掉后續打包也可以成功了?

總結

這個打包問題當時改的我心累,因為我下載到本地也還是不成功,最后修修改改,通過修改成功。 期間甚至想放棄electron-builder這種方式打包,中間我去用了一下ElectronForge。 發現這個居然輸入命令要在gitbash里,并且會對你的重寫,這還是算了。

現在electron打包應該還有一種electron-package的方式,不過我沒有去嘗試,可能也是當時對builder已經上頭了,一心要解決掉這個報錯。

遇到報錯,努力一把,總會攻克的。(當然這個問題困了你一天以上,建議找找其他替代方案)

原文:

CMAKE_RC_COMPILER 是什么東西

cmake vs qmakeqmake 是為 Qt 量身打造的,使用起來非常方便cmake 使用上不如qmake簡單直接,但復雜換來的是強大的功能內置的 out-of source 構建。 (目前QtCreator為qmake也默認啟用了該功能,稱:shadow build)為各種平臺和場景提供條件編譯可處理多個可執行文件情況,和很好配合 QtTest 工作如何選擇?Using CMake to Build Qt Projects 一文中說:對簡單的Qt工程,采用 qmake對復雜度超過 qmake 處理能力的,采用 cmake盡管如此,如果簡單Qt的工程都不知道怎么用 cmake 構建,復雜的工程,就更不知道如何使用 cmake 了。 還是從簡單的學起吧簡單的 Qt 程序#include CoreApplication>#include int main(int argc, char** argv){QCoreApplication app(argc, argv);qDebug()< -O coff -i -o )endif(MINGW)SET(example_SRCS res/)SET(example_MOC_SRCS mainwindow.h widget.h)QT4_WRAP_CPP(example_MOCS ${example_MOC_SRCS})QT4_ADD_RESOURCES(example_RCC_SRCS )SET(example_SRCS ${example_SRCS} ${example_MOCS} ${example_RCC_SRCS})ADD_EXECUTABLE(example WIN32 ${example_SRCS})TARGET_LINK_LIBRARIES(example ${QT_LIBRARIES})對Qt的資源文件,使用 QT4_ADD_RESOURCES 來調用rcc進行預處理對 Windows 資源文件,直接和源文件一樣,添加到列表中即可。 只是:MinGW 下僅僅這么做還不行,上面的 MinGW 塊用來修復這個問題Debug 與 Releaseqmake使用 qmake 時,可以在 pro 文件內分別為兩種模式設置不同的選項。 使用時,可以直接 make release 或 make debug 來編譯不同的版本cmake不同于 qmake,由于 cmake 采用 out-of-source 方式。 故:建立debug release兩目錄,分別在其中執行cmake -DCMAKE_BUILD_TYPE=Debug(或Release)需要編譯不同版本時進入不同目錄執行make對生成 msvc 工程的情況, CMAKE_BUILD_TYPE 不起作用。 生成工程后使用IDE自帶的模式選擇。

如何看MFC程序代碼

.NET

如何看MFC 程序代碼 看下面內容之前,建議你學學《深入淺出MFC》,這本書強烈推薦! 現在只是做個了解。 不妨做個知識備份! 在MFC 程序中,我們并不經常直接調用Windows API,而是從MFC 類創建對象并調用屬于這些對象的成員函數.也就是說MFC 封裝了Windows API 你說你喜歡C++而MFC 換一種說法就是一個用C++寫的一個函數庫然后你來調用只不過這個類不是你寫的MFC 提供數百個類,最重要的、也是編寫任何VC++應用程序都必不可少的兩個類CWinApp 和CFrameWnd,這兩個類是編寫復雜龐大應用程序的基石。 1 封裝特性:構成MFC 框架的是MFC 類庫而MFC 類庫又是C++的一個類庫。 這些類封裝WIN32 應用程序編程接口,OLE(Object Link Embed 對象鏈接嵌入) 特性,ODBC 和DAO 數據訪問的功能。 2 繼承特性:MFC 抽象出了眾多類的共同特性,并設計出一些基類作為實現其他類的基礎,這些類中最重要的類是 CObject 類和CCmdTarget 類,程序員可以從適當的MFC 類中派生出自己的類,實現特定的功能達到編程的目的。 3 虛擬和消息映射:MFC 是以C++為基礎,當然支持虛函數,但作為一個編程框架必須要解決的是效率問題:如果MFC 僅僅通過虛函數來支持動態約束必然會產生大量的虛函數表這樣編程框架過于臃腫而且消耗更多的內存。 但是MFC 建立了消息映射機制這樣降低了內存的使用卻大大提高了效率消息映射是一個將消息和成員函數相互關聯的表,當應用程序的框架窗口接收到一個消息時,MFC 將搜索該窗口的消息映射,如果存在一個處理消息的處理程序,那么就調用該處理程序.它通過宏來實現消息到成員函數的映射,而且這些函數不必是虛擬的成員函數,這樣不需要為消息映射函數生成一個很大的虛擬函數表(V 表),節省內存。 MFC 消息映射機制:將消息與消息處理函數聯系起來,形成一一對應的機制。 消息映射宏聲明:DECLARE_MESSAGE_MAP 定義:BEGIN_MESSAGE_MAP ON_COMMAND ON_CONTROL ON_MESSAGE END_MESSAGE_MAP MFC 主要組成部分:類、宏和全局函數。 類是MFC 中最主要的內容。 MFC 類是以層次結構方式組織起來的。 MFC 中的類分成兩部分,除了一些輔助類,大多數的MFC 類是直接或間接從根類CObject 派生而來。 MFC 宏主要功能:消息映射、運行時對象類型服務、診斷服務、異常處理。 MFC 約定:全局函數以Afx為前綴,全局變量以afx為前綴MFC 類的層次關系CObject 項目類)-CCmdTarget(消息響應類)-{CWinThread(線程類)-CWinApp(Window 應用程序類)CDocument(文檔類)CWnd(窗體類)-[CFrameWnd(框架類)CView(視圖類)]}CObject 類由于MFC 中大部分類是從CObject 類繼承而來的,CObject 類描述了幾乎所有的MFC 類的一些公共特性,CObject 類為程序員提供了對象診斷、運行時類型識別和序列化等功能。 CCmdTarget 類由CObject 類直接派生而來,它負責將消息發送到能夠響應這些消息的對象。 它是所有能進行消息映射的MFC 類的基類。 CWinApp 類在任何MFC 應用程序中有且僅有一個CWinApp 派生類的對象,它代表了程序中運行的主線程,也代表了應用程序本身。 CWinApp 類取代了WinMain()主函數在SDK 應用程序中的地位。 傳統SDK 應用程序 WinMain()函數完成的工作。 現在由類CWinApp 的InitApplication(), InitInstance()和Run()三個成員函數承擔。 CWnd 類由CCmdTarget 類直接派生而來,該類及其派生類的實例是一個窗口。 CWnd 類代表了MFC 中最基本的GUI 對象,它是一個功能最完善、成員函數最多的MFC 類。 CFrameWnd 類是CWnd 類的派生類,主要用來掌管一個窗口,它取代了SDK 應用程序中窗口函數 WndProc()的地位。 CFrameWnd 類的對象是一個框架窗口,包括邊框、標題欄、菜單、最大化按鈕、最小化按鈕和一個激活的視圖。 CDocument 類在應用程序中作為用戶文檔類的基類,它代表了用戶存儲或打開的一個文件。 CView 類是 MFC 中一個很基本的類,它作為其它MFC 視圖類和用戶視圖派生類的基類。 從 API 編程到MFC 編程的過渡:WinMain(){初始化WNDCLASS 注冊窗體結構創建窗口-應用程序類CWinApp 顯示窗口消息循環}WndProc(){switch(…){case:…}- 框架窗口類CFrameWnd}MFC Object 和Windows Object 的對應關系:描述 Windows 句柄MFC Object 窗口HWND CWnd 設備上下文HDC CDC 菜單HMENU CMenu 筆HPEN CPen 刷子HBRUSH CBrush 字體HFONT CFont 位圖HBITMAP CBitmap 套接字SOCKET CSocket 三、手工創建一個MFC 應用程序:注意:創建 MFC 程序,要創建一個Win32 空項目,并要選擇項目屬性中的在共享DLL 文件中使用MFC,然后新建我們的文件例子:在hello.h頭文件中添寫如下代碼: class CMyApp:public CWinApp{public:virtual BOOL InitInstance();// 虛函數};class CMainWindow:public CFrameWnd{public:CMainWindow(); protected:afx_msg void OnPaint();DECLARE_MESSAGE_MAP();//聲明消息映射};在源文件中添寫如下代碼:#include afxwin.h# myApp;BOOL CMyApp: InitInstance(){m_pMainWnd=new CMainWindow;m_pMainWnd- ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow();return TRUE;}BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)ON_WM_PAINT()END_MESSA GE_MAP()//消息映射CMainWindow:CMainWindow()//構造函數初始化 {Create(NULL,我的第一個MFC 應用程序);//創建窗體}void CMainWindow: OnPaint(){CPaintDC dc(this);CRect rect;GetClientRect(&rect); (Hello MFC,- 1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);}CWinApp 是應用程序類,在MFC 應用程序中必須從這個類派生出一個類,該派生類是MFC 應用程序的入口必須定義這個派生類的對象,并且只能有一個這個對象代表整個應用程序。 成員函數:InitInstance()功能:初始化應用程序實例和窗口實例,虛函數 CWinApp:InitInstance 必須在派生類中重寫。 在InitInstance 函數中,編寫初始化代碼,如:創建一個窗口顯示一個窗口CFrameWnd 類作用:為應用程序提供一個窗口,同時實現消息處理功能。 成員函數:Create()功能:創建窗體, 將之賦于CFrameWnd 對象上。 BOOL Create(窗口類型,窗口標題,顯示風格,顯示區域,符窗口句柄,菜單,擴展顯示風格,上下文對象)共有8 個參數,前兩個必須給出,后6 個可以默認。 MFC 應用程序的核心就是基于CWinApp 類的應用程序對象,CWinApp 提供了消息循環來檢索消息并將消息調度給應用程序的窗口.我們在編寫MFC 應用程序時,要包含afxwin.h,一個MFC 應用程序可以有且僅有一個應用程序對象,對象必須聲明為在全局范圍內有效(也就是全局對象), 以便它在程序開始時即在內存中被實例化我們的Hello MFC 的應用程序類被命名為CMyApp,它在 中用如下語句進行了實例化:CMyApp myApp; CMyApp 的類聲明在hello.h 中代碼如下:class CMyApp:public CWinApp{public:virtual BOOL InitInstance();};CMyApp 沒有聲明任何的數據成員,只是重寫了一個從CWinApp 類中繼承來的函數,在應用程序的生存期內InitInstance 的調用比較早,是在應用程序開始運行以后而窗口創建之前,除非InitIstance 創建一個窗口,否則應用程序是不會有窗口,這正是為什么即使最小的MFC 應用程序也必須從CWinApp 派生出一個類并重寫CWinApp: InitIstance 的原因InitInstance 函數:CWinApp:InitInstance 是一個虛函數,其默認操作僅包含一條語句:return TRUE;InitInstance 是用來執行程序每次開始時都需要進行的初始化工作最好的地方在 中,CMyApp 的 InitInstance 通過實例化hello 的CMainWindow 類來創建hello 窗口,語句: m_pMainWnd=new CMainWindow;構造了一個CMainWindow 對象指針,并將其地址復制到了應用程序對象的m_pMainWnd 數據成員中,窗口創建以后,InitInstance 就會通過CMainWindow 指針調用ShowWindow 和UpdateWindow 函數顯示它: m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow(); ShowWindow 和UpdateWindow 是所有窗口對象共用的CWnd 成員函數其中包括 CFrameWnd 類的對象,CMainWindow 就是從CFrameWnd 派生出來的.要從MFC 程序調用一個常規的Windows API 函數,需要在函數名稱前添加一個全局運算符:例如::UpdateWindow();通過生成窗口對象并調用其Create 函數,MFC 應用程序可以創建一個窗口,在CMyApp:InitInstance 中,hello 創建了一個 CMainWindow 對象,CMainWindow 的構造函數生成在屏幕上看到的窗口: Create(NULL,我的第一個MFC 應用程序);CPaintDC dc(this);MFC 的 CPaintDC 類是從MFC 的CDC 類派生的,CDC 類封裝了Windows 設備環境,以及包含了繪制到屏幕、打印機和其他設備的幾十個成員函數在MFC 中如何處理消息呢?在SDK 中我們利用的是消息循環和窗口過程函數對消息進行消息處理.在 MFC 中我們用的是消息映射機制.下面是將消息映射添加到一個類中需要做的全部工作.1 通過將DECLARE_MESSAGE_MAP 語句添加到類聲明中,聲明消息映射.2 通過放置標識消息的宏來執行消息映射,相應的類將在對BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 的調用之間處理消息3 添加成員函數來處理消息1、構造 CWinApp 派生類的對象2、系統調用WinMain()3、WinMain 調用InitInstance, 在該函數中創建CFrameWnd 派生類對象,調用Create 函數創建窗口、調用 ShowWindow 函數顯示窗口。 4、之后內部機制調用Run,接受用戶的消息,并將消息導向默認的處理函數。 當接收到WM_QUIT 消息時,Run 內部調用 ExitInstance,退出程序。 MFC 采用消息映射(Message Map)機制取代C/C++語言中的switch-case 結構來處理消息。 消息映射:在MFC 中把消息處理函數和它所要處理的特定的消息連接起來的一種機制。 它通過宏來實現消息到成員函數的映射,而且這些函數不必是虛擬的成員函數,這樣不需要為消息映射函數生成一個很大的虛擬函數表(V 表),節省內存。 MFC 消息映射機制包括一組消息映射宏。 一條消息映射宏把一個Windows 消息和其消息處理函數聯結起來。 MFC 應用程序框架提供了消息映射功能。 在類的實現源文件中用 BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()宏來定義消息映射。 在類定義的結尾用DECLARE_MESSAGE_MAP()宏來聲明使用消息映射。



相關標簽: .NETmainwindow是什么程序、 、 mainwin32的對比、 優缺點分析

上一篇:面向性能的mainwin32編程提升應用程序速度

下一篇:mainwin32實戰教程構建健壯的Windows應用程

內容聲明:

1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://m.sycxjdsbhs.com/article/e2c3fd0d53f95db33039.html,復制請保留版權鏈接!


溫馨小提示:在您的網站做上本站友情鏈接,訪問一次即可自動收錄并自動排在本站第一位!

Copyright ? 2025 聚集網 All Rights Reserved
此內容系本站根據來路自動抓取的結果,不代表本站贊成被顯示網站的內容或立場。
本頁閱讀量次 | 本站總訪問次 | 本站總訪客人 | 今日總訪問次 | 今日總訪客人 | 昨日總訪問次 | 昨日總訪客人 |
技術支持:聚集網

国产精品成人免费视频_91丝袜美腿美女视频网站_国产一区二区三区在线看_亚洲欧美另类中文字幕_在线电影av不卡网址_国产视频丨精品|在线观看_日韩一区二区三区国产_国产欧美va欧美va香蕉在线_热re91久久精品国99热蜜臀_亚洲第一精品电影_久久九九亚洲综合_国产成人综合精品_97视频在线观看网址_精品视频久久久久久_日韩av片免费在线观看_久久精品国产99国产精品澳门
操91在线视频| 91久久久国产精品| 久久亚洲欧美日韩精品专区| 亚洲欧美精品在线| 精品伊人久久97| 日韩经典第一页| 成人高清视频观看www| 日韩在线免费视频| 亚洲黄一区二区| 国产精品狼人色视频一区| 亚洲最大福利网站| 91国产精品电影| 国产亚洲欧美aaaa| 欧美另类精品xxxx孕妇| 久久91亚洲精品中文字幕| 97视频免费在线看| 国产精品日韩在线播放| 日韩精品中文字幕久久臀| 国产精品美女免费看| 97视频在线观看免费高清完整版在线观看| 亚洲性av在线| 成人免费午夜电影| 精品久久久久人成| 欧美激情国产精品| 尤物九九久久国产精品的特点| 岛国视频午夜一区免费在线观看| 亚洲免费高清视频| 亚洲福利在线看| 欧洲一区二区视频| 欧美高清在线播放| 成人h片在线播放免费网站| 夜夜狂射影院欧美极品| 国产国语videosex另类| 国产精品久久久久久久久影视| 91在线观看欧美日韩| 欧美在线性爱视频| 97视频在线观看免费高清完整版在线观看| 国产成人91久久精品| 色偷偷偷亚洲综合网另类| 欧亚精品中文字幕| 免费不卡欧美自拍视频| 精品亚洲一区二区三区在线播放| 国产精品一区二区久久精品| 91久久久久久久久久| 久久精品国产久精国产思思| 精品免费在线观看| 亚洲女人天堂网| 欧美超级免费视 在线| 91久久精品美女高潮| 91久久久久久久久久久| 国产精品日韩在线一区| 久久夜色精品国产亚洲aⅴ| 亚洲国语精品自产拍在线观看| 亚洲精品欧美一区二区三区| 日韩国产精品视频| 欧美黑人一级爽快片淫片高清| 一本久久综合亚洲鲁鲁| 在线观看欧美视频| 国产99视频精品免视看7| 成人精品在线视频| 日本a级片电影一区二区| 国产精品视频自在线| 亚洲日韩中文字幕在线播放| 国产精品综合网站| 狠狠综合久久av一区二区小说| 中文字幕欧美日韩在线| 欧美一级大胆视频| 精品久久国产精品| 亚洲欧美一区二区三区在线| 亚洲一区二区黄| 亚洲精品欧美日韩专区| 高清日韩电视剧大全免费播放在线观看| 成人午夜高潮视频| 夜夜躁日日躁狠狠久久88av| 国产美女精品免费电影| 国产免费观看久久黄| 2020国产精品视频| 亚洲欧美色图片| 国产欧美精品在线| 日韩精品在线免费观看| 国产成人精品国内自产拍免费看| 国产欧美精品va在线观看| 综合久久五月天| 国自在线精品视频| 日本亚洲精品在线观看| 亚洲精品久久久久久下一站| 国产精品久久国产精品99gif| 久久网福利资源网站| 国内成人精品一区| 欧美激情综合色综合啪啪五月| www.日韩不卡电影av| 国产精品国产自产拍高清av水多| 国产精品入口日韩视频大尺度| 91高清在线免费观看| 欧美在线视频观看免费网站| 亚洲三级免费看| 国产成人啪精品视频免费网| 日韩美女av在线免费观看| www国产亚洲精品久久网站| 亚洲精品一区二区三区婷婷月| 国产亚洲欧洲在线| 福利一区福利二区微拍刺激| 日韩在线中文字幕| 激情懂色av一区av二区av| 韩剧1988免费观看全集| 亚洲美腿欧美激情另类| 青青在线视频一区二区三区| 热99精品只有里视频精品| 久久91亚洲精品中文字幕奶水| 亚洲少妇中文在线| 中文字幕亚洲综合久久| 欧美麻豆久久久久久中文| 亚洲国内精品在线| 欧美亚洲视频一区二区| 中文字幕免费精品一区| 欧美激情一级欧美精品| 亚洲国产一区二区三区在线观看| 亚洲国产毛片完整版| 日韩av最新在线| 日韩国产激情在线| 国产精品91久久| 欧美成人精品一区二区三区| 欧美精品videosex牲欧美| 国产精品入口福利| 1769国产精品| 黄色一区二区在线观看| 国产剧情久久久久久| 亚洲一区二区三区xxx视频| 自拍偷拍免费精品| 亚洲精品www久久久| 欧美性猛交xxxx| 亚洲已满18点击进入在线看片| 成人黄色激情网| 欧美性理论片在线观看片免费| 亚洲美女av网站| 国产精品第七十二页| 精品久久久av| 国产视频精品一区二区三区| 亚洲视屏在线播放| x99av成人免费| 日韩av中文在线| 北条麻妃一区二区在线观看| 中文字幕久久亚洲| 国产欧美精品久久久| 91精品国产色综合久久不卡98| 欧美视频在线观看免费网址| 日韩国产高清污视频在线观看| 国产午夜精品麻豆| 亚洲在线视频观看| 亚洲人高潮女人毛茸茸| 久久中文久久字幕| 精品国内自产拍在线观看| 国产精品va在线播放| 日韩中文字幕视频在线观看| 亚洲在线第一页| 久久男人资源视频| 色妞一区二区三区| 欧美国产精品va在线观看| 亚洲人成网7777777国产| 亚洲第一中文字幕| 亚洲肉体裸体xxxx137| 91精品国产网站| 国产成人精品一区二区三区| 欧美激情va永久在线播放|