影音先锋男人资源av站_狠狠色综合激情丁香五月_爱爱爱爱看视频_在线播放免费人成视频在线观看_少妇人妻综合久久中文字幕_国产午夜无码精品免费看_久久久久久夜精品精品免费啦_男人女人午夜视频免费_日本xxxx裸体xxxx_丰满人妻熟妇乱又仑精品

電子科大論壇-非清水河畔

 找回密碼
 注冊(開放注冊)
查看: 12735|回復(fù): 12
打印 上一主題 下一主題

[軟件] win32api編程初級一

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2006-11-10 20:42:41 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
呵呵 好不容易明天不加班,今天有點(diǎn)閑,給大伙寫點(diǎn)東西
講講win32吧
首先回顧以前我們眼中的c/c++的程序結(jié)構(gòu)。
main();,很簡單,大家知道標(biāo)準(zhǔn)的c/c++函數(shù)怎么寫嗎?如下:
int main(int num,char**para)
{
      //todo something ;
      return 0;
}
標(biāo)準(zhǔn)線程的寫法就上面所述,先不講參數(shù)意義,我們將這個函數(shù)怎么運(yùn)行。首先編譯,然后生成exe文件,tuboC有這個功能,vc6.0以上,可以直接實(shí)現(xiàn)編譯生成以及運(yùn)行。然后再dos狀態(tài)下運(yùn)行exe文件,同時附參數(shù)。下面講講參數(shù)意義。第一個參數(shù),是你所附參數(shù)的個數(shù),第二個是一個二維數(shù)組,不要被2個*號嚇倒,就說是2級指針,太復(fù)雜。用法如下para[][];不是*para或para[]
好了標(biāo)準(zhǔn)的函數(shù)講完,下面講講程序的運(yùn)行機(jī)理:
首先大家考慮個問題main是否可以調(diào)用main函數(shù)?
大家多知道程序運(yùn)行的時候多是從main函數(shù)開始的,我們怎樣開發(fā)一個軟件呢,而不是再做1+1=2之類小程序
下面列舉一個例子
我們先建立一個程序,命名為run
程序如下
int mian()
{
      int a =0;
      a = 3;
      return (a%2 == 0)?1:0);
}
生成exe文件后文件為run.exe文件。這是run就是個簡單的線程,一個軟件就是有這些具有不同功能的線程構(gòu)成:
//主線程(qq.exe)
int main()
{
    //啟動初始化程序
     //啟動業(yè)務(wù)管理線程
    //啟動業(yè)務(wù)關(guān)閉程序
}
啟動初始化程序
int main()
{
    //在這里我們做程序運(yùn)行后需要那些資源的申請
}
啟動業(yè)務(wù)管理線程
int main()
{
    //啟動窗體繪制程序
    //啟動事件管理管理程序
    //。。。。。
}
//啟動業(yè)務(wù)關(guān)閉程序
int mian()
{
   //程序結(jié)束后,我們要對一些資源進(jìn)行釋放
}
當(dāng)然一個軟件不可能有上面那么簡單。但是大致原理就是這樣
然后談?wù)劸程概念
一個線程就是個無休止的循環(huán)(不要拿書本上的理論來和我較真)
那么線程是怎么結(jié)束的呢?當(dāng)然不可能是不受管理的死循環(huán)。循環(huán)之所以能夠成立,就是因?yàn)闂l件滿足,如果破壞條件那么它將停止
上面寫的有點(diǎn)讓人害怕,便軟件沒有這么復(fù)雜,如果不是必要我們很少這樣來寫軟件,微軟已經(jīng)將他們集成化,就是我們所說的win32
今天不打算具體講win32,首先讓大家對win32有個整體認(rèn)識。
在這里我們經(jīng)常見到一些陌生的“關(guān)鍵字”,比如hwnd,handle,hresult等,在這里建議大家,“忘記”以前c/c++中的什么int char等關(guān)鍵字的概念,就把win32當(dāng)成一門新的語言來說,不要對這些關(guān)鍵感到畏懼
他們的本質(zhì)其實(shí)就是,int ,long 等。但是千萬別把他們當(dāng)這些關(guān)鍵字來對待。
      然后就是說說編碼方式,至于什么變量函數(shù)該怎么寫,我不想多說,什么叫匈牙利編碼方式,自己查資料,書上多有。
     最后希望大家寫代碼的時候能夠?qū)懽⑨專呐率且粋變量,也給我寫上注釋。好了今天就寫這么多,沒準(zhǔn)備好。
