⑴ Win32編程原理
所謂的Win32開發,就是在C語言的層面上,直接使用Win32
API開發Windows應用程序或者系統程序。雖說現在直接用Win32
API開發應用程序的人已經不多了,但是深入理解Windows系統程序設計原理,仍然是成為Windows開發高手的良好途徑。所謂的Win32,其實是一個API規范,與UNIX系統編程介面標准POSIX是相對應的。下面是進行直接的WIN32
SDK方式編程的基本思路或者說是一個框架:
一個Windows程序分為程序代碼和UI(User
Interface
用戶介面)資源兩大部份,兩部份最後以RC編譯程序整合為一個完整的EXE文件。所謂UI資源是指功能菜單、對話框、程序圖標、游標形狀等等東西。這些UI資源的實際內容(二進制代碼)系藉助各種工具產生,並以各種擴展名存在,如
.ico
.bmp
.cur等等。程序員必須在一個所謂的資源描述檔(.rc
)中描述它們。RC編譯器(
RC.EXE
)讀取RC
文件的描述後將所有UI資源文件集中製作出一個.RES
文件,再與程序代碼結合在一起,這才是一個完整的
Windows可執行文件。
與控制台程序相同的是,一個Win32程序也必須有一個程序入口點,但是在這兒它不再叫main(),而叫做WinMain(),當WINDOWS的SHELL檢測到用戶欲執行一個EXE程序,就會調用載入器把程序進行載入,然後調用C
startup
code,後者再調用WinMain(),程序的執行就開始了,WinMain()函數的原型為:
int
CALLBACK
WinMain(
HINSTANCE
hInstance,HINSTANCE
hPrevInstance,LPSTR
lpCmdLine,int
nCmdShow);
下面程序必須進行必要的初始化工作-產生窗口,第一步是注冊一個窗口類:用API函數:RegisterClass(),而這個函數需要一個已經定義好的系統結構:WNDCLASS,這個結構裡面定義了窗口的種種屬性,需要自己定義,但是許多屬性都有默認值。然後調用CreateWindow()函數來產生具有上述定義屬性的已注冊窗口,但是需要注意的是它只是生成窗口,但並不顯示之,所以還需要調用一個函數ShowWindow()將它顯示在屏幕上,做完這些初始化工作以後,系統將進入消息循環:
while
(GetMessage(&msg,
NULL,
0,
0)){
TranslateMessage(&msg);
DispatchMessage(&msg);}
當消息循環捕捉到消息以後將交由窗口函數WndProc()窗口函數進行相應的處理。這樣,一個基於消息事件驅動的WIN32程序的雛形就建立了起來。
⑵ 會用win32控制台編程,能幹什麼
可以干很多事。把win32 api大全上的大部分函數玩一遍。然後網上看看別人的源碼。
如果實在想要gui界面的話,mfc或qt都有簡單的拖放控制項來設置界面,右擊控制項添加消息處理函數,稍微學下就會了。又或者c#做界面(這個更簡單),把核心功能用c或c++做成dll給c#調用。
⑶ Win32是什麼什麼叫Win32編程
WIN32就是基於32位的windows平台
WIN32編程就是針對32位windows平台的編程開發
現在有了64位的windows系統,但是貌似還沒見WIN64
⑷ 如何學習win32編程
win32編程可以用C來完成,主要是通過windows的API來工作.但是API上千個,想全部掌握很難,建議安裝一個MSDN隨時查看.書籍方面又Petzeld的Windows程序設計,上下兩冊,講的比較全面,但是內容很多.
我個人意見,我覺得你現在學win32編程倒不如先學C++,這樣以後既能做win32程序(過程很繁瑣),也能做MFC程序(明朗的多),而且有了面向對象思想之後,也可以繼而學習JAVA或C#,用C#做windows form程序那叫一個方便!
所以強烈建議你先學C++,估計你是對控制台那個黑屏厭煩的,但是進入windows後你會發現,它比DOS的還煩!
⑸ Win32編程
win32一般都是用API直接編程,資料很容易找的;用面向對象方式寫隨便裝個環境IDE都能找到該類里都有什麼函數,你最好還是找本書系統的理解下,比如win32API編程,或是JAVA或者.net
⑹ 什麼是win32編程
就是在windows平台調用系統提供的一些函數和方法編程,
這是windows操作系統編程的基礎,但是現在很少有單獨的win32編程了,一般都是使用C# .net,或者MFC+ATL之類的封裝好的環境來編程
⑺ 一個簡單的win32窗口程序
HACCELhAccelTable;
hAccelTable=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_WIN32));
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
還要建立加速鍵表資源和相應項,指向菜單,或自定義的ID,
在wm_command或wm_syscommand中處理,和菜單類似
你可以建立默認的win32工程試試,或者是helloworld的win32工程,vs的幾個版本應該差的不太多,裡面應該含有例子
⑻ win32編程與windows圖形編程有什麼區別
Win32程序,主要是控制台 Exe等等的文件類型的程序,它是純控制台的。比如DOS。
Windows圖形編程,是通過按鈕,滑鼠空間等圖形控制項進行編程的,具有可視化的特點。現在大部分軟體都是圖形的,比如Windows本身。
⑼ win32界面編程,窗口分割條本質上也是窗口,它的ClassName是什麼
窗口分割條只是一個廣義上的窗口,實際他只是一個窗口的框架。且不能單獨使用。要放在MAINFRAME里,類包叫CSplitterWnd。並且他的內部窗口位置也不能由他來控制,而是由其中CVIEW類來控制。
⑽ 如何在win界面使用c語言編程
調用window庫窗口函數即可創建windows窗口。
必須使用windows的編譯器,如VC,MS等等。
RegisterClassEx函數:
該函數注冊在隨後調用CreateWindow函數和CreateWindowEx函數中使用的窗口類。 RegisterClass函數己經由函數RegisterClassEx函數來代替,但是,如果不需要設置類的小目標則仍然可以使用RegisterClass函數。
CreateWindowEx函數:
該函數創建一個具有擴展風格的層疊式窗口、彈出式窗口或子窗口,其他與CreateWindow函數相同。關於創建窗口和其他參數的內容,請參看CreateWindow。具體仍可見微軟的msdn。
消息處理函數WindowProc:
該函數是一個應用程序定義的函數。它處理發送給窗口的消息。WINDPROC類型定義了一個指向該回調函數的指針。WindowProc是用於應用程序定義函數的佔位符。
函數原型:
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
參數:
hwnd:指向窗口的句柄。
uMsg:指定消息類型。
wParam:指定其餘的、消息特定的信息。該參數的內容與UMsg參數值有關。
IParam:指定其餘的、消息特定的信息。該參數的內容與uMsg參數值有關。
返回值:返回值就是消息處理結果,它與發送的消息有關。
一個簡單的Window的代碼如下:
#include <Windows.h>
#include <tchar.h>
LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
int WinMain(
__in HINSTANCE hInstance,
__in_opt HINSTANCE hPrevInstance,
__in LPSTR lpCmdLine,
__in int nShowCmd
)
{
TCHAR *szName = _T("myWindow");
WNDCLASSEX wc = {0};
HWND hWnd = NULL;
MSG Msg = {0};
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.cbSize = sizeof(WNDCLASSEX);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//通過函數來設置一個白色的背景,這里大家設置為NULL看看,會很有趣的
wc.hCursor = NULL;//不設置
wc.hIcon = NULL;//不設置
wc.hIconSm = NULL;//不設置
wc.hInstance = hInstance;//當前程序的句柄,hInstance是有系統給傳遞的
wc.lpfnWndProc = WinProc;//窗口處理過程的回調函數。
wc.lpszClassName = szName;//窗口類的名字。
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
RegisterClassEx(&wc);//在系統中注冊
hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜歡"),WS_OVERLAPPEDWINDOW,
200,100,600,400,NULL,NULL,hInstance,NULL);//創建窗口,窗口標題為"我的窗口我喜歡"
if(hWnd == NULL)
{
MessageBox(NULL,_T("There's an Error"),_T("Error Title"),MB_ICONEXCLAMATION|MB_OK);
return 0;
}
ShowWindow(hWnd,nShowCmd);//顯示窗口
UpdateWindow(hWnd);
//下面是對消息的循環處理,大家先不必管這些,下節課我會細說的
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);//翻譯消息
DispatchMessage(&Msg);//分派消息
}
return Msg.message;
}
//消息處理函數
LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
switch(Msg)//處理消息過程
{
case WM_DESTROY://響應滑鼠單擊關閉按鈕事件
PostQuitMessage(0);//退出消息隊列
return 0;//退出函數
}
return DefWindowProc(hWnd,Msg,wParam,lParam);
}