.


:




:

































 

 

 

 


WM_INITMENUPOPUP




. wParam . lParam , lParam 1 0 . , 0. .

WM_COMMAND

. wParam , 0. 0.

WM_MENUSELECT

WM_MENUSELECT . wParam ( ), :

MF_CHECKED
MF_DISABLED
MF_GRAYED
MF_HILITE
MF_MOUSESELECT
MF_POPUP
MF_SYSMENU . lParam

 

wParam 0xFFFF lParam = NULL, Windows . lParam , .

, 0.

, . TrackPopupMenu:

 

BOOL TrackPopupMenu(HMENU hMenu, UINT uFlags, int x, int y,

int nReserved, HWND hwnd, CONST RECT *prcRect);

 

, . , .

:

1. hMenu . CreatePopupMenu GetSubMenu.

2. uFlags , .

2.1. :

_CENTERALIGN
_LEFTALIGN
TPM_RIGHTALIGN

2.2. :

_BOTTOMALIGN
TPM_TOPALIGN
TPM_VCENTERALIGN

2.3. - :

_NONOTIFY
TPM_RETURNCMD

2.4. , :

TPM_LEFTBUTTON
TPM_RIGHTBUTTON

3. .

4. .

5. nReserved , .

6. hwnd -, . WM_COMMAND TrackPopupMenu.

7. prcRect , . , . prcRect = NULL, .

. uFlags TPM_RETURNCMD, . , .

. .

4.5.

#include <windows.h>

#include <tchar.h>

 

#define CM_EDIT_CUT 2003

#define CM_EDIT_COPY 2004

#define CM_EDIT_PASTE 2005

 

BOOL RegClass(WNDPROC, LPCTSTR, UINT);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

 

HINSTANCE hInstance;

TCHAR szClass[] = TEXT("FloatMenu");

 

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)

{

MSG msg;

HWND hwnd;

hInstance = hInst;

if (!RegClass(WndProc, szClass, COLOR_WINDOW)) return FALSE;

hwnd = CreateWindow(szClass, TEXT(" "), WS_OVERLAPPEDWINDOW | WS_VISIBLE,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInstance, NULL);

if (!hwnd) return FALSE;

while(GetMessage(&msg, 0, 0, 0))

DispatchMessage(&msg);

return msg.wParam;

}

 

BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)

{

WNDCLASS wc;

wc.style = wc.cbClsExtra = wc.cbWndExtra = 0;

wc.lpfnWndProc = Proc;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = (HBRUSH)(brBackground +1);

wc.lpszMenuName = NULL;

wc.lpszClassName = szName;

return (RegisterClass(&wc)!= 0);

}

 

BOOL CreateMenuItem(HMENU hMenu, TCHAR *str, UINT uIns, UINT uCom, HMENU hSubMenu, BOOL flag, UINT fType)

{

MENUITEMINFO mii;

mii.cbSize = sizeof(MENUITEMINFO);

mii.fMask = MIIM_STATE | MIIM_TYPE | MIIM_SUBMENU | MIIM_ID;

mii.fType = fType;

mii.fState= MFS_ENABLED;

mii.dwTypeData = str;

mii.cch = sizeof(str);

mii.wID = uCom;

mii.hSubMenu = hSubMenu;

return InsertMenuItem(hMenu, uIns, flag, &mii);

}

 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch (msg)

{

case WM_COMMAND:

{

switch (LOWORD(wParam))

{

case CM_EDIT_CUT:

{ MessageBox(hwnd, TEXT(""), TEXT(""), MB_OK); return 0; }

case CM_EDIT_COPY:

{ MessageBox(hwnd, TEXT(""), TEXT(""), MB_OK); return 0; }

case CM_EDIT_PASTE:

{ MessageBox(hwnd, TEXT(""), TEXT(""), MB_OK); return 0; }

}

return 0;

}

case WM_RBUTTONDOWN:

{

//

DWORD xyPos = GetMessagePos();

WORD xPos = LOWORD(xyPos),

yPos = HIWORD(xyPos);

HMENU hFloatMenu = CreatePopupMenu();

int i=0;

CreateMenuItem(hFloatMenu, TEXT(""), i++, CM_EDIT_CUT, NULL, FALSE, MFT_STRING);

CreateMenuItem(hFloatMenu, TEXT(""), i++, CM_EDIT_COPY, NULL, FALSE, MFT_STRING);

CreateMenuItem(hFloatMenu, TEXT(""), i++, CM_EDIT_PASTE, NULL, FALSE, MFT_STRING);

//

TrackPopupMenu(hFloatMenu, TPM_CENTERALIGN | TPM_LEFTBUTTON | TPM_VCENTERALIGN, xPos, yPos, 0, hwnd, NULL);

DestroyMenu(hFloatMenu);

return 0;

}

case WM_DESTROY: { PostQuitMessage(0); return 0; }

}