下次我給大家講如何實(shí)現(xiàn)簡單的窗體繪制,一個代碼祥解。

最后我想申明以上以及以后本人寫的文張多是本人多年的勞動成果所得的“經(jīng)驗(yàn)之談”,所以希望大家在未經(jīng)本人的同意下,不要別的地方轉(zhuǎn)載我寫的文章 ok

評分

1

查看全部評分

2#
發(fā)表于 2006-11-11 12:30:35 | 只看該作者
頂,正在學(xué)MFC,兄弟VC++牛嗎?正好教下小弟
3#
 樓主| 發(fā)表于 2006-11-11 17:46:54 | 只看該作者
mfc很簡單,如果你能把vc環(huán)境用好,就沒什么困難可言。
建議用vc8.0
4#
發(fā)表于 2006-11-19 21:51:28 | 只看該作者
支持,但需要注意錯別字,另外你的一些說法有待商榷。比如:
1 mfc很簡單,如果你能把vc環(huán)境用好,就沒什么困難可言。
---
我的看法:環(huán)境只是工具,難點(diǎn)在語言本身,更進(jìn)一步的說,在C++本身、在MFC本身。
2 最后希望大家寫代碼的時候能夠?qū)懽⑨專呐率且粋變量,也給我寫上注釋。
---
我的看法:寫注釋要適可而止,不需要每個變量都要注釋。對變量而言,注意利用匈牙利表示法會更好。
3 你的這個run程序想要說明什么問題,我沒太看明白,從代碼聯(lián)編的角度來說,是不可以有多個main方法的,當(dāng)然也許我理解錯你的意思了。對于多線程程序而言,一般都是有一個主線程,然后通過主線程來創(chuàng)建和釋放其他線程的。你如果寫這么多的main函數(shù),會給初學(xué)者帶來一定的誤導(dǎo)性。

沒別的意思,只是交流,希望能看到你更好更多的技術(shù)文章。支持!

[ 本帖最后由 ptnotree 于 2006-11-19 21:54 編輯 ]
5#
 樓主| 發(fā)表于 2006-11-20 18:46:25 | 只看該作者
呵呵 沒什么,至于第一點(diǎn)我想說的是語言其實(shí)真的不難,難得是你如何利用好環(huán)境,這一點(diǎn)我只能說等你工作后或許能體會到。
       我強(qiáng)調(diào)注釋的原因是,軟件開發(fā)是團(tuán)體工作,注釋質(zhì)量的好壞直接影響你的合作伙伴的工作效率。至于用用什么表達(dá)方式,每個團(tuán)體多有自己的一套命名方式,基本上是基于你所說的匈牙利命名方式,當(dāng)然沒必要每個變量多寫上注釋
       第三點(diǎn)你提得非常好,尤其是“對于多線程程序而言,一般都是有一個主線程,然后通過主線程來創(chuàng)建和釋放其他線程的。”這句。我想說的每個線程多是一個main函數(shù)組成。在主函數(shù)(當(dāng)然也是個main函數(shù))有專門的函數(shù)調(diào)用那些main函數(shù),這樣說也不太準(zhǔn)確,每個程序最終是一個.exe文件,我們不可能調(diào)用到main函數(shù)
但是我們可以通過編譯器把一個main程序編譯為一個可執(zhí)行文件。比如Draw.exe,我們在主程序里面調(diào)用的就是這個Draw而不是main,不知道這么解釋你是否能理解?
       最后還是想說mfc如何學(xué)習(xí)
一般學(xué)習(xí)mfc只要一個月就能入門(如果有win32基礎(chǔ)的話),學(xué)習(xí)mfc的時候大家最大的錯誤思想就是想把這些類庫和函數(shù)給背下來,這是不可能的。我們在做開發(fā)的時候多是利用msdn來查詢我們需要的東西,當(dāng)然剛開始根本就不知道用什么類?如何用這些類?
       所以建議先開始學(xué)習(xí)類庫,一天學(xué)一個就夠(時間肯定足夠),學(xué)習(xí)30個類庫就已經(jīng)足夠,剩下的可以現(xiàn)學(xué)現(xiàn)用。
       然后就是看了msdn中的類庫后,剩下的就是不知道該如何下手。怎么去用?
       我希望初學(xué)者能買本傻瓜書,照著書練習(xí),如何使用這些控件等,然后注意別買那些什么網(wǎng)絡(luò),黑客之類的名字聽起來大的書,沒用。我記得咱校圖書館就有這種傻瓜書,我上學(xué)的時候在圖書館看到多很多這樣的書。
