『壹』 win32編程 為什麼要注冊窗口類注冊窗口類究竟做了哪些工作
你想創建什麼樣的窗口呢?那麼,創建什麼樣的窗口呢?創建前,Window系統可不知道你要的是什麼類型的窗口啊(比如標題欄上顯示什麼圖標,滑鼠形狀是什麼,窗口背景顏色等等)。這些類型信息應在你創建前事先告訴Window系統。可以採用這種方法:就是我們事先寫一份要創建窗口的類型申請表,提交(注冊)給Window系統。然後在創建時,可以讓Windows按這個申請表來創建你所要的窗口了。也就是說我們還應該先提交一個申請表,申請成功後再根據這個表創建一個窗口。
我們在使用microsoft平台SDK或者MFC編程時,在創建窗口類後都要先用RegisterClass函數來注冊窗口類,這個函數需要一個指向窗口類結構的指針。那麼RegisterClass這個windows API函數到底做了什麼呢,關於這個函數的源碼微軟是不會給出來的,因為它只是提供一個系統編程介面,網上也找不到相關說明,只是粗略介紹需要將類注冊給系統,但從msdn的atom table說明中我們發現這樣一段說明。
The system uses atom tables that are not directly accessible to applications. However, the application uses these atoms when calling a variety of functions. For example, registered clipboard formats are stored in an internal atom table used by the system. An application adds atoms to this atom table using。
答案有了,在我們構造一個窗口類結構後,我們需要將這個類結構指針加入到system atom table 即SAT中,這樣系統就可以通過查找這張表來找到用戶自定義的窗口類,window預定義的窗口類指針也在SAT中。SAT實際上實現了一種用於查詢的映射,atom實際類型是short,即16位數據。只有系統才可直接訪問這張表,但在調用某些api函數時,如Registerclass,可以告知系統來存取這張表。當然,還有本地原子表和全局原子表,這些表應用程序是可以直接訪問的。
『貳』 新手用Win32編寫一個窗口應用程序
1、LBUTTONDOWN,不是LBUTTONDOWH
2、GetDC,不是GetDc
3、你下面那個聲明的HDC hdc應該是HDC hDC吧?
『叄』 WIN32 API 編程:創建子窗口(編輯控制項 EDIT)後通過菜單選項改變子窗口控制項 樣式
Windows 記事本就是類似你這樣的窗口,有一個自動換行的選項。事實上你用 SetWindowLong 改變樣式確實是無效的,我也試過。應該是需要重新創建該控制項的。
『肆』 什麼是win32編程
Win32編程,指的是用Window提供的API(Application Programming Interface)為Window編寫應用程序。
之所以稱之為Win32,是因為現在的Window都是32位的(現在已經有64位的吧!但是最普遍是32位).
大家都知道,Window是由GDI.DLL、USER.DLL、KERNEL.DLL三大主要部分組成的。(其實你現在不知道也
不是說的很重要。只是在你學習編程的過程中,你肯定會經常碰到這幾個字眼。你肯定會熟悉它的。),那麼
學習Win32編程的大部分(特別是應用程序界面部分的編程)是用這三個DLL(Dynatic Linked Library)動態鏈接庫
子程序形式提供的API函數。
就我認為:學習Win32編程得有幾個重要條件:一是C語言功底。二是外語功底。三是使用Window的經驗。
要學習它不是很難,但也決非易事:
首先:你必須有編程的經驗。這里的經驗不是指傳統的DOS下的字元模式下的編程。大家都知道,Window是圖形
操作系統、同時也多任務搶占式(理解它很重要),它是在圖形模式下工作。當然你編程得服從於它。但是正
是因為這個,Window的編程模式就和DOS不一樣。所有你得有DOS下編程的經驗,但是還得轉變為WINDOW下的編程
方式。因為兩個系統的編程一個是過程化的。即程序從上到下,順序執行。而另一個是,事件驅動的。要明白
這個,才會體驗到Window的博大精深。
我覺得有必要對Window操作系統有所了解。什麼是多任務,什麼是搶占式。進程和線程的概念。但是剛
開始沒有必要因為這些概念讓我們失去信心。因為只要你入門了,你就會非常興奮。
事件驅動:我們知道DOS下程序是順序執行的。至少它是按著你指定的路徑或條件執行的。盡管可能會
在某些條件下跳轉,但是基本上是在你(程序的掌握之中),但是在事件驅動中,你只需考慮到可能出現的情
況,並對這些情況做相應的處理。當Window執行你的程序時,它會檢測是否發生了你考慮的那些事情是否發生
,如果發生了某件事情(比如你用滑鼠單擊),它會給你的程序發送相應的消息(所以叫做消息驅動,這里
對就滑鼠的消息是WM_MOUSELDOWN等).
『伍』 win32程序和控制台程序編程有什麼區別
win32應用程序是指可以在32位或以上Windows系統中運行的程序,概念比windows窗體大,嚴格說來,窗體程序也是win32應用程序。你問的是vs環境中不同的程序類型的區別吧。win32程序是利用編程語言直接調用windows api編寫的程序,可以在任何裝有正確windows的機器上運行,程序員發揮的空間也最大,能實現在該操作系統中可以編程實現的任何功能。 x0dx0a而.net的窗體應用程序是一種託管代碼,無論你是用c++\c#還是vb編寫,只能在.net環境中應用,就是說你編譯好的軟體在沒有.net framework的機器上是不能運行的,而且功能的實現也要受framework的限制,不能隨心所欲。x0dx0a可視化的除了窗體程序,你也可以選擇mfc,代碼編寫量比純api編程要小的多,盡管比.net復雜,但應用起來更靈活,而且這個是不依賴.net框架的。x0dx0awin32包括mfc可以調用操作系統允許的任何程序(甚至可以通過某種技術調用操作系統不允許的操作如hook api技術),當然可以調用窗體程序。
『陸』 如何用win32控制台設計窗口
你的意思是想在GUI的圖形程序中調用 命令行控制台是吧。可以用多線程編程 createthread 或者 創建新進程 createprocess 函數創建一個控制台程序。亦或者創建一個console項目,用createprocess 創建一個WIN32進城,然後讓兩個進程 或進程的兩個線程之間通訊。 參考書 當然是JEFFREY RICHTER的 windows核心編程啊 ,大神之作從事WINDOWS開發的必備書籍。
『柒』 Win32是什麼什麼叫Win32編程
WIN32就是基於32位的windows平台
WIN32編程就是針對32位windows平台的編程開發
現在有了64位的windows系統,但是貌似還沒見WIN64
『捌』 win32編程,一個程序怎麼實現多個窗口(是多次利用greatewindow嗎
當然是多次調用創建窗口的函數(不一定非得是CreateWindow函數)。一個程序只能有一個消息循環,由它處理本程序接收到的所有消息。
『玖』 如何創建windows窗口編程
這個三言兩語講不清,大概把我的學習過程分享一下:
首先,建立興趣(笑)。
接著,在網上找相關的教程,基本上可以直接搜索「WIN32」這個詞,加上自己的編程語言種類,肯定有很多相關的,選上一個自己喜歡的。
接著,背誦各種各樣惡心的API函數(CPP據說有SDL庫,同樣惡心)。等到把常用的API都能記下(實際上只要知道大概就行了,API函數總共幾十萬。。。),就可以開始進行窗口編程了。
『拾』 Win32編程原理
所謂的Win32開發,就是在C語言的層面上,直接使用Win32API開發Windows應用程序或者系統程序。雖說現在直接用Win32API開發應用程序的人已經不多了,但是深入理解Windows系統程序設計原理,仍然是成為Windows開發高手的良好途徑。所謂的Win32,其實是一個API規范,與UNIX系統編程介面標准POSIX是相對應的。下面是進行直接的WIN32SDK方式編程的基本思路或者說是一個框架:
一個Windows程序分為程序代碼和UI(UserInterface用戶介面)資源兩大部份,兩部份最後以RC編譯程序整合為一個完整的EXE文件。所謂UI資源是指功能菜單、對話框、程序圖標、游標形狀等等東西。這些UI資源的實際內容(二進制代碼)系藉助各種工具產生,並以各種擴展名存在,如.ico.bmp.cur等等。程序員必須在一個所謂的資源描述檔(.rc)中描述它們。RC編譯器(RC.EXE)讀取RC文件的描述後將所有UI資源文件集中製作出一個.RES文件,再與程序代碼結合在一起,這才是一個完整的Windows可執行文件。
與控制台程序相同的是,一個Win32程序也必須有一個程序入口點,但是在這兒它不再叫main(),而叫做WinMain(),當WINDOWS的SHELL檢測到用戶欲執行一個EXE程序,就會調用載入器把程序進行載入,然後調用Cstartupcode,後者再調用WinMain(),程序的執行就開始了,WinMain()函數的原型為:
intCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow);
下面程序必須進行必要的初始化工作-產生窗口,第一步是注冊一個窗口類:用API函數:RegisterClass(),而這個函數需要一個已經定義好的系統結構:WNDCLASS,這個結構裡面定義了窗口的種種屬性,需要自己定義,但是許多屬性都有默認值。然後調用CreateWindow()函數來產生具有上述定義屬性的已注冊窗口,但是需要注意的是它只是生成窗口,但並不顯示之,所以還需要調用一個函數ShowWindow()將它顯示在屏幕上,做完這些初始化工作以後,系統將進入消息循環:
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);}
當消息循環捕捉到消息以後將交由窗口函數WndProc()窗口函數進行相應的處理。這樣,一個基於消息事件驅動的WIN32程序的雛形就建立了起來。