return DefWindowProc(hwnd, msg, wParam, lParam);

}

 

WM_RBUTTONDOWN. lParam . TrackPopupMenu . , . GetMessagePos xPos yPos :

 

xyPos = GetMessagePos();

xPos = LOWORD(xyPos);

yPos = HIWORD(xyPos);

 

.

:

 

TrackPopupMenu(hFloatMenu,

TPM_CENTERALIGN | TPM_LEFTBUTTON | TPM_VCENTERALIGN,

xPos, yPos, 0, hwnd, NULL);

 

xPos, yPos , "" .

, WM_COMMAND . . .

. " " . .

WM_COMMAND wParam , wParam 1.

. , " Alt+F4 " Alt+F4. Alt F4 " Alt+F4 " .

. .

CreateAcceleratorTable :

 

HACCEL CreateAcceleratorTable(LPACCEL lpaccl, int cEntries);

 

lpaccl ACCEL, , a cEntries lpaccl. , NULL.

CreateAcceleratorTable . DestroyAcceleratorTable.

ACCEL :

 

typedef struct {

BYTE fVirt;

WORD key;

WORD cmd;

} ACCEL;

 

ACCEL:

1. fVirt :

FALT key Alt
FCONTROL key Ctrl
FNOINVERT , , . , , ,
FSHIFT key Shift
FVIRTKEY key . FVIRTKEY , , key ASCII

2. key ASCII. . 4.1.

3. cmd . , WM_COMMAND WM_SYSCOMMAND. wParam cmd.

4.1.

