Inside Delphi 2006 (Wordware Delphi Developers Library)

C++ Generic Applications

There is almost no difference between C++ and Delphi API applications. The only two differences are:

To create a generic C++ application in C++Builder, select the Console Application item to start creating a new console application project and uncheck the Console Application radio button on the New Console Application dialog box. When you uncheck the Console Application radio button, the IDE will generate the appropriate WinMain function instead of the main function:

#include <windows.h> #pragma hdrstop #pragma argsused WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { return 0; }

To create the API application, you have to register and create the window in the WinMain function and add a WindowProc function that will handle messages for the window. The following listing shows the complete source code for a simple C++ API application.

Listing 23-10: A simple C++ API application

#include <windows.h> #pragma hdrstop const char* GENERIC_WNDCLASS = "CppBuilderWindow"; HWND hMainWindow; LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, uMsg, wParam, lParam); } #pragma argsused WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; WNDCLASS wClass; wClass.cbClsExtra = 0; wClass.cbWndExtra = 0; wClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); wClass.hCursor = LoadCursor(NULL, IDC_ARROW); wClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wClass.hInstance = hInstance; wClass.lpszClassName = GENERIC_WNDCLASS; wClass.lpfnWndProc = WindowProc; wClass.lpszMenuName = NULL; wClass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wClass); // create the main window hMainWindow = CreateWindow(GENERIC_WNDCLASS, "C++ Win32 API Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hMainWindow, SW_SHOWNORMAL); UpdateWindow(hMainWindow); // enter the message loop while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }

Категории