RightClick-Menu

>> Thursday, October 29, 2009



#define STRICT

#include <windows.h>
#include <stdio.h>

#define ID_CUT 1000
#define ID_COPY 1001
#define ID_PASTE 1002

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
CREATESTRUCT *cs;
HMENU hMenu;
POINT p;
char szText[64];
// Menu-item identifiers
static char szMenuItem[3][10] =
{
"Cut", "Copy", "Paste"
};

switch (iMsg)
{
case WM_CREATE:
cs = (LPCREATESTRUCT)lParam;
break;

case WM_RBUTTONUP:
p.x = LOWORD(lParam);
p.y = HIWORD(lParam);
hMenu = CreatePopupMenu();
AppendMenu(hMenu, MF_STRING, ID_CUT, "Cut");
AppendMenu(hMenu, MF_STRING, ID_COPY, "Copy");
AppendMenu(hMenu, MF_STRING, ID_PASTE, "Paste");
ClientToScreen(hwnd, (LPPOINT) &p);
TrackPopupMenu(hMenu, 0, p.x, p.y, 0, hwnd, NULL);
DestroyMenu(hMenu);
break;

case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_CUT:
case ID_COPY:
case ID_PASTE:
sprintf(szText, "You chose %s", szMenuItem[LOWORD(wParam) - 1000]);
MessageBox(hwnd, szText, "MenuApp", MB_OK);
break;
}
break;

case WM_CLOSE:
DestroyWindow(hwnd);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
char szAppName[] = "RightclickMenuApp";

wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(hInstance, szAppName);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndclass.lpszMenuName = szAppName;
wndclass.lpszClassName = szAppName;
RegisterClass(&wndclass);

hwnd = CreateWindow(szAppName, szAppName, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,
0, 400, 400, NULL, NULL, hInstance, szCmdLine);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}

0 comments: