c++ win32控制台的程序怎么改成win32应用程序???

c++ win32控制台的程序怎么改成win32应用程序???,第1张

#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:windows")

加上这句就是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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7986739.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存