谁有只有一个菜单的程序,该菜单点击后谈出一个对话框参考啊。
我的死活都是那个样,可以运行,对话框没反应。
,bmp也显示不了。。
怎么搞得。
我的程序有两个rc,一个是用vc做的,是对话框,另外一个是菜单和图片,
用文本编辑的。
程序铁出来给大家帮忙看看。图片可以任意3个,改成我的图片的名字就行了。
分别是:ship.bmp ,submarine.bmp ,about.bmp,Bitmap.bmpico和cur文件你的机上任意选一个改成我的文件名就行了。
图标是:vc.ico ,光标是:harrow.cur
main.cpp
main.h
resource.h
resource.rc
dialog.rc
vc.ico//////////////////////////Main.cpp/////////////////////////////////////
///////////////////////////////////////////////////////////////////////
#define STRICT
#include <stdio.h>
#include <windows.h>
#include <windowsx.h>
#include <string.h>
#include "main.h"
static char appname[]="位图和对话框";
static HWND MainWindow;
static HINSTANCE hInstance;int MaxLines =21;
int Start =32;
int TextHeight;
int PageSize=10;
int nPosition=0;
BOOL DrawBitmaps=true;//==================================================================
//INITIALZATION
//==================================================================
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
MSG msg;
if(!hPrevInstance)
if(!Register(hInstance))
return FALSE;
if(!(MainWindow=Create(hInstance,nShowCmd)))
return FALSE;
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
BOOL Register(HINSTANCE hInstance)
{
WNDCLASS wndClass; wndClass.style = CS_HREDRAW|CS_VREDRAW;
wndClass.lpfnWndProc =(WNDPROC)WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance =hInstance;
wndClass.hIcon = LoadIcon(hInstance,"Icon");
wndClass.hCursor = LoadCursor(hInstance,"HARROW");
wndClass.hbrBackground =GetStockBrush(WHITE_BRUSH);
wndClass.lpszMenuName = "MENU";
wndClass.lpszClassName =appname; return RegisterClass(&wndClass);
}//=================================================================
//CREATE WINDOW
//=================================================================
HWND Create(HINSTANCE hInstance,int cmdShow)
{
HWND hWindow= CreateWindow(appname,appname,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
if(hWindow == NULL)
return hWindow;
ShowWindow(hWindow,cmdShow);
UpdateWindow(hWindow); return hWindow;
}
//===================================================================
//Window Proc
//===================================================================
LRESULT CALLBACK WndProc(HWND hWindow,UINT Message,
WPARAM wParam,LPARAM lParam)
{
switch(Message)
{
HANDLE_MSG(hWindow,WM_DESTROY,Window_OnDestroy);
HANDLE_MSG(hWindow,WM_COMMAND,Window_OnCommand);
HANDLE_MSG(hWindow,WM_CREATE,Window_OnCreate);
HANDLE_MSG(hWindow,WM_KEYDOWN,Window_OnKey);
HANDLE_MSG(hWindow,WM_PAINT,Window_OnPaint);
HANDLE_MSG(hWindow,WM_VSCROLL,Window_OnVScroll); default:
return DefWindowProc(hWindow,Message,wParam,lParam);
}
} //====================================================================
//Other
//====================================================================
void Window_OnDestroy(HWND hwnd)
{
DeleteBitmap(MyBitMap);
PostQuitMessage(0);}BOOL Window_OnCreate(HWND hWnd,CREATESTRUCT * lpCreateStruct)
{
TEXTMETRIC textmetrics;
MyBitMap=LoadBitmap(hInstance,"Ship");
if(!MyBitMap)
{
MessageBox(hWnd,"No Bitmap","Fatal Error",MB_OK);
//return false;
return true;
}
HDC PaintDC=GetDC(hWnd);
GetTextMetrics(PaintDC,&textmetrics);
ReleaseDC(hWnd,PaintDC); TextHeight=textmetrics.tmHeight+textmetrics.tmExternalLeading;
SetScrollRange(hWnd,SB_VERT,0,MaxLines-Start,false);
return true;
}//Message Handle
void Window_OnCommand(HWND hWnd,int id,HWND hwndCtl,UINT codeNotify)
{
switch(id)
{
case CM_ABOUT:
{
FARPROC AboutBox= MakeProcInstance((FARPROC)AboutDlgProc,hInstance);
DialogBox(hInstance,"About",hWnd,(DLGPROC)AboutBox);
FreeProcInstance(AboutBox);
break;
}
case CM_DRAWBITMAP :
Start=32;
MaxLines=22;
InvalidateRect(hWnd,NULL,true);
DrawBitmaps=false;
break;
case CM_SHIP :
Start=0;
MaxLines=32;
InvalidateRect(hWnd,NULL,true);
DrawBitmaps=false;
break;
case CM_EXPLOSION :
Start=50;
MaxLines=37;
InvalidateRect(hWnd,NULL,true);
DrawBitmaps=false;
break;
case CM_SUBMARINE :
DrawBitmaps=true;
InvalidateRect(hWnd,NULL,true);
break;
}
}
void Window_OnPaint(HWND hWnd)
{
PAINTSTRUCT PaintStruct;
SIZE L;
int NumImages=15;
char S[101];
int Y=0;
HDC PaintDC=BeginPaint(hWnd,&PaintStruct);
if(DrawBitmaps)
{
HDC BitmapDC=CreateCompatibleDC(PaintDC);
HBITMAP OldBitmap=SelectBitmap(BitmapDC,MyBitMap);
for(int i=0;i<NumImages;i++)
for(int j=0;j<NumImages;j++)
BitBlt(PaintDC,i*66,j*66,64,65,BitmapDC,0,0,SRCCOPY);
SelectBitmap(BitmapDC,OldBitmap);
DeleteDC(BitmapDC);
}
else
{
HPEN APen=CreatePen(PS_NULL,0,0);
HPEN SavePen=SelectPen(PaintDC,APen);
for(int i=nPosition;i<MaxLines;i++)
{
LoadString(hInstance,i+Start,S,100);
TextOut(PaintDC,1,Y,S,strlen(S));
GetTextExtentPoint(PaintDC,S,strlen(S),&L);
if(L.cx==0)
Rectangle(PaintDC,1,Y,400,Y+1+TextHeight);
else
Rectangle(PaintDC,L.cx,Y,L.cx+200,Y+1+TextHeight);
Y+=TextHeight;
}
Rectangle(PaintDC,1,Y,400,Y+1+400);
SelectPen(PaintDC,SavePen);
DeleteObject(APen);
}
EndPaint(hWnd,&PaintStruct);
}
void Window_OnKey(HWND hWnd,UINT vk,BOOL fDown,int cRepeat,UINT flags)
{
switch(vk)
{ case VK_HOME:
SendMessage(hWnd,WM_VSCROLL,SB_TOP,0L);
break;
case VK_DOWN:
SendMessage(hWnd,WM_VSCROLL,SB_LINEDOWN,0L);
break;
case VK_UP:
SendMessage(hWnd,WM_VSCROLL,SB_LINEUP,0L);
break; }
}
void Window_OnVScroll(HWND hWnd,HWND hwndCtl,UINT code,int pos)
{
}
//对话框的消息处理程序
BOOL AboutDlgProc(HWND hDlg,UINT Message,WPARAM wParam,LPARAM lParam)
{
switch(Message)
{
case WM_INITDIALOG:
return true; case WM_COMMAND:
if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL)
{
EndDialog(hDlg,IDOK);
return true; }
break;
default:
return false;
}
} ///////////////////////////////////main.h//////////////////////////////
#define CM_ABOUT 1101
#define CM_DRAWBITMAP 1102
#define CM_SHIP 1103
#define CM_EXPLOSION 1104
#define CM_SUBMARINE 1105
//Macros
//Window and ProcLRESULT CALLBACK WndProc(HWND hWindow,UINT Message,WPARAM wparam,LPARAM lparam);
BOOL Register(HINSTANCE hInst);HWND Create(HINSTANCE hInstance,int cmdShow);
BOOL Window_OnCreate(HWND hWnd,CREATESTRUCT * lpCreateStruct);
BOOL AboutDlgProc(HWND hDlg,UINT Message,WPARAM wParam,LPARAM lParam);
//Message Handle
void Window_OnCommand(HWND hWnd,int id,HWND hwndCtl,UINT codeNotify);
void Window_OnPaint(HWND hWnd);
void Window_OnKey(HWND hWnd,UINT vk,BOOL fDown,int cRepeat,UINT);
void Window_OnDestroy(HWND hWnd);
void Window_OnVScroll(HWND hWnd,HWND hwndCtl,UINT code,int pos);//Variables
HBITMAP MyBitMap;
///这是第一份。剩下另外一份是资源文件
int _MaxScreenX_ = 1024; //现在是示例,必要时通GetSystemMetrics取得
int _MaxScreenY_ = 768;BOOL FAR PASCAL _export ABOUT(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static RECT rectW;
HDC hdc;switch (message)
{
case WM_INITDIALOG:
GetWindowRect(hDlg,&rectW);//取得整个窗口的外框尺寸
SetWindowPos(hDlg,NULL,
(_MaxScreenX_-(rectW.right-rectW.left))/2,
(_MaxScreenY_-(rectW.bottom-rectW.top))/2,
0,0,SWP_NOSIZE);
return (TRUE); case WM_PAINT:
DefWindowProc(hDlg, message, wParam, lParam);
hdc=GetDC(hDlg);
GetClientRect(hDlg,&rectW);// ShowBMPFile(hdc,rectW,SB_COPY,"d:\\br4.bmp");
ReleaseDC(hDlg,hdc);
return 0; case WM_COMMAND:
switch(GET_WM_COMMAND_ID(wParam, lParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hDlg, TRUE);
return (TRUE);
}
break;
}
return DefWindowProc(hDlg, message, wParam, lParam);
}static DLGPROC lpproc;
lpproc = (DLGPROC)MakeProcInstance(ABOUT, hInst);
DialogBox(hInst,"ABOUT_DLG",hWnd,lpproc);
FreeProcInstance((FARPROC)lpproc);