加上这句就是win32应用程序了 ,你的主函数必须是 int WINAPI WinMain()
当然如果用main函数的话 可以写这样写
#pragma comment(linker, "/entry:mainCRTStartup /subsystem:windows")
我是菜鸟,希望能帮到你,观楼主英俊潇洒,风流倜傥,必当世豪杰,诚邀加入0x30百度贴吧,共商义举,建不世之功!
需要些SDK的知识,windows的实现中基本上都是用的C语言,其各种接口基本上都是原生C语言函数,具体比如SDK用的windows API。使用纯C语言编写windows程序,工作量将会相当大,下面是一个小例子:
/*
* This is a simple windows program, it does nothing but draw an ellipse.
* Windows SDK, Win32 API ,Pure C, (Not C++ or MFC !!)
* Suxpert at gmail dot com, 2008/8/24
* */
#include <windows.h>
LONG WINAPI WndProc( HWND, UINT, WPARAM, LPARAM )
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow ){
/* The Entry for windows program, just like main() in dos */
WNDCLASS wc
HWND hwnd
MSG msg
wc.style = 0 // Class style
wc.lpfnWndProc = (WNDPROC)WndProc // Window procedure address
wc.cbClsExtra = 0 // Class extra bytes
wc.cbWndExtra = 0 // Window extra bytes
wc.hInstance = hInstance // Instance handle
wc.hIcon = LoadIcon( NULL, IDI_WINLOGO ) // Icon handle
wc.hCursor = LoadCursor( NULL, IDC_ARROW ) // Cursor handle
wc.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1 )// Background color
wc.lpszMenuName = NULL // Menu name
wc.lpszClassName = "WinSDKtest" // WNDCLASS name
RegisterClass( &wc )
hwnd = CreateWindow (
"WinSDKtest", // WNDCLASS name
"SDK Application", // Window title
WS_OVERLAPPEDWINDOW,// Window style
CW_USEDEFAULT, // Horizontal position
CW_USEDEFAULT, // Vertical position
CW_USEDEFAULT, // Initial width
CW_USEDEFAULT, // Initial height
HWND_DESKTOP, // Handle of parent window
NULL, // Menu handle
hInstance, // Application's instance handle
NULL// Window-creation data
)
ShowWindow( hwnd, nCmdShow )
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 )
{
/* Windows will call this function anytime... */
PAINTSTRUCT ps
HDC hdc
switch(message){
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps )
Ellipse( hdc, 0, 0, 800, 600 )
// Here we Draw an ellipse in the window of our program
EndPaint( hwnd, &ps )
break// Someone like to write return here.
case WM_DESTROY:
PostQuitMessage(0)
break
default:
return DefWindowProc( hwnd, message, wParam, lParam )
}
return 0
}
基本过程就是直接调用windows提供的API函数,完成从窗口创建,显示等界面功能到深层的文件 *** 作,注册表等甚至windows内核调试等高级功能。
调用window库窗口函数即可创建windows窗口。
必须使用windows的编译器,如VC,MS等等。
RegisterClassEx函数:
该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设置类的小目标则仍然可以使用RegisterClass函数。
CreateWindowEx函数:
该函数创建一个具有扩展风格的层叠式窗口、d出式窗口或子窗口,其他与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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)