在控制台程序中怎样创建一个窗体?最好能贴出源码,万分感谢!

解决方案 »

  1.   

    控制台程序应该没有将WIN32.DLL连上。这样的话,只能自己动手加载WIN32.DLL,然后想用那个函数就找哪个函数了。比windows SDK编程还要原始。
      

  2.   

    首先,即便是控制台程序,也是32位的!vc在n久前就不支持编译16位程序了。
    其次,调用exe的方法不是我所想要的。
      

  3.   

    加入MFC的相关头文件,让你的控制台支持MFC的类,就可以啦
      

  4.   

    楼上,简单点WINDOWS提供了COMMAND我需要使用它难道自己写个COMMAND/?
      

  5.   

    直接调用创建窗口的 Windows API
      

  6.   

    添加一个派生于CDialog的子类,您觉得怎么样?
      

  7.   

    WIN32子系统和CONSOLE子系统是水火不容的,不可能一个应用同时支持两种子系统,但有变通的方法,就是把应用设计成WIN32子系统,然后使用AllocConsole或者AttachConsole创建或连接到控制台,这样能访问控制台的输入输出,但应用本身可以创建窗口的。
      

  8.   

    可以把工程属性改成为win32窗体(主要是为了更改入口函数main编程winmain),
    之后再使用SDK编程,创建窗体,注册窗体,窗体函数等
      

  9.   

    LRESULT CALLBACK TestWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    switch (uMsg)
    {
    case WM_CLOSE:
    DestroyWindow(hwnd);
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
    }void TestWindow()
    {
    LPCTSTR testClassName = _T("TestWndClass");
    WNDCLASSEX wc;
    memset(&wc, 0, sizeof(wc));
    wc.cbSize = sizeof(wc);
    wc.lpfnWndProc = TestWndProc;
    wc.hInstance = GetModuleHandle(NULL);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpszClassName = testClassName;
    RegisterClassEx(&wc);
    HWND hwnd = CreateWindowEx(0, testClassName, _T("Test Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, wc.hInstance, NULL);
    ShowWindow(hwnd, SW_SHOW);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    UnregisterClass(testClassName, wc.hInstance);
    }
      

  10.   

    #include <windows.h>
    #include <stdio.h>LRESULT CALLBACK WinSunProc(HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
    );int WINAPI WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow
    )
    {
    WNDCLASS wndcls;
    wndcls.cbClsExtra = 0;
    wndcls.cbWndExtra = 0;
    wndcls.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
    wndcls.hCursor = LoadCursor(NULL,IDC_CROSS);
    wndcls.hIcon = LoadIcon(NULL,IDI_INFORMATION);
    wndcls.hInstance = hInstance;
    wndcls.lpfnWndProc = WinSunProc;
    wndcls.lpszClassName = "Sky";
    wndcls.lpszMenuName = NULL;
    wndcls.style = CS_HREDRAW|CS_VREDRAW; RegisterClass(&wndcls); HWND hwnd;
    hwnd = CreateWindow("Sky",
    "测试",
    WS_OVERLAPPEDWINDOW,
    0,0,600,400,NULL,NULL,
    hInstance,NULL);

    ShowWindow(hwnd,SW_SHOWNORMAL);
    UpdateWindow(hwnd); MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return 0;
    }LRESULT CALLBACK WinSunProc(HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
    )
    {
    switch(uMsg)
    {
    case WM_CHAR:
    char szChar[20];
    sprintf(szChar,"char is %d",wParam);
    MessageBox(hwnd,szChar,"Sky",0);
    break;
    case WM_LBUTTONDOWN:
    MessageBox(hwnd,"mouse clicked","Sky",0);
    HDC hdc;
    hdc = GetDC(hwnd);
    TextOut(hdc,0,50,"练习",strlen("练习"));
    ReleaseDC(hwnd,hdc);
    break;
    case WM_PAINT:
    HDC hDC;
    PAINTSTRUCT ps;
    hDC = BeginPaint(hwnd,&ps);
    TextOut(hDC,0,0,"Sky",strlen("Sky"));
    ReleaseDC(hwnd,hDC);
    break;
    case WM_CLOSE:
    if(IDYES == MessageBox(hwnd,"是否真的要关闭?","Sky",MB_YESNO))
    {
    DestroyWindow(hwnd);
    }
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd,uMsg,wParam,lParam);
    }
    return 0;
    }
    这是孙的教程里的,还有相应的响应函数
      

  11.   

    to sky_yskabc :
    我要求用控制台程序启动窗体,不是 WinMain 主函数。to cnzdgs :
    高,实在是高!to 别人:
    谢谢顶贴。
      

  12.   

    #include <atlbase.h>
    #include <atlwin.h>
    #include <atlapp.h>int _tmain(int argc, _TCHAR* argv[])
    {
        CWindow window;
        window.Create("button",NULL);
        window.ShowWindow(SW_SHOW);
        
        CMessageLoop messageLoop;
        messageLoop.Run(); return 0;
    }
    控制台使用WTL显示Windows窗口
      

  13.   

    今天刚学习C++.NET,c++.NET程序设计的第一章就给出了一个用控制台程序应用程序创建窗口的例子,对学习了一段MFC的我来说,这真是件不可思议又奇妙的事,但我用VS2010编译书上的程序却失败了,报错说Paint没定义。我也菜,不知道怎么回事。书后有道练习题,也是用控制台应用程序做窗口,于是我就百度到楼主你这来了。我想楼主的问题C++.NET可以帮助你解决。我也才学,各种不懂,所以楼主可以自己查下资料。没能彻底帮助你,抱歉