|
|
20鱼币
我在windows程序设计这本书上发现
case WM_CREATE:
hMenu = LoadMenu (hInst, szAppName) ;
hMenu = GetSubMenu (hMenu, 0) ;
return 0 ;
case WM_RBUTTONUP:
point.x = LOWORD (lParam) ;
point.y = HIWORD (lParam) ;
ClientToScreen (hwnd, &point) ;
TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, point.x, point.y,
0, hwnd, NULL) ;
return 0 ;这效果是这样
为什么同样的代码在我的程序里面编译出来是不行的?
我这是获取了第一个菜单的弹出菜单了 而这本书是直接获取了整个菜单项 这是神马原因?下面是代码,如果这样实在不行的话,希望站出来一位大神教教我实现动态弹出整个菜单项!
#include <windows.h>
#include "resource.h"
#define ID_TIMER 1
LRESULT CALLBACK WndProc(HWND ,UINT ,WPARAM ,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
TCHAR szAppName[5]=TEXT("Menu");
HWND hwnd;
WNDCLASS wndclass;
MSG msg;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH);
wndclass.hCursor=::LoadCursor(0,IDC_ARROW);
wndclass.hIcon=::LoadIcon(0,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=0;
wndclass.style=CS_VREDRAW | CS_HREDRAW;
if(!::RegisterClass(&wndclass))
{
::MessageBox(0,TEXT("May it Need WinNT"),szAppName,MB_ICONERROR);
return 0;
}
hwnd=::CreateWindow(szAppName,TEXT("Menu"),WS_OVERLAPPEDWINDOW ,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
0,/*::LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1))*/0,hInstance,0);
::ShowWindow(hwnd,iCmdShow);
::UpdateWindow(hwnd);
while(::GetMessage(&msg,0,0,0))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static int iColor[5] = { WHITE_BRUSH , GRAY_BRUSH , LTGRAY_BRUSH ,
DKGRAY_BRUSH ,BLACK_BRUSH };
static int iSelection = IDM_BKGND_WHITE ;
static HMENU hMenu, hMenuPopup;
POINT pt;
switch(message)
{
case WM_CREATE:
hMenu = ::LoadMenu(((LPCREATESTRUCT)lParam)->hInstance,MAKEINTRESOURCE(IDR_MENU1));
hMenu = ::GetSubMenu(hMenu, 0);
return 0;
case WM_RBUTTONUP:
pt.x=LOWORD(lParam);
pt.y=HIWORD(lParam);
::ClientToScreen(hwnd, &pt);
::TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, 0);
return 0;
case WM_COMMAND:
hMenu=::GetMenu(hwnd);
switch(LOWORD(wParam))
{
case IDM_FILE_NEW:
case IDM_FILE_OPEN:
case IDM_FILE_SAVE:
case IDM_FILE_SAVE_AS:
::MessageBeep(-1);
return 0;
case IDM_APP_EXIT:
::SendMessage(hwnd,WM_CLOSE,0,0);
return 0;
case IDM_EDIT_UNDO:
case IDM_EDIT_CUT:
case IDM_EDIT_COPY:
case IDM_EDIT_PASTE:
case IDM_EDIT_CLEAR:
::MessageBeep(0);
return 0;
case IDM_BKGND_WHITE:
case IDM_BKGND_GRAY:
case IDM_BKGND_LTGRAY:
case IDM_BKGND_BLACK:
case IDM_BKGND_DKGRAY:
::CheckMenuItem(hMenu,iSelection,MF_UNCHECKED);
iSelection=LOWORD(wParam);
::CheckMenuItem(hMenu,iSelection,MF_CHECKED);
::SetClassLong(hwnd,GCL_HBRBACKGROUND,
(long)::GetStockObject(iColor[iSelection-IDM_BKGND_WHITE]));
::InvalidateRect(hwnd,0,true);
return 0;
case IDM_TIMER_START:
if(::SetTimer(hwnd,ID_TIMER,1000,0))
{
::EnableMenuItem(hMenu , IDM_TIMER_START , MF_GRAYED);
::EnableMenuItem(hMenu , IDM_TIMER_STOP , MF_ENABLED);
}
return 0;
case IDM_TIMER_STOP:
::KillTimer(hwnd,ID_TIMER);
::EnableMenuItem(hMenu , IDM_TIMER_START , MF_ENABLED);
::EnableMenuItem(hMenu , IDM_TIMER_STOP , MF_GRAYED);
return 0;
case IDM_APP_HELP:
TCHAR szBuffer[5];
int iLength;
::GetClassName(hwnd,szBuffer,5);
::MessageBox(hwnd,TEXT("Help Not Yet Prepared"),szBuffer,MB_OK);
return 0;
case IDM_APP_ABOUT:
::MessageBox(hwnd , TEXT("It's My Program!") , TEXT("Luo Xuan") , MB_OK);
return 0;
}
break;
case WM_TIMER:
//::MessageBox(0, TEXT("Ca"), 0, MB_OK);
::MessageBeep(-1);
return 0;
case WM_DESTROY:
::PostQuitMessage(0);
return 0;
}
return ::DefWindowProc(hwnd , message , wParam , lParam);
}
|
-
-
|