6#
發(fā)表于 2006-11-21 00:05:11 | 只看該作者
嗯 我是97年讀大學(xué)的,寫軟件也都5-6年多了,應(yīng)該是你的學(xué)長喲,呵呵

加油!

另外,我的一些看法,望指正:
1 語言要比環(huán)境重要的多,這不僅僅是我個人的觀點(diǎn)。千萬不要變的離開環(huán)境就不會寫東西了,那才暈?zāi)兀?br /> 2 對于“多線程程序”而言,每個線程都是一個main函數(shù)組成,這句話是有問題的;建議去深入看一下多線程的相關(guān)知識。
3 比如Draw.exe,我們在主程序里面調(diào)用的就是這個Draw而不是main,
---
我的看法:我不知道你所謂的主程序是工程文件,還是由程序入口點(diǎn)【類似于c語言中的main函數(shù)】入口啟動;從MFC的主框架調(diào)用過程來看,最終仍然是回到了APPMODUL.CPP文件的_tWinMain函數(shù)。而這個所謂的_tWinMain只是一個宏,其代碼如下:#define _tWinMain   WinMain,這樣就回到了Win32開發(fā)過程中的說法了。如果你從VCL的角度來看,傳統(tǒng)delphi語言表面上看來是從工程文件啟動的,但最終仍然回到了一個代碼的入口函數(shù)部分,這一點(diǎn)你可以進(jìn)行斷點(diǎn)跟蹤。

我覺得,大家在學(xué)習(xí)MFC之前,應(yīng)該去學(xué)SDK開發(fā),尤其是它的第一個可以創(chuàng)建窗口以及消息傳遞機(jī)制的解釋和其中的其他代碼的解析要仔細(xì)分析,然后在進(jìn)入MFC的時候多跟基于SDK開發(fā)方式進(jìn)行聯(lián)系,那樣就容易理解多了。

純屬技術(shù)探討,希望更多的交流!
7#
發(fā)表于 2006-11-21 08:38:40 | 只看該作者
說得不錯,最近看了一些書都說要多研究下C++,現(xiàn)在在看<<深入淺出MFC>>,你們覺得怎么樣
8#
 樓主| 發(fā)表于 2006-11-22 20:55:20 | 只看該作者
