我的加速键程序出什么问题了,能帮我改一个成功的吗?
加速键.h
#define IDA_TEST 10
#define IDA_TESTT 11
#define IDA_TESTTT 12
#define IDA_TESTTTT 13
#define IDA_TESTTTTT 14
加速键.rc
#include <windows.h>
#include "加速键.h"
MyAccel MENU
{
POPPU "加速键测试"
{
MENUITEM "TEST",IDA_TEST
MENUITEM "TSETT",IDA_TESTT
MENUITEM "TESTTT",IDA_TESTTT
MENUITEM "TESTTTT",IDA_TESTTTT
MENUITEM "TESTTTTT",IDA_TESTTTTT
}
}
MyAccel ACCELERATORS
{
"^C", IDA_TEST, ASCII
"A", IDA_TESTT, ASCII, SHIFT
"B", IDA_TESTTT, ASCII, ALT
"D" IDA_TESTTTT, ASCII, SHIFT ,ALT
VK_F1, IDA_TESTTTTT, VIRTKEY
}加速键.cpp
#include <windows.h>
#include "加速键.h"LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam ,LPARAM lParam)
{
int i;
switch(message)
{
case WM_COMMAND:
i=LOWORD(wParam);
switch(i)
{
case IDA_TEST:
MessageBox(hWnd,"TEST","成功",MB_OK);
break;
case IDA_TESTT:
MessageBox(hWnd,"TESTT","成功",MB_OK);
break;
case IDA_TESTTT:
MessageBox(hWnd,"TESTTT","成功",MB_OK);
break;
case IDA_TESTTTT:
MessageBox(hWnd,"TESTTTT","成功",MB_OK);
break;
case IDA_TESTTTTT:
MessageBox(hWnd,"TESTTTTT","成功",MB_OK);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam); }
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hpInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG msg;
HACCEL hAccel;
WNDCLASS wc;
char lpszClassName[]="加速键";
char lpszTitle[]="加速键";
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName=lpszClassName;
wc.lpszMenuName=0;
wc.style=0;
hAccel=LoadAccelerators(hInstance,"MyAccel");
if(!RegisterClass(&wc))
{
MessageBox(NULL,"注册失败",NULL,MB_OK);
return 0;
}
hWnd=CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(hWnd,hAccel,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} return 0;
}
加速键.h
#define IDA_TEST 10
#define IDA_TESTT 11
#define IDA_TESTTT 12
#define IDA_TESTTTT 13
#define IDA_TESTTTTT 14
加速键.rc
#include <windows.h>
#include "加速键.h"
MyAccel MENU
{
POPPU "加速键测试"
{
MENUITEM "TEST",IDA_TEST
MENUITEM "TSETT",IDA_TESTT
MENUITEM "TESTTT",IDA_TESTTT
MENUITEM "TESTTTT",IDA_TESTTTT
MENUITEM "TESTTTTT",IDA_TESTTTTT
}
}
MyAccel ACCELERATORS
{
"^C", IDA_TEST, ASCII
"A", IDA_TESTT, ASCII, SHIFT
"B", IDA_TESTTT, ASCII, ALT
"D" IDA_TESTTTT, ASCII, SHIFT ,ALT
VK_F1, IDA_TESTTTTT, VIRTKEY
}加速键.cpp
#include <windows.h>
#include "加速键.h"LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam ,LPARAM lParam)
{
int i;
switch(message)
{
case WM_COMMAND:
i=LOWORD(wParam);
switch(i)
{
case IDA_TEST:
MessageBox(hWnd,"TEST","成功",MB_OK);
break;
case IDA_TESTT:
MessageBox(hWnd,"TESTT","成功",MB_OK);
break;
case IDA_TESTTT:
MessageBox(hWnd,"TESTTT","成功",MB_OK);
break;
case IDA_TESTTTT:
MessageBox(hWnd,"TESTTTT","成功",MB_OK);
break;
case IDA_TESTTTTT:
MessageBox(hWnd,"TESTTTTT","成功",MB_OK);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam); }
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hpInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG msg;
HACCEL hAccel;
WNDCLASS wc;
char lpszClassName[]="加速键";
char lpszTitle[]="加速键";
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName=lpszClassName;
wc.lpszMenuName=0;
wc.style=0;
hAccel=LoadAccelerators(hInstance,"MyAccel");
if(!RegisterClass(&wc))
{
MessageBox(NULL,"注册失败",NULL,MB_OK);
return 0;
}
hWnd=CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(hWnd,hAccel,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} return 0;
}
65, ID_ACCEL2, ASCII ; SHIFT+A [/code]
要是用"A", 后面就不要用ASCII了一个例子:[code=BatchFile]FileAccel ACCELERATORS
BEGIN
VK_F12, IDM_OPEN, CONTROL, VIRTKEY ; CTRL+F12
VK_F4, IDM_CLOSE, ALT, VIRTKEY ; ALT+F4
VK_F12, IDM_SAVE, SHIFT, VIRTKEY ; SHIFT+F12
VK_F12, IDM_SAVEAS, VIRTKEY ; F12
END FilePopup MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New..", IDM_NEW
MENUITEM "&Open\tCtrl+F12", IDM_OPEN
MENUITEM "&Close\tAlt+F4" IDM_CLOSE
MENUITEM "&Save\tShift+F12", IDM_SAVE
MENUITEM "Save &As...\tF12", IDM_SAVEAS
END
END[/code]你查一下你的LoadAcceleratror()成功了吗?
{
if(!IsDialogMessage(hWnd,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
楼上的答案都不对
更正:
MyAccel MENU
{
POPUP "加速键测试" ;写成POPPU了
{
MENUITEM "TEST",IDA_TEST
MENUITEM "TSETT",IDA_TESTT
MENUITEM "TESTTT",IDA_TESTTT
MENUITEM "TESTTTT",IDA_TESTTTT
MENUITEM "TESTTTTT",IDA_TESTTTTT
}
} 我用楼上的方法改了我的前一个菜单程序,正确了,但是,这个程序咋改都不对,想知道这个程序的问题,谢谢,
也没有为你要创建的窗口指定窗口实例菜单
#include <windows.h>
#include "加速键.h"
MyAccel MENU
BEGIN
POPUP "加速键测试"
BEGIN
MENUITEM "TEST", IDA_TEST
MENUITEM "TSETT", IDA_TESTT
MENUITEM "TESTTT", IDA_TESTTT
MENUITEM "TESTTTT", IDA_TESTTTT
MENUITEM "TESTTTTT", IDA_TESTTTTT
END
ENDMyAccel ACCELERATORS
BEGIN
"^C", IDA_TEST, ASCII
"A", IDA_TESTT, VIRTKEY, SHIFT
"B", IDA_TESTTT, VIRTKEY, ALT
"D", IDA_TESTTTT, VIRTKEY, SHIFT, ALT
VK_F1, IDA_TESTTTTT, VIRTKEY
END