Windows Forms Vs. Windows???

Started by
3 comments, last by DigitalChaos 20 years, 5 months ago
Don''t know if i said it right but I was reading Visual C++ .NET Step by Step and it shows a simple way to make Windows Forms which look just as good as windows. So Forms look the same as Windows, yet, Forms are much much MUCH easier to code than all that WNDPROC and all that other BS. An example:
#include "stdafx.h"

#using <mscorlib.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::Windows::Forms; 
using namespace System::Drawing;

__gc public class CppForm : public Form 
{
public:
	CppForm() 
	{
	Text = S"Test Form";
	FormBorderStyle = FormBorderStyle::Fixed3D;
	}	

};

int main()
{
    Console::WriteLine(S"Forms Example");
	Application::Run(new CppForm());
	return 0;
}
^^That code right there will create a Windows form that can have all the attributes and workings of using the more complicated way:
#include <windows.h>

const char g_szClassName[] = "myWindowClass";

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    //Step 1: Registering the Window Class
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // Step 2: Creating the Window
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "The title of my window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // Step 3: The Message Loop
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}
The only visual difference is that in the first one, a console window is displayed, but it can be minimized to be out of view. I heard somewhere you can get rid of it totally, don''t think that''s true though. Sure the first way is much easier to code and it isn''t suitable for 3D projects, but it works just fine. So is there any big difference between forms and windows????
Advertisement
The console should vanish if you build for the winexe target instead of the exe target.
how do u do that?
It depends how you''re building, on the command line you use /target:winexe or for visual studio you start with a windows forms project or change a flag somewhere in the project settings (I don''t have access to my VS.NET at the moment so I''m not sure where exactly). Not sure for the Borland IDE, but it should be something similar.
Actually, it doesn''t work quite like that in MC++. You need to either change main() to WinMain() or set the /subsystem:windows linker setting. See this newsgroup thread.

--
AnkhSVN - A Visual Studio .NET Addin for the Subversion version control system.
[Project site] [Blog] [RSS] [Browse the source] [IRC channel]
--AnkhSVN - A Visual Studio .NET Addin for the Subversion version control system.[Project site] [IRC channel] [Blog]

This topic is closed to new replies.

Advertisement