0x0  
VK_LBUTTON ( ) 0x1  
VK_RBUTTON ( ) 0x2  
VK_CANCEL 0x3 <Control + Break>
VK_MBUTTON ( ) 0x4  
0x5 0x7  
VK_BACK 0x8 <Backspace>
VK_TAB 0x9 <Tab>
0xa-0xb  
VK_CLEAR 0xc <5> <Num Lock>
VK_RETURN 0xd <Enter>
0xe 0xf  
VK_SHIFT 0x10 <Shift>
VK_CONTROL 0x11 <Control>
VK_MENU 0x12 <Alt>
VK_PAUSE 0x13 <Pause>
VK_CAPITAL 0x14 <Caps Lock>
He 0x15 0x1a  
VK_ESCAPE 1b <Esc>
He 0x1c 0x1f  
VK_SPACE 0x20
VK_PRIOR 0x21 <PgUp>
VK_NEXT 0x22 <PgDn>
VK_END 0x23 <End>
VK_HOME 0x24 <Home>
VK_LEFT 0x25 <Left>
VK_UP 0x26 <Up>
VK_RIGHT 0x27 <Right>
VK_DOWN 0x28 <Down>
VK_SELECT 0x29  
VK_PRINT 0x2a  
VK_EXECUTE 0x2b  
VK_SNAPSHOT 0x2c <PrtSc>
VK_INSERT 0x2d <Insert>
VK_DELETE 0x2e <Delete>
VK_HELP 0x2f  
He 0x30 <0>
- - - 0x31 <1>
- - - 0x32 <2>
- - - 0x33 <3>
- - - 0x34 <4>
- - - 0x35 <5>
- - - 0x36 <6>
- - - 0x37 <7>
- - - 0x38 <8>
- - - 0x39 <9>
- - - 0x3a-0x40  
- - - 0x41 <A>
- - - 0x42 <B>
- - - 0x43 <C>
- - - 0x44 <D>
- - - 0x45 <E>
- - - 0x46 <F>
- - - 0x47 <G>
- - - 0x48 <H>
- - - 0x49 <I>
- - - 0x4a <J>
- - - 0x4b <K>
- - - 0x4c <L>
- - - 0x4d <M>
- - - 0x4e <N>
- - - 0x4f <O>
- - - 0x50 <P>
- - - 0x51 <Q>
- - - 0x52 <R>
- - - 0x53 <S>
- - - 0x54 <T>
- - - 0x55 <U>
- - - 0x56 <V>
- - - 0x57 <W>
- - - 0x58 <X>
- - - 0x59 <Y>
- - - 0x5a <Z>
- - - 0x5b- 0x5f  
VK_NUMPAD0 0x60 <0>
VK_NUMPAD1 0x61 <1>
VK_NUMPAD2 0x62 <2>
VK_NUMPAD3 0x63 <3>
VK_NUMPAD4 0x64 <4>
VK_NUMPAD5 0x65 <5>
VK_NUMPAD6 0x66 <6>
VK_NUMPAD7 0x67 <7>
VK_NUMPAD8 0x68 <8>
VK_NUMPAD9 0x69 <9>
VK_MULTIPLAY 0x6a <*>
VK_ADD 0x6b <+>
VK_SEPARATOR 0x6c  
VK_SUBTRACT 0x6d <->
VK_DECIMAL 06e 0
VK_DIVIDE 0x6f </>
VK_F1 0x70 <F1>
VK_F2 0x71 <F2>
VK_F3 0x72 <F3>
VK_F4 0x73 <F4>
VK_F5 0x74 <F5>
VK_F6 0x75 <F6>
VK_F7 0x76 <F7>
VK_F8 0x77 <F8>
VK_F9 0x78 <F9>
VK_F10 0x79 <F10>
VK_F11 0x7 <F11>
VK_F12 0x7b <F12>
VK_F13 0x7  
VK_F14 0x7d  
VK_F15 07  
VK_F16 0x7 f  
He 0x80 0x8f  
VK_NUMLOCK 0x90 <Num Lock>
VK_SCROLL 0x91 <Scroll Lock>
He 0x92 0xb9  
- - - 0xba ;
- - - 0xbb + =
- - - 0xbc , <
- - - 0xbd - _
- - - 0xbe . >
- - - 0xbf /?
- - - 0xc0 ` ~
- - - 0xc1 0xda  
- - - 0xdb [ {
- - - 0xdc \ |
- - - 0xdd ] }
- - - 0xde ' "

 

. .

.

 

#define CM_FILE_NEW 1000

#define CM_FILE_OPEN 1001

#define CM_FILE_SAVE 1002

#define CM_FILE_QUIT 1003

#define CM_EDIT_CUT 2000

#define CM_EDIT_PASTE 2001

#define CM_EDIT_COPY 2002

#define CM_EDIT_DEL 2003

 

HACCEL CreateAccelTable(void)

{

//

ACCEL Accel[8];

//

Accel[0].fVirt = FVIRTKEY | FCONTROL;

Accel[0].key = 0x4e;

Accel[0].cmd = CM_FILE_NEW;

//

Accel[1].fVirt = FVIRTKEY | FCONTROL;

Accel[1].key = 0x4f;

Accel[1].cmd = CM_FILE_OPEN;

//

Accel[2].fVirt = FVIRTKEY | FCONTROL;

Accel[2].key = 0x53;

Accel[2].cmd = CM_FILE_SAVE;

//

Accel[3].fVirt = FVIRTKEY | FALT;

Accel[3].key = 0x73;

Accel[3].cmd = CM_FILE_QUIT;

//

Accel[4].fVirt = FVIRTKEY | FCONTROL;

Accel[4].key =0x58;

Accel[4].cmd = CM_EDIT_CUT;

//

Accel[5].fVirt = FVIRTKEY | FCONTROL;

Accel[5].key = 0x56;

Accel[5].cmd = CM_EDIT_PASTE;

//

Accel[6].fVirt = FVIRTKEY | FCONTROL;

Accel[6].key = 0x43;

Accel[6].cmd = CM_EDIT_COPY;

//

Accel[7].fVirt = FVIRTKEY;

Accel[7].key = 0x2e;

Accel[7].cmd = CM_EDIT_DEL;

return CreateAcceleratorTabIe((LPACCEL)Accel, 8);

}

 

.

1. , :

 

#define CM_FILE_NEW 1000

...

#define CM_EDIT_DEL 2003

 

2. , , . :

 

HACCEL CreateAccelTable(void)

 

2.1. :

 

ACCEL l[8];

 

2.2. . , :

 

//

Accel[0].fVirt = FVIRTKEY | FCONTROL;

Accel[0].key = 04;

Accel[0].cmd = CM_FILE_NEW;

 

, . " " " " CM_FILE_NEW WM_COMMAND wParam, CM_FILE_NEW.

(, . .) Ctrl+N. " ", fVirt FCONTROL. , , key, Ctrl. key 04. . 4.1, <N>.

, <N> Ctrl, <Caps Lock>, key . fVirt FVIRTKEY. . , ASCII <Caps Lock>.

.

2.3. CreateAcceleratorTable:

 

CreateAcceleratorTable((LPACCEL)Accel, 8);

 

, NULL.

2.4. CreateAcceleratorTable CreateAccelTable:

 

return CreateAcceleratorTable((LPACCEL)Accel, 8);

 

, TranslateAccelerator:

 

int TranslateAccelerator(HWND hwnd, HACCEL hAccTable, LPMSG lpMsg);

 

WM_KEYDOWN WM_SYSKEYDOWN WM_COMMAND WM_SYSCOMMAND WM_COMMAND WM_SYSCOMMAND hwnd. . .

:

1. hwnd .

2. hAccTable . LoadAccelerators CreateAcceleratorTable.

3. lpMsg MSG, GetMessage PeekMessage.

TranslateAccelerator (, ) wParam WM_COMMAND WM_SYSCOMMAND 1.

, , WM_SYSCOMMAND. WM_COMMAND.

TranslateAccelerator , , . TranslateMessage DispatchMessage.

:

1. , WM_INITMENU WM_INITMENUPOPUP , .

2. WM_INITMENU WM_INITMENUPOPUP :

- ;

- ;

- ;

- .

3. TranslateAccelerator ( , ), TranslateAccelerator WM_KEYUP WM_KEYDOWN WM_SYSKEYUP WM_SYSKEYDOWN.

4. TranslateAccelerator , WM_COMMAND, .

:

 

HACCEL hAccel=CreateAccelTable();

...

while (GetMessage(&msg, 0, 0, 0))

{

if (!hAccel ||!TranslateAccelerator(hwnd, hAccel, &msg))

{

TranslateMessage(&msg); DispatchMessage(&msg);

}

}

 

hAccel . hAccel NULL, TranslateAccelerator. , , WM_COMMAND WM_SYSCOMMAND , .

wParam , . wParam 1 , , 0 , .

. , . .

4.6. .

#include <windows.h>

#include <tchar.h>

 

#define CM_FILE_NEW 1000

#define CM_FILE_OPEN 1001

#define CM_FILE_SAVE 1002

#define CM_FILE_QUIT 1003

#define CM_EDIT_CUT 2000

#define CM_EDIT_PASTE 2001

#define CM_EDIT_COPY 2002

#define CM_EDIT_DEL 2003

#define CM_HELP_HELP 3000

#define CM_HELP_ABOUT 3001

 

BOOL RegClass(WNDPROC, LPCTSTR, UINT);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HACCEL CreateAccelTable(void);

 

HINSTANCE hInstance;

TCHAR szClass[] = TEXT("AccelClass");

 

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)

{

MSG msg;

HWND hwnd;

hInstance = hInst;

if (!RegClass(WndProc, szClass, COLOR_WINDOW)) return FALSE;

hwnd = CreateWindow(szClass, TEXT(""), WS_OVERLAPPEDWINDOW | WS_VISIBLE,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInstance, NULL);

if (!hwnd) return FALSE;

HACCEL hAccel = CreateAccelTable();

while(GetMessage(&msg, 0, 0, 0))

{

if (!hAccel ||!TranslateAccelerator(hwnd, hAccel, &msg))

{ TranslateMessage(&msg); DispatchMessage(&msg); }

}

DestroyAcceleratorTable(hAccel);

return msg.wParam;

}

 

BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)

{

WNDCLASS wc;

wc.style = wc.cbClsExtra = wc.cbWndExtra = 0;

wc.lpfnWndProc = Proc;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = (HBRUSH)(brBackground+1);

wc.lpszMenuName = NULL;

wc.lpszClassName = szName;

return (RegisterClass(&wc)!= 0);

}

 

BOOL CreateMenuItem(HMENU hMenu, TCHAR *str, UINT uIns, UINT uCom, HMENU hSubMenu, BOOL flag, UINT fType)

{

MENUITEMINFO mii;

mii.cbSize = sizeof(MENUITEMINFO);

mii.fMask = MIIM_STATE | MIIM_TYPE | MIIM_SUBMENU | MIIM_ID;

mii.fType = fType;

mii.fState= MFS_ENABLED;

mii.dwTypeData = str;

mii.cch = sizeof(str);

mii.wID = uCom;

mii.hSubMenu = hSubMenu;

return InsertMenuItem(hMenu, uIns, flag, &mii);

}

 

HACCEL CreateAccelTable(void)

{

//

ACCEL Accel[8];

//

Accel[0].fVirt= FVIRTKEY | FCONTROL;

Accel[0].key = 0x4e;

Accel[0].cmd = CM_FILE_NEW;

//

Accel[1].fVirt= FVIRTKEY | FCONTROL;

Accel[1].key = 0x4f;

Accel[1].cmd = CM_FILE_OPEN;

//

Accel[2].fVirt= FVIRTKEY | FCONTROL;

Accel[2].key = 0x53;

Accel[2].cmd = CM_FILE_SAVE;

//

Accel[3].fVirt= FVIRTKEY | FALT;

Accel[3].key = 0x73;

Accel[3].cmd = CM_FILE_QUIT;

//

Accel[4].fVirt= FVIRTKEY | FCONTROL;

Accel[4].key = 0x58;

Accel[4].cmd = CM_EDIT_CUT;

//

Accel[5].fVirt= FVIRTKEY | FCONTROL;

Accel[5].key = 0x56;

Accel[5].cmd = CM_EDIT_PASTE;

//

Accel[6].fVirt= FVIRTKEY | FCONTROL;

Accel[6].key = 0x43;

Accel[6].cmd = CM_EDIT_COPY;

//

Accel[7].fVirt= FVIRTKEY;

Accel[7].key = 0x2e;

Accel[7].cmd = CM_EDIT_DEL;

return CreateAcceleratorTable((LPACCEL)Accel, 8);

}

 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

static HMENU hMainMenu, hFileMenu, hEditMenu, hHelpMenu;

switch (msg)

{

case WM_CREATE:

{

hMainMenu = CreateMenu();

SetMenu(hwnd, hMainMenu);

// ""

hFileMenu = CreatePopupMenu();

int i=0; //

CreateMenuItem(hFileMenu, TEXT("&\tCtrl+N"), i++, CM_FILE_NEW, NULL, FALSE, MFT_STRING);

CreateMenuItem(hFileMenu, TEXT("&\t Ctrt+O"), i++, CM_FILE_OPEN, NULL, FALSE, MFT_STRING);

CreateMenuItem(hFileMenu, TEXT("&Coxpa\t Ctrl+S"), i++, CM_FILE_SAVE, NULL, FALSE, MFT_STRING);

CreateMenuItem(hFileMenu, NULL, i++, 0, NULL, FALSE, MFT_SEPARATOR);

CreateMenuItem(hFileMenu, TEXT("&\t Alt+F4"), i++, CM_FILE_QUIT, NULL, FALSE, MFT_STRING);

hEditMenu = CreatePopupMenu();

i=0; //

CreateMenuItem(hEditMenu, TEXT("&\t Ctrl+X"), i++, CM_EDIT_CUT, NULL, FALSE, MFT_STRING);

CreateMenuItem(hEditMenu, TEXT("B&\t Ctrl+V"), i++, CM_EDIT_PASTE, NULL, FALSE, MFT_STRING);

CreateMenuItem(hEditMenu, TEXT("&\t Ctrl+C"), i++, CM_EDIT_COPY, NULL, FALSE, MFT_STRING);

CreateMenuItem(hEditMenu, TEXT("&\t Delete"), i++, CM_EDIT_DEL, NULL, FALSE, MFT_STRING);

hHelpMenu = CreatePopupMenu();

i=0; //

CreateMenuItem(hHelpMenu, TEXT("&"), i++, CM_HELP_HELP, NULL, FALSE, MFT_STRING);

CreateMenuItem(hHelpMenu, NULL, i++, 0, NULL, FALSE, MFT_SEPARATOR);

CreateMenuItem(hHelpMenu, TEXT("& "), i++, CM_HELP_ABOUT, NULL, FALSE, MFT_STRING);

//

i=0; //

CreateMenuItem(hMainMenu, TEXT("&"), i++, 0, hFileMenu, FALSE, MFT_STRING);

CreateMenuItem(hMainMenu, TEXT("&"), i++, 0, hEditMenu, FALSE, MFT_STRING);

CreateMenuItem(hMainMenu, TEXT("&"), i++, 0, hHelpMenu, FALSE, MFT_STRING);

DrawMenuBar(hwnd);

return 0;

}

case WM_COMMAND:

{

TCHAR str[30]={0};

if (HIWORD(wParam)==1)

_tcscpy(str, TEXT(" "));

else _tcscpy(str, TEXT(" "));

switch (LOWORD(wParam))

{

case CM_FILE_NEW:

{ MessageBox(hwnd, TEXT(""), str, MB_OK); return 0; }

case CM_FILE_OPEN:

{ MessageBox(hwnd, TEXT(""), str, MB_OK); return 0; }

case CM_FILE_SAVE:

{ MessageBox(hwnd, TEXT(""), str, MB_OK); return 0; }

case CM_FILE_QUIT: { DestroyWindow(hwnd); return 0; }

case CM_EDIT_CUT:

{ MessageBox(hwnd, TEXT(""), str, MB_OK); return 0; }

case CM_EDIT_PASTE:

{ MessageBox(hwnd, TEXT(""), str, MB_OK); return 0; }

case CM_EDIT_COPY:

{ MessageBox(hwnd, TEXT(""), str, MB_OK); return 0; }

case CM_EDIT_DEL:

{ MessageBox(hwnd, TEXT(""), str, MB_OK); return 0; }

case CM_HELP_HELP:

{ MessageBox(hwnd, TEXT(""), TEXT(""), MB_OK); return 0; }

case CM_HELP_ABOUT:

{ MessageBox(hwnd, TEXT(" "), TEXT(" "), MB_OK); return 0; }

}

}

case WM_DESTROY: { PostQuitMessage(0); return 0;}

}

return DefWindowProc(hwnd, msg, wParam, lParam);

}

 

, .

1. , :

 

HACCEL hAccel = CreateAccelTable();

while(GetMessage(&msg, 0, 0, 0))

{

if (!hAccel ||!TranslateAccelerator(hwnd, hAccel, &msg))

{ TranslateMessage(&msg); DispatchMessage(&msg); }

}

DestroyAcceleratorTable(hAccel);

 

. . , . ,

 

HACCEL hAccel;

 

. , CreateAccelTable1, :

 

hAccel=CreateAccelTable1();

 

2. CreateAccelTable . , .

3. wParam. WM_COMMAND 1.

, :

 

char str[30];

if (HIWORD(wParam)==1)

strcpy(str, " ");

else strcpy(str, " ");

1. .

2. , , .

3. 4.1 TranslateMessage?

4. WM_DESTROY?

5. WM_COMMAND , ?

6. ?

7. ?

8. , ?

9. ?

1. " ", " " "". . , ShowCursor(0); ShowCursor(1).

2. "" . . .

3. "" "". "" "", "" ( ). "", "" "".

4. "", "", "" "". "" "" "" "", "" "", "" "". .

5. "" "", "", "", "", "" "", "" "", "" "". "" "". .

6. "" . . .

7. "" "", "" "". "" "" , "" "". .

8. "" "", "" "". "" "" , "" ; . .

9. "" . . .

10. , .

11. . .

HCURSOR hCursor=LoadCursor(NULL, IDC_CROSS); SetCursor(hCursor);

12. "" "", "" "" "" "" " ". "" "", " 1", " 2"... "..." " 1", " 2"...

13. . "" "" "". "", "".

14. "", "", "", "". "" : "50%", "100%", "150%" "200%", .

15. . "" "", "", "-" "". "-" .

16. "" "", "" "". "" "" "" "", "" "". .

17. "", "", "" "", . "" "" "" "", "" "", . .

18. "" . .

19. "" "", "", "- " "". "" "" "". "" "-". .

20. "" "". "" "", "" "", "" "". "" . .

21. . "" "" "" (). "" "" "", "" "". "" "". "" .

22. . , , .

23. "", . "", . .

24. "" Windows "" . , . .

25. , , .

 





:


: 2016-09-06; !; : 570 |


:

:

, , .
==> ...

2108 - | 1780 -


© 2015-2024 lektsii.org - -

: 0.369 .