将win32控制台应用程序切换到图形模式

时间:2012-01-11 21:39:14

标签: c++ visual-c++

我想将我的win32控制台应用程序切换到图形模式,以使用SetPixel函数绘制线条:

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
          //code to switch to graphics mode

    return 0;
}

请建议:)

2 个答案:

答案 0 :(得分:1)

这是一个很好的SetPixel()示例。

创建一个win32应用程序项目,粘贴代码并编译它

//header files to include
#include<windows.h>
#include<stdlib.h>
#include<time.h>

//application title
#define APPTITLE "Hello World"

//function prototypes (forward declarations)
BOOL InitInstance(HINSTANCE, int);
ATOM MyRegisterClass(HINSTANCE);
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);

//the window event callback function
LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    char *szHello = "SetPixel";
    RECT rt;
    int x=0, y=0, n=0;
    COLORREF c;
    int j;

    switch (message)
    {
    case WM_PAINT:
        //get the dimensions of the window
        GetClientRect(hWnd, &rt);

        //start drawing on devicce context
        hdc = BeginPaint (hWnd, &ps);

        //draw some text
        DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
        j = (rand()*100);

        c = RGB(0, 0, 0);

        while( x<25000)
        {

            SetPixel(hdc,  rand()%400,  rand()%400, rand()%255);
            x++; 
        }

        //stop drawing
        EndPaint(hWnd, &ps);
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

//helper function to set up the window properties
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    //create the window class structure
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX);

    //fill the struct with info
    wc.style                 = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc           = (WNDPROC)WinProc;
    wc.cbClsExtra            = 0;
    wc.cbWndExtra            = 0;
    wc.hInstance             = hInstance;
    wc.hIcon                 = NULL;
    wc.hCursor               = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground         = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName          = NULL;
    wc.lpszClassName         = APPTITLE;
    wc.hIconSm               = NULL;

    //set up the window with the class info
    return RegisterClassEx(&wc);
}

//helper function to create the window and refresh it
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd;

    //create a new window
    hWnd = CreateWindow(
        APPTITLE,           //window class
        APPTITLE,       //title bar
        WS_OVERLAPPEDWINDOW,    //window style
        CW_USEDEFAULT,      //x position of window
        CW_USEDEFAULT,      //y position of window
        400,                //width of the window
        400,                //height of the window
        NULL,               //parent window
        NULL,           //menu
        hInstance,          //application instance
        NULL);              //window parameters


    //was there an error creating the window?
    if(!hWnd)
        return FALSE;

    //display the window
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    return TRUE;
}

//entry point for a Windows program
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR            lpCmdLine,
                   int              nCmdShow)
{
    //declare variables
    MSG msg;

    //register the class
    MyRegisterClass(hInstance);

    //initialize application
    if(!InitInstance (hInstance, nCmdShow))
        return FALSE;

    //set random number seed
    srand(time(NULL));

    //main message loop
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

答案 1 :(得分:0)

您可以切换到“graphich模式”表示使用项目设置的Windows窗体应用程序模式。但您必须将主要功能更改为winMain

  

PROJECT SETTINGS&gt;

     

LINKER&gt; “系统”&gt; SUBSYSTEM&gt; Windows(/ SUBSYSTEM:WINDOWS)

     

C / C ++&gt;预处理器&gt;预处理器定义&gt;   WIN32; _DEBUG; _WINDOWS;%(PreprocessorDefinitions)

这就是你的函数在这种情况下的样子:

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int nCmdShow)
{
       ///....
}