呵呵 越說越有嚼頭,我不知道學(xué)長是否知道偽線程的概念。還有操作系統(tǒng)的操作原理,呵呵概念有點(diǎn)大,其實(shí)我研究的也不太深,只是講講我個人的觀點(diǎn)。
        不知道大家有沒有影像,當(dāng)我們按下ctrl+Alt+Del的時候,我們可以看見很有正在運(yùn)行的線程。他們實(shí)際上就是一個個main函數(shù),當(dāng)然也可以說是winmain函數(shù),尤其是學(xué)過win32的朋友對這種觀點(diǎn)尤其深刻。因?yàn)榇蠹矣胏或者是c++做軟件的時候接觸的更多的是win32,尤其是mfc,但是有幾個人是直接用c/c++編程的?
        我先寫個例子
        int main(int num,char**para)
        {
                 while(1)
                 {
                     wait(5);
                  if(para[0][0] == .....
                  {
                   }
                  else if(para[0][1]==.....
                  {
                   }
                   else if(para[0][1]==.....
                   {
                    }
                   else
                   {
                    }
                 }
         }

假定上面的工程文件為porc,那么編譯后就是proc.exe文件,
那么在主程序,也就是主線程里面我們通過專用的函數(shù)來啟動他
比方說
int hdProcessID = ShellExecute("../proc.exe","para");
我想分析上面的函數(shù)
ShellExecute是啟動可執(zhí)行文件的函數(shù),返回值是一個可以唯一標(biāo)志該線程的標(biāo)識符。
第二個參數(shù)就是上面main函數(shù)需要的參數(shù)
如果把上面的int 寫成HINSTANCE大家可能會更接受點(diǎn)。
有點(diǎn)操作系統(tǒng)基礎(chǔ)知識的人多知道,如果在主線程中我們建立個虛擬表,用來保存這些hdProcessID ,我們就可以很好地操控這些線程,所以一個系統(tǒng)的好壞其實(shí)就是這張表和查詢方式的好壞,不知道這么說師兄是否能理解我的意思
我想師兄考慮得多線程概念不會只是ThreadBegin之類的mfc函數(shù)或類吧,這些從理論上來講只是偽線程,只是我兩站的角度不一樣,你說的是win32而我說的是純c/c++當(dāng)然也利用了一些win32函數(shù),我感覺沒必要再用匯編或c去寫這些接口吧
最后就是勸上面那位小兄弟,至于什么候氏之類的書建議你不要去看,他們的水平太高,寫的書很讓人摸不著頭腦。
9#
發(fā)表于 2006-11-23 12:14:44 | 只看該作者
不是吧!!!!!
我看了他的書覺得還不錯呀,不懂的多看幾遍就差不多了
你覺得什么書好啊??介紹幾本看看,<<C++編程思想>>怎么樣???
10#
 樓主| 發(fā)表于 2006-11-23 19:02:41 | 只看該作者
我記得上學(xué)的時候?qū)W府書店有本大磚頭,叫什么vc6.0技術(shù)內(nèi)幕挺好 ,挺厚的,看這個比較好
至于侯氏的書我建議你不要看,本來初學(xué)者對mfc就很抽象,侯氏還把這本書寫的很抽象。打個比方來說,就好像你看中國人寫的操作系統(tǒng)書籍去研究操作系統(tǒng)一樣,只知道的“原理”卻不知道如何去做,如何去實(shí)現(xiàn)。
搞笑的是這本書還讓讀者自己去寫出(說白了就是背)那些類!!
感覺有點(diǎn)不可思議!!
11#
發(fā)表于 2006-11-23 19:39:18 | 只看該作者
對了,最近看源碼時有些不知道的類,就查MSDN,可是看了之后意思大概了解,
但還是不知道怎樣去用或什么時候該用呀,求教
12#
 樓主| 發(fā)表于 2006-11-23 20:00:16 | 只看該作者
你用v6建個mfc基于對話框的工程(基于這個工程的程序很簡單)
自己慢慢研究
而且在難點(diǎn)處,msdn里面有現(xiàn)成的工程文件,也就是程序案例,這就看你會不會用msdn了
還有阿 下次問的時候能不能說出是什么類。不用的類用法不一樣
我也不能憑空給你說出怎么用阿 是不是?
不過我建議你先學(xué)習(xí)對話框類(CDialog)
類的使用基本上基于以下幾點(diǎn)
1定義變量
比如
CDialog dlg;
dlg.DoModal();
dlg.SetWindowText("對話框");
。。。。。
給你個實(shí)例
比方說在一個按鈕的單擊時間里我們想彈出一個對話框
就可以用上面的例子
13#
發(fā)表于 2006-11-23 21:34:21 | 只看該作者
有道理,謝謝
我想問下:
TRY
{.....}
CATCH
{....}END_CATCH
應(yīng)該怎么用,或是在什么情況下用
還有,麻煩簡單說下CArchive這個類的作用和用法
謝謝
您需要登錄后才可以回帖 登錄 | 注冊(開放注冊)

本版積分規(guī)則

手機(jī)訪問本頁請
掃描左邊二維碼
本網(wǎng)站聲明
本網(wǎng)站所有內(nèi)容為網(wǎng)友上傳,若存在版權(quán)問題或是相關(guān)責(zé)任請聯(lián)系站長!
站長電話:0898-66661599    站長聯(lián)系QQ:12726567   
站長微信:hainanok
請掃描右邊二維碼
www.myujob.com

小黑屋|手機(jī)版|Archiver|電子科大論壇-非清水河畔 ( 瓊ICP備10001196號-2 )

GMT+8, 2025-11-6 06:08 , Processed in 0.170323 second(s), 18 queries .

Powered by 校園招聘信息

© 2001-2020 電子科大論壇-非清水河畔校園招聘

快速回復(fù) 返回頂部 返回列表