#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void AddMenu(HWND);
HMENU hMenu;
enum MENU {
NEW, OPEN, SAVE, SAVEAS, EXIT,
UNDO, REDO, COPY, PAST
};
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
HWND hMainWnd;
char szClassName[] = "MyClass";
WNDCLASSEX wc;
wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW;
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)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc)){ MessageBox(NULL, "Cannot register class", "Error", MB_OK); return 0; }
//----------------------------
hMainWnd = CreateWindow(
szClassName,
"A Hello Application",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
600,
400,
(HWND)NULL,
hMenu,
(HINSTANCE)hInstance,
NULL
);
if(!hMainWnd){ MessageBox(NULL, "cannot crate main window", "error", MB_OK); return 0; }
//----------------------------
ShowWindow(hMainWnd, nCmdShow);
//UpdateWindow(hMainWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
};
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
switch (uMsg)
{
case WM_CREATE:
AddMenu(hWnd);
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rect);
DrawText(hDC, "HELLO WORLD", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd, &ps);
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
};
void AddMenu(HWND hWnd){
hMenu = CreateMenu();
//FILE
HMENU hFileMenu = CreateMenu();
AppendMenu(hFileMenu, MF_STRING, MENU::NEW, "New \t ctrl+n");
AppendMenu(hFileMenu, MF_STRING, MENU::OPEN, "Open \t ctrl+o");
AppendMenu(hFileMenu, MF_STRING, MENU::SAVE, "Save \t ctrl+s");
AppendMenu(hFileMenu, MF_STRING, MENU::SAVEAS, "Save As...");
AppendMenu(hFileMenu, MF_SEPARATOR, NULL, NULL);//просто лини¤
AppendMenu(hFileMenu, MF_STRING, MENU::EXIT, "Exit \t alt+f4");
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hFileMenu, "File");
//EDIT
HMENU hEditMenu = CreateMenu();
AppendMenu(hEditMenu, MF_STRING, MENU::UNDO, "Undo");
AppendMenu(hEditMenu, MF_STRING, 2, "Redo");
AppendMenu(hEditMenu, MF_SEPARATOR, NULL, NULL);
AppendMenu(hEditMenu, MF_STRING, 2, "Copy");
AppendMenu(hEditMenu, MF_STRING, 2, "Past");
AppendMenu(hEditMenu, MF_SEPARATOR, NULL, NULL);
//submenu
HMENU hEditSubMenu = CreateMenu();
AppendMenu(hEditSubMenu, MF_STRING, 12, "SubMenu Item1");
AppendMenu(hEditSubMenu, MF_STRING, 12, "SubMenu Item2");
AppendMenu(hEditSubMenu, MF_STRING, 12, "SubMenu Item3");
AppendMenu(hEditMenu, MF_POPUP, (UINT_PTR)hEditSubMenu, "Open SubMenu");
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hEditMenu, "Edit");
//INFO
AppendMenu(hMenu, MF_STRING, NULL, "Info");
SetMenu(hWnd, hMenu);
};
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
HDC hDC;
PAINTSTRUCT ps;
...
return 0;
};
#include <windows.h>
void AddMenu(HWND hWnd){
hMenu = CreateMenu();
...
SetMenu(hWnd, hMenu);
};
#include <windows.h>
#include "WndProc.h"
extern HMENU hMenu;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
HWND hMainWnd;
char szClassName[] = "MyClass";
WNDCLASSEX wc;
wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW;
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)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc)){ MessageBox(NULL, "Cannot register class", "Error", MB_OK); return 0; }
//----------------------------
hMainWnd = CreateWindow(
szClassName,
"A Hello Application",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
600,
400,
(HWND)NULL,
hMenu,
(HINSTANCE)hInstance,
NULL
);
if(!hMainWnd){ MessageBox(NULL, "cannot crate main window", "error", MB_OK); return 0; }
//----------------------------
ShowWindow(hMainWnd, nCmdShow);
//UpdateWindow(hMainWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
};
#ifndef TOPMENU_H
#define TOPMENU_H
void AddMenu(HWND hWnd);
#endif TOPMENU_H
#include <windows.h>
HMENU hMenu;
enum MENU {
NEW, OPEN, SAVE, SAVEAS, EXIT,
UNDO, REDO, COPY, PAST
};
void AddMenu(HWND hWnd){
hMenu = CreateMenu();
//FILE
HMENU hFileMenu = CreateMenu();
AppendMenu(hFileMenu, MF_STRING, MENU::NEW, "New \t ctrl+n");
AppendMenu(hFileMenu, MF_STRING, MENU::OPEN, "Open \t ctrl+o");
AppendMenu(hFileMenu, MF_STRING, MENU::SAVE, "Save \t ctrl+s");
AppendMenu(hFileMenu, MF_STRING, MENU::SAVEAS, "Save As...");
AppendMenu(hFileMenu, MF_SEPARATOR, NULL, NULL);//просто лини¤
AppendMenu(hFileMenu, MF_STRING, MENU::EXIT, "Exit \t alt+f4");
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hFileMenu, "File");
//EDIT
HMENU hEditMenu = CreateMenu();
AppendMenu(hEditMenu, MF_STRING, MENU::UNDO, "Undo");
AppendMenu(hEditMenu, MF_STRING, 2, "Redo");
AppendMenu(hEditMenu, MF_SEPARATOR, NULL, NULL);
AppendMenu(hEditMenu, MF_STRING, 2, "Copy");
AppendMenu(hEditMenu, MF_STRING, 2, "Past");
AppendMenu(hEditMenu, MF_SEPARATOR, NULL, NULL);
//submenu
HMENU hEditSubMenu = CreateMenu();
AppendMenu(hEditSubMenu, MF_STRING, 12, "SubMenu Item1");
AppendMenu(hEditSubMenu, MF_STRING, 12, "SubMenu Item2");
AppendMenu(hEditSubMenu, MF_STRING, 12, "SubMenu Item3");
AppendMenu(hEditMenu, MF_POPUP, (UINT_PTR)hEditSubMenu, "Open SubMenu");
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hEditMenu, "Edit");
//INFO
AppendMenu(hMenu, MF_STRING, NULL, "Info");
SetMenu(hWnd, hMenu);
};
#ifndef WNDPROC_H
#define WNDPROC_H
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
#endif WNDPROC_H
#include <windows.h>
#include "TopMenu.h"
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
switch (uMsg)
{
case WM_CREATE:
AddMenu(hWnd);
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rect);
DrawText(hDC, "HELLO WORLD", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd, &ps);
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
};
g++ main.cpp TopMenu.cpp WndProc.cpp -mwindows
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.