Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma comment(linker,"/MERGE:.rdata=.text")
- #pragma comment(linker,"/MERGE:.data=.text")
- #pragma comment(linker,"/SECTION:.text,ERW,512")
- #pragma comment(linker,"/Od")
- #pragma comment(linker,"/CLRUNMANAGEDCODECHECK:NO")
- #pragma comment(linker,"/MANIFEST:NO")
- #pragma comment(linker,"/MANIFESTUAC:NO")
- #pragma comment(linker,"/GS-")
- #pragma comment(linker,"/PDBPATH:NONE")
- #pragma comment(linker,"/DYNAMICBASE:NO")
- #pragma comment(linker,"/ENTRY:WinMain")
- #pragma comment(lib, "Comctl32.lib")
- #include <windows.h>
- #include <commctrl.h>
- /* This is where all the input to the window goes to */
- LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
- switch (Message) {
- /* Upon destruction, tell the main thread to stop */
- case WM_DESTROY: {
- PostQuitMessage(0);
- break;
- }
- /* All other messages (a lot of them) are processed using default procedures */
- default:
- return DefWindowProc(hwnd, Message, wParam, lParam);
- }
- return 0;
- }
- // Description:
- // Creates a status bar and divides it into the specified number of parts.
- // Parameters:
- // hwndParent - parent window for the status bar.
- // idStatus - child window identifier of the status bar.
- // hinst - handle to the application instance.
- // cParts - number of parts into which to divide the status bar.
- // Returns:
- // The handle to the status bar.
- //
- HWND DoCreateStatusBar(HWND hwndParent, int idStatus, HINSTANCE
- hinst, int cParts)
- {
- HWND hwndStatus;
- RECT rcClient;
- HLOCAL hloc;
- PINT paParts;
- int i, nWidth;
- // Ensure that the common control DLL is loaded.
- InitCommonControls();
- // Create the status bar.
- hwndStatus = CreateWindowEx(
- 0, // no extended styles
- STATUSCLASSNAME, // name of status bar class
- (PCTSTR)NULL, // no text when first created
- SBARS_SIZEGRIP | // includes a sizing grip
- WS_CHILD | WS_VISIBLE, // creates a visible child window
- 0, 0, 0, 0, // ignores size and position
- hwndParent, // handle to parent window
- (HMENU)idStatus, // child window identifier
- hinst, // handle to application instance
- NULL); // no window creation data
- // Get the coordinates of the parent window's client area.
- GetClientRect(hwndParent, &rcClient);
- // Allocate an array for holding the right edge coordinates.
- hloc = LocalAlloc(LHND, sizeof(int) * cParts);
- paParts = (PINT)LocalLock(hloc);
- // Calculate the right edge coordinate for each part, and
- // copy the coordinates to the array.
- nWidth = rcClient.right / cParts;
- int rightEdge = nWidth;
- for (i = 0; i < cParts; i++) {
- paParts[i] = rightEdge;
- rightEdge += nWidth;
- }
- // Tell the status bar to create the window parts.
- SendMessage(hwndStatus, SB_SETPARTS, (WPARAM)cParts, (LPARAM)
- paParts);
- // Free the array, and return.
- LocalUnlock(hloc);
- LocalFree(hloc);
- return hwndStatus;
- }
- /* The 'main' function of Win32 GUI programs: this is where execution starts */
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
- WNDCLASSEX wc; /* A properties struct of our window */
- HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
- MSG msg; /* A temporary location for all messages */
- /* zero out the struct and set the stuff we want to modify */
- memset(&wc, 0, sizeof(wc));
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.lpfnWndProc = WndProc; /* This is where we will send messages to */
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- wc.lpszClassName = "WindowClass";
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
- wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */
- if (!RegisterClassEx(&wc)) {
- MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
- return 0;
- }
- hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "WindowClass", "Caption", WS_VISIBLE | WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, /* x */
- CW_USEDEFAULT, /* y */
- 400, /* width */
- 200, /* height */
- NULL, NULL, hInstance, NULL);
- if (hwnd == NULL) {
- MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
- return 0;
- }
- DoCreateStatusBar(hwnd, NULL, hInstance, 4);
- /*
- This is the heart of our program where all input is processed and
- sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
- this loop will not produce unreasonably high CPU usage
- */
- while (GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */
- TranslateMessage(&msg); /* Translate key codes to chars if present */
- DispatchMessage(&msg); /* Send it to WndProc */
- }
- return msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement