怎么创建菜单(Menu) 呵呵,好久没用API了,都忘了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // CRMENU.C// Stefano Maruzzi 1996// LIST06-04// CreateMenu() #include <windows.h>#include "resource.h"// definitions and macros#define MARGIN 10#define BORDERWIDTH 5// function prototypesHMENU MakeTheMenu( HWND hwnd, HINSTANCE hInstance) ;LRESULT WINAPI ClientWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) ;int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow){ HWND hwnd ; MSG msg ; char szClassName[ 20] ; char szWindowTitle[ 25] ; WNDCLASSEX wc ; // loading the class name LoadString( hInstance, ST_CLASSNAME, szClassName, sizeof( szClassName)) ; // loading the window title LoadString( hInstance, ST_WINDOWTITLE, szWindowTitle, sizeof( szWindowTitle)) ; wc.cbSize = sizeof( wc) ; wc.style = CS_VREDRAW | CS_HREDRAW ; wc.lpfnWndProc = ClientWndProc ; wc.cbClsExtra = 0 ; wc.cbWndExtra = 0 ; wc.hInstance = hInstance ; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION) ; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION) ; wc.hCursor = LoadCursor( NULL, IDC_ARROW) ; wc.hbrBackground = GetStockObject( WHITE_BRUSH) ; wc.lpszMenuName = NULL ; wc.lpszClassName = szClassName ; if( !RegisterClassEx( &wc)) { MessageBeep( 0) ; return FALSE ; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, szClassName, szWindowTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL) ; ShowWindow( hwnd, SW_SHOWNORMAL) ; // message loop while( GetMessage( &msg, NULL, 0, 0)) { TranslateMessage( &msg) ; DispatchMessage( &msg) ; } return FALSE ;}LRESULT WINAPI ClientWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ // last two colors static WORD wBorder = CL_BLACK ; static WORD wInside = CL_WHITE ; static HANDLE hInstance ; static COLORREF aColors[] = { RGB(0xFF, 0xFF, 0xFF), // white RGB(0x00, 0x00, 0x00), // black RGB(0x00, 0x00, 0xFF), // blue RGB(0xFF, 0x00, 0x00), // red RGB(0xFF, 0x00, 0xFF), // purple RGB(0xFF, 0xFF, 0x00), // yellow -1L // invalid color }; switch( msg) { case WM_COMMAND: switch( LOWORD( wParam)) { case MN_EXIT: PostQuitMessage( 0) ; break ; case MN_BLUEBORDER: case MN_REDBORDER: case MN_BLACKBORDER: case MN_WHITEBORDER: case MN_PURPLEBORDER: case MN_YELLOWBORDER: case MN_NOBORDER: wBorder = LOWORD( wParam) - MN_BORDER ; InvalidateRect( hwnd, NULL, TRUE) ; break ; case MN_WHITEINSIDE: case MN_BLACKINSIDE: case MN_BLUEINSIDE: case MN_REDINSIDE: case MN_PURPLEINSIDE: case MN_YELLOWINSIDE: case MN_NOINSIDE: wInside = LOWORD( wParam) - MN_INSIDE ; InvalidateRect (hwnd, NULL, TRUE) ; break; default: break ; } break ; case WM_CREATE: { hInstance = ((LPCREATESTRUCT)lParam) -> hInstance ; // creating the menu MakeTheMenu( hwnd, hInstance) ; } break ; case WM_CLOSE: PostQuitMessage( 0) ; break ; case WM_PAINT: { HBRUSH hbr, hbrOld ; HPEN hpen, hpenOld ; RECT rc ; HDC hdc; PAINTSTRUCT ps ; hdc = BeginPaint( hwnd, &ps) ; hpen = CreatePen( PS_SOLID, BORDERWIDTH, aColors[wBorder]); hbr = CreateSolidBrush( aColors[ wInside]) ; hbrOld = SelectObject( hdc, hbr) ; hpenOld = SelectObject( hdc, hpen) ; GetClientRect( hwnd, &rc) ; InflateRect( &rc, - MARGIN, - MARGIN) ; Rectangle( hdc, rc.left, rc.top, rc.right, rc.bottom) ; // background is transparent SetBkMode( hdc, TRANSPARENT) ; // delete all the objects SelectObject( hdc, hpenOld) ; SelectObject( hdc, hbrOld) ; DeleteObject( hbr) ; DeleteObject( hpen) ; EndPaint (hwnd, &ps); } break ; default: break ; } return DefWindowProc( hwnd, msg, wParam, lParam) ;} HMENU MakeTheMenu( HWND hwnd, HINSTANCE hInstance){ HMENU hmenu, hmenuColors, hmenuBorder, hmenuInside, hmenuFile ; int i ; CHAR szItem[ 100] ; // main menu hmenu = CreateMenu() ; // border menu hmenuBorder = CreateMenu() ; // loading the strings i = MN_BORDER ; while( LoadString( hInstance, i, szItem, sizeof( szItem))) { AppendMenu( hmenuBorder, 0, i, szItem) ; i++ ; } // interior menu hmenuInside = CreateMenu() ; // loading the strings i = MN_INSIDE ; while( LoadString( hInstance, i, szItem, sizeof( szItem))) { AppendMenu( hmenuInside, 0, i, szItem) ; i++ ; } // File menu hmenuFile = CreateMenu() ; i = MN_FILE ; while( LoadString( hInstance, i, szItem, sizeof( szItem))) { AppendMenu( hmenuFile, 0, i, szItem) ; i++ ; } // Colors menu hmenuColors = CreateMenu() ; AppendMenu( hmenuColors, MF_POPUP, (UINT)hmenuBorder, "&Border") ; AppendMenu( hmenuColors, MF_POPUP, (UINT)hmenuInside, "&Inside") ; // 2 top-level AppendMenu( hmenu, MF_POPUP, (UINT)hmenuFile, "&File") ; AppendMenu( hmenu, MF_POPUP, (UINT)hmenuColors, "&Colors") ; // associate the menu SetMenu( hwnd, hmenu) ; return hmenu ;} //resource.h//{{NO_DEPENDENCIES}}// Microsoft Visual C++ generated include file.// Used by CRMENU.RC//#define ST_CLASSNAME 1000#define ST_WINDOWTITLE 1001// Next default values for new objects// definizioni menu File#define MN_FILE 100#define MN_EXIT MN_FILE + 0// definizioni colori e menuitemID associati#define CL_WHITE 0#define CL_BLACK 1#define CL_BLUE 2#define CL_RED 3#define CL_PURPLE 4#define CL_YELLOW 5#define CL_LAST 5#define CL_NONE 6#define MN_INSIDE 300#define MN_WHITEINSIDE (MN_INSIDE + CL_WHITE)#define MN_BLACKINSIDE (MN_INSIDE + CL_BLACK)#define MN_BLUEINSIDE (MN_INSIDE + CL_BLUE)#define MN_REDINSIDE (MN_INSIDE + CL_RED)#define MN_PURPLEINSIDE (MN_INSIDE + CL_PURPLE)#define MN_YELLOWINSIDE (MN_INSIDE + CL_YELLOW)#define MN_LASTINSIDE (MN_INSIDE + CL_LAST)#define MN_NOINSIDE (MN_INSIDE + CL_NONE)#define MN_BORDER 400#define MN_WHITEBORDER (MN_BORDER + CL_WHITE)#define MN_BLACKBORDER (MN_BORDER + CL_BLACK)#define MN_BLUEBORDER (MN_BORDER + CL_BLUE)#define MN_REDBORDER (MN_BORDER + CL_RED)#define MN_PURPLEBORDER (MN_BORDER + CL_PURPLE)#define MN_YELLOWBORDER (MN_BORDER + CL_YELLOW)#define MN_LASTBORDER (MN_BORDER + CL_LAST)#define MN_NOBORDER (MN_BORDER + CL_NONE) //Microsoft Visual C++ generated resource script.//#include "resource.h"///////////////////////////////////////////////////////////////////////////////// String Table//STRINGTABLE DISCARDABLE BEGIN MN_WHITEBORDER "&White" MN_BLACKBORDER "Blac&k" MN_BLUEBORDER "&Blue" MN_REDBORDER "&Red" MN_PURPLEBORDER "&Purple" MN_YELLOWBORDER "&Yellow" MN_NOBORDER "&None" ST_CLASSNAME "CRMENU" ST_WINDOWTITLE "CreateMenu()"ENDSTRINGTABLE DISCARDABLE BEGIN MN_WHITEINSIDE "&White" MN_BLACKINSIDE "Blac&k" MN_BLUEINSIDE "&Blue" MN_REDINSIDE "&Red"ENDSTRINGTABLE DISCARDABLE BEGIN MN_PURPLEINSIDE "&Purple" MN_YELLOWINSIDE "&Yellow" MN_NOINSIDE "&None"ENDSTRINGTABLE DISCARDABLE BEGIN MN_EXIT "E&xit"END 唉,弄好了,谢谢,我不知道怎么给你加分,我输入密码也没用,好奇怪啊。**********************************************************************#include<windows.h>/*有菜单的例子*/#define ID_EXIT 1LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam); int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nShowCmd){ WNDCLASS wndclass; if(!hPrevInstance){ wndclass.cbClsExtra =0; wndclass.cbWndExtra =0; wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor =0; wndclass.hIcon =0; wndclass.hInstance =hInstance; wndclass.lpfnWndProc = WndProc; wndclass.lpszClassName ="kdf"; wndclass.lpszMenuName = "kdf menu"; wndclass.style =0; } if(!RegisterClass(&wndclass)) return 0; // HMENU hMenu=CreateMenu(); HMENU hSubMenu=CreateMenu(); AppendMenu(hSubMenu,MF_STRING,ID_EXIT,"E&xit"); AppendMenu(hMenu,MF_STRING|MF_POPUP,(UINT)hSubMenu,"&File");// HWND hWnd = CreateWindow(wndclass.lpszClassName ,"柯登峰欢迎你", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,hMenu,hInstance,NULL); if(!hWnd) return 0; ShowWindow(hWnd,nShowCmd); UpdateWindow(hWnd); MSG msg; while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } DestroyMenu(hMenu); DestroyMenu(hSubMenu); return msg.wParam ; } LRESULT CALLBACK WndProc(HWND hWndProc,UINT msg,WPARAM wParam,LPARAM lParam){ switch (msg){ // case WM_COMMAND: switch(LOWORD(wParam)) { case ID_EXIT: PostMessage(hWndProc,WM_CLOSE,0,0); break; } break; // case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWndProc,msg,wParam,lParam); } return 0; } 现在在资源里面建一个菜单,然后使用 LoadMenu() 函数取得菜单句柄,最后使用 SetMenu() 函数给你创建的窗口设置好菜单。当你显示窗口时自然就有菜单了。当然菜单的消息处理函数要你自己添加了!!! VC怎样知道是哪个按钮点击响应的函数 error lnk2019 无法解析的外部符号 关于CLIst问题 本公司诚招WINDOWS NT 系统程序员和项目LEADER,一经录用,待遇丰厚 有关bstr的问题 巨分,如何把一个bmp图像切分成小块矩形。 请问这是怎么回事呀? 怎样才能将图象设为背景? 有关数据库效率问题 C++函数 void*& GetHead() .ps的文档用什么打开? 请问在Vc++中如何编译c的文件,我在编译时老报C1010的错误.
// Stefano Maruzzi 1996// LIST06-04
// CreateMenu()
#include <windows.h>
#include "resource.h"// definitions and macros
#define MARGIN 10
#define BORDERWIDTH 5
// function prototypes
HMENU MakeTheMenu( HWND hwnd, HINSTANCE hInstance) ;
LRESULT WINAPI ClientWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) ;int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hwnd ;
MSG msg ;
char szClassName[ 20] ;
char szWindowTitle[ 25] ;
WNDCLASSEX wc ; // loading the class name
LoadString( hInstance, ST_CLASSNAME, szClassName, sizeof( szClassName)) ;
// loading the window title
LoadString( hInstance, ST_WINDOWTITLE, szWindowTitle, sizeof( szWindowTitle)) ; wc.cbSize = sizeof( wc) ;
wc.style = CS_VREDRAW | CS_HREDRAW ;
wc.lpfnWndProc = ClientWndProc ;
wc.cbClsExtra = 0 ;
wc.cbWndExtra = 0 ;
wc.hInstance = hInstance ;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION) ;
wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION) ;
wc.hCursor = LoadCursor( NULL, IDC_ARROW) ;
wc.hbrBackground = GetStockObject( WHITE_BRUSH) ;
wc.lpszMenuName = NULL ;
wc.lpszClassName = szClassName ; if( !RegisterClassEx( &wc))
{
MessageBeep( 0) ;
return FALSE ;
} hwnd = CreateWindowEx( WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
szClassName,
szWindowTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0,
NULL,
NULL,
hInstance,
NULL) ; ShowWindow( hwnd, SW_SHOWNORMAL) ;
// message loop
while( GetMessage( &msg, NULL, 0, 0))
{
TranslateMessage( &msg) ;
DispatchMessage( &msg) ;
} return FALSE ;
}LRESULT WINAPI ClientWndProc( HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
// last two colors
static WORD wBorder = CL_BLACK ;
static WORD wInside = CL_WHITE ; static HANDLE hInstance ;
static COLORREF aColors[] = {
RGB(0xFF, 0xFF, 0xFF), // white
RGB(0x00, 0x00, 0x00), // black
RGB(0x00, 0x00, 0xFF), // blue
RGB(0xFF, 0x00, 0x00), // red
RGB(0xFF, 0x00, 0xFF), // purple
RGB(0xFF, 0xFF, 0x00), // yellow
-1L // invalid color
};
switch( msg)
{
case WM_COMMAND:
switch( LOWORD( wParam))
{
case MN_EXIT:
PostQuitMessage( 0) ;
break ; case MN_BLUEBORDER:
case MN_REDBORDER:
case MN_BLACKBORDER:
case MN_WHITEBORDER:
case MN_PURPLEBORDER:
case MN_YELLOWBORDER:
case MN_NOBORDER:
wBorder = LOWORD( wParam) - MN_BORDER ;
InvalidateRect( hwnd, NULL, TRUE) ;
break ; case MN_WHITEINSIDE:
case MN_BLACKINSIDE:
case MN_BLUEINSIDE:
case MN_REDINSIDE:
case MN_PURPLEINSIDE:
case MN_YELLOWINSIDE:
case MN_NOINSIDE:
wInside = LOWORD( wParam) - MN_INSIDE ;
InvalidateRect (hwnd, NULL, TRUE) ;
break; default:
break ;
}
break ; case WM_CREATE:
{
hInstance = ((LPCREATESTRUCT)lParam) -> hInstance ; // creating the menu
MakeTheMenu( hwnd, hInstance) ;
}
break ; case WM_CLOSE:
PostQuitMessage( 0) ;
break ; case WM_PAINT:
{
HBRUSH hbr, hbrOld ;
HPEN hpen, hpenOld ;
RECT rc ;
HDC hdc;
PAINTSTRUCT ps ; hdc = BeginPaint( hwnd, &ps) ; hpen = CreatePen( PS_SOLID, BORDERWIDTH, aColors[wBorder]);
hbr = CreateSolidBrush( aColors[ wInside]) ; hbrOld = SelectObject( hdc, hbr) ;
hpenOld = SelectObject( hdc, hpen) ;
GetClientRect( hwnd, &rc) ;
InflateRect( &rc, - MARGIN, - MARGIN) ;
Rectangle( hdc, rc.left, rc.top, rc.right, rc.bottom) ; // background is transparent
SetBkMode( hdc, TRANSPARENT) ; // delete all the objects
SelectObject( hdc, hpenOld) ;
SelectObject( hdc, hbrOld) ;
DeleteObject( hbr) ;
DeleteObject( hpen) ; EndPaint (hwnd, &ps);
}
break ; default:
break ;
}
return DefWindowProc( hwnd, msg, wParam, lParam) ;
} HMENU MakeTheMenu( HWND hwnd, HINSTANCE hInstance)
{
HMENU hmenu, hmenuColors, hmenuBorder, hmenuInside, hmenuFile ;
int i ;
CHAR szItem[ 100] ;
// main menu
hmenu = CreateMenu() ; // border menu
hmenuBorder = CreateMenu() ; // loading the strings
i = MN_BORDER ;
while( LoadString( hInstance, i, szItem, sizeof( szItem)))
{
AppendMenu( hmenuBorder, 0, i, szItem) ;
i++ ;
} // interior menu
hmenuInside = CreateMenu() ; // loading the strings
i = MN_INSIDE ;
while( LoadString( hInstance, i, szItem, sizeof( szItem)))
{
AppendMenu( hmenuInside, 0, i, szItem) ;
i++ ;
} // File menu
hmenuFile = CreateMenu() ; i = MN_FILE ;
while( LoadString( hInstance, i, szItem, sizeof( szItem)))
{
AppendMenu( hmenuFile, 0, i, szItem) ;
i++ ;
} // Colors menu
hmenuColors = CreateMenu() ; AppendMenu( hmenuColors, MF_POPUP, (UINT)hmenuBorder, "&Border") ;
AppendMenu( hmenuColors, MF_POPUP, (UINT)hmenuInside, "&Inside") ; // 2 top-level
AppendMenu( hmenu, MF_POPUP, (UINT)hmenuFile, "&File") ;
AppendMenu( hmenu, MF_POPUP, (UINT)hmenuColors, "&Colors") ; // associate the menu
SetMenu( hwnd, hmenu) ;
return hmenu ;
}
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by CRMENU.RC
//
#define ST_CLASSNAME 1000
#define ST_WINDOWTITLE 1001// Next default values for new objects
// definizioni menu File
#define MN_FILE 100
#define MN_EXIT MN_FILE + 0
// definizioni colori e menuitemID associati
#define CL_WHITE 0
#define CL_BLACK 1
#define CL_BLUE 2
#define CL_RED 3
#define CL_PURPLE 4
#define CL_YELLOW 5
#define CL_LAST 5
#define CL_NONE 6#define MN_INSIDE 300
#define MN_WHITEINSIDE (MN_INSIDE + CL_WHITE)
#define MN_BLACKINSIDE (MN_INSIDE + CL_BLACK)
#define MN_BLUEINSIDE (MN_INSIDE + CL_BLUE)
#define MN_REDINSIDE (MN_INSIDE + CL_RED)
#define MN_PURPLEINSIDE (MN_INSIDE + CL_PURPLE)
#define MN_YELLOWINSIDE (MN_INSIDE + CL_YELLOW)
#define MN_LASTINSIDE (MN_INSIDE + CL_LAST)
#define MN_NOINSIDE (MN_INSIDE + CL_NONE)#define MN_BORDER 400
#define MN_WHITEBORDER (MN_BORDER + CL_WHITE)
#define MN_BLACKBORDER (MN_BORDER + CL_BLACK)
#define MN_BLUEBORDER (MN_BORDER + CL_BLUE)
#define MN_REDBORDER (MN_BORDER + CL_RED)
#define MN_PURPLEBORDER (MN_BORDER + CL_PURPLE)
#define MN_YELLOWBORDER (MN_BORDER + CL_YELLOW)
#define MN_LASTBORDER (MN_BORDER + CL_LAST)
#define MN_NOBORDER (MN_BORDER + CL_NONE)
//
#include "resource.h"/////////////////////////////////////////////////////////////////////////////
//
// String Table
//STRINGTABLE DISCARDABLE
BEGIN
MN_WHITEBORDER "&White"
MN_BLACKBORDER "Blac&k"
MN_BLUEBORDER "&Blue"
MN_REDBORDER "&Red"
MN_PURPLEBORDER "&Purple"
MN_YELLOWBORDER "&Yellow"
MN_NOBORDER "&None"
ST_CLASSNAME "CRMENU"
ST_WINDOWTITLE "CreateMenu()"
ENDSTRINGTABLE DISCARDABLE
BEGIN
MN_WHITEINSIDE "&White"
MN_BLACKINSIDE "Blac&k"
MN_BLUEINSIDE "&Blue"
MN_REDINSIDE "&Red"
ENDSTRINGTABLE DISCARDABLE
BEGIN
MN_PURPLEINSIDE "&Purple"
MN_YELLOWINSIDE "&Yellow"
MN_NOINSIDE "&None"
ENDSTRINGTABLE DISCARDABLE
BEGIN
MN_EXIT "E&xit"
END
**********************************************************************
#include<windows.h>/*有菜单的例子*/
#define ID_EXIT 1LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nShowCmd){
WNDCLASS wndclass;
if(!hPrevInstance){
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor =0;
wndclass.hIcon =0;
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszClassName ="kdf";
wndclass.lpszMenuName = "kdf menu";
wndclass.style =0;
}
if(!RegisterClass(&wndclass)) return 0; //
HMENU hMenu=CreateMenu();
HMENU hSubMenu=CreateMenu();
AppendMenu(hSubMenu,MF_STRING,ID_EXIT,"E&xit");
AppendMenu(hMenu,MF_STRING|MF_POPUP,(UINT)hSubMenu,"&File");
//
HWND hWnd = CreateWindow(wndclass.lpszClassName ,"柯登峰欢迎你", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,hMenu,hInstance,NULL);
if(!hWnd) return 0; ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} DestroyMenu(hMenu);
DestroyMenu(hSubMenu);
return msg.wParam ;
}
LRESULT CALLBACK WndProc(HWND hWndProc,UINT msg,WPARAM wParam,LPARAM lParam){
switch (msg){
//
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_EXIT:
PostMessage(hWndProc,WM_CLOSE,0,0);
break;
}
break;
//
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWndProc,msg,wParam,lParam);
}
return 0;
}