不怎么会用vs2005啊,高人帮忙!

hellodudu 2006-12-06 09:51:32
下面是例题中的一个加速键应用程序:

#include<windows.h>
#include"resource.h"

#define ID_EDIT 1
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

TCHAR szAppName[]=TEXT("Pop");

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
HACCEL hAccel;
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,szAppName);
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(hInstance,szAppName);
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=MAKEINTRESOURCE(IDR_MENU1);


hwnd=CreateWindow(szAppName,szAppName,WS_OVERLAPPEDWINDOW,
GetSystemMetrics(SM_CXSCREEN)/4,
GetSystemMetrics(SM_CYSCREEN)/4,
GetSystemMetrics(SM_CXSCREEN)/2,
GetSystemMetrics(SM_CYSCREEN)/2,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);

hAccel=LoadAccelerators(hInstance,szAppName);
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(hwnd,hAccel,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;

AskConfirmation(HWND hwnd)
{
return MessageBox(hwnd,TEXT("Really want to close Pop?"),szAppName,MB_YESNO|MB_ICONQUESTION);
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HWND hwndEdit;
int iSelect,iEnable;
switch(message)
{
case WM_CREATE:
hwndEdit=CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|
WS_BORDER|ES_LEFT|ES_MULTILINE|ES_AUTOHSCROLL|ES_AUTOVSCROLL,
0,0,0,0,hwnd,(HMENU)ID_EDIT,((LPCREATESTRUCT)lParam)->hInstance,NULL);
return 0;
case WM_SETFOCUS:
SetFocus(hwndEdit);
return 0;
case WM_SIZE:
MoveWindow(hwndEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
return 0;
case WM_INITMENUPOPUP:
if(lParam==1)
{
EnableMenuItem((HMENU)wParam,IDM_EDIT_UNDO,SendMessage(hwndEdit,EM_CANUNDO,0,0)?MF_ENABLED:MF_GRAYED);
EnableMenuItem((HMENU)wParam,IDM_EDIT_PASTE,IsClipboardFormatAvailable(CF_TEXT)?MF_ENABLED:MF_GRAYED);
iSelect=SendMessage(hwndEdit,EM_GETSEL,0,0);
if(HIWORD(iSelect)==LOWORD(iSelect))
iEnable=MF_GRAYED;
else
iEnable=MF_ENABLED;
EnableMenuItem((HMENU)wParam,IDM_EDIT_CUT,iEnable);
EnableMenuItem((HMENU)wParam,IDM_EDIT_COPY,iEnable);
EnableMenuItem((HMENU)wParam,IDM_EDIT_CLEAR,iEnable);
return 0;
}
break;
case WM_COMMAND:
if(lParam)
{
if(LOWORD(lParam)==ID_EDIT&&(HIWORD(wParam)==EN_ERRSPACE||HIWORD(wParam)==EN_MAXTEXT))
MessageBox(hwnd,TEXT("Edit control out of space."),szAppName,MB_OK|MB_ICONSTOP);
return 0;
}
else switch(LOWORD(wParam))
{
case IDM_FILE_NEW:
case IDM_FILE_OPEN:
case IDM_FILE_SAVE:
case IDM_FILE_SAVE_AS:
case IDM_FILE_PRINT:
MessageBeep(0);
return 0;
case IDM_APP_EXIT:
SendMessage(hwnd,WM_CLOSE,0,0);
return 0;
case IDM_EDIT_UNDO:
SendMessage(hwndEdit,WM_UNDO,0,0);
return 0;
case IDM_EDIT_CUT:
SendMessage(hwndEdit,WM_CUT,0,0);
return 0;
case IDM_EDIT_COPY:
SendMessage(hwndEdit,WM_COPY,0,0);
return 0;
case IDM_EDIT_PASTE:
SendMessage(hwndEdit,WM_PASTE,0,0);
return 0;
case IDM_EDIT_CLEAR:
SendMessage(hwndEdit,WM_CLEAR,0,0);
return 0;
case IDM_EDIT_SELECT_ALL:
SendMessage(hwndEdit,WM_SETSEL,0,-1);
return 0;

case IDM_HELP_HELP:
MessageBox(hwnd,TEXT("Help not yet implemented!"),szAppName,MB_OK|MB_ICONEXCLAMATION);
return 0;
case IDM_APP_ABOUT:
MessageBox(hwnd,TEXT("Charles Petzold,1998"),szAppName,MB_OK|MB_ICONEXCLAMATION);
return 0;
}
break;
case WM_CLOSE:
if(IDYES==AskConfirmation(hwnd))
DestroyWindow(hwnd);
return 0;
case WM_QUERYENDSESSION:
if(IDYES==AskConfirmation(hwnd))
return 1;
else
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
return DefWindowProc(hwnd,message,wParam,lParam);
}

编译是会说找不到"resource.h",但当我添加了资源时又会报好多错!
这是为什么啊?本人还是一个小菜鸟,请指点!
--------------------------------------------
.\accelerator.cpp(48) : error C2275: “HWND”: 将此类型用作表达式非法
D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windef.h(207) : 参见“HWND”的声明
.\accelerator.cpp(48) : error C2146: 语法错误 : 缺少“)”(在标识符“hwnd”的前面)
.\accelerator.cpp(48) : error C2059: 语法错误 : “)”
.\accelerator.cpp(49) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
.\accelerator.cpp(48) : error C3861: “AskConfirmation”: 找不到标识符
.\accelerator.cpp(54) : error C2601: “WndProc”: 本地函数定义是非法的
.\accelerator.cpp(10): 此行有一个“{”没有匹配项
.\accelerator.cpp(146) : fatal error C1075: 与左侧的 大括号“{”(位于“.\accelerator.cpp(54)”)匹配之前遇到文件结束
...全文
337 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellodudu 2006-12-08
  • 打赏
  • 举报
回复
....
来人帮忙啊!
王国凡 2006-12-08
  • 打赏
  • 举报
回复
搞定没有啊? 还没搞定的话, 请发 email 到 sgnaw@163.com
那三十大板暂先记着.
wxjman 2006-12-07
  • 打赏
  • 举报
回复
貌似VS2005对语法要求很苛刻哦,几个char* DWORD 和CString之间的转换我都搞了N久。。。
CString的GetBuffer()返回的居然是wchar_t * 。。。。应该是对UNICODE的支持吧~~~~
hellodudu 2006-12-07
  • 打赏
  • 举报
回复
别这样啊....
我也不容易啊~
王国凡 2006-12-07
  • 打赏
  • 举报
回复
拖出去, 重打三十大板 .
hellodudu 2006-12-07
  • 打赏
  • 举报
回复
添加了菜单资源,也在属性里把它们的ID号改成了IDM_XXXX,resource.h里面也加了IDM_XXXX的宏。可是还是出现上面的错!
555555~
-_-!
王国凡 2006-12-06
  • 打赏
  • 举报
回复
你最后一个函数也缺少反括号 }

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch()
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
} // 是这里
return DefWindowProc(hwnd,message,wParam,lParam);
}
王国凡 2006-12-06
  • 打赏
  • 举报
回复
在 AskConfirmation(HWND hwnd) 之前缺少反括号 } 所致.

即应为:
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
//...
} // 这里
int AskConfirmation(HWND hwnd)
{
// ...
}

xyh2007 2006-12-06
  • 打赏
  • 举报
回复
错误不要怕!根据提示慢慢解决!
有时一个错误就回出现很多错误提示
hellodudu 2006-12-06
  • 打赏
  • 举报
回复
我总是在这类问题上被绊住了
希望有人能够推荐一下怎么掌握vs的初级应用
王国凡 2006-12-06
  • 打赏
  • 举报
回复
看得出来就是撤消, 粘贴, 剪切, 复制 ... 这些 IDM_XXXX 是菜单的 ID , 请添加菜单资源, ID 分别用上面源程序中用到的 IDM_XXX
hellodudu 2006-12-06
  • 打赏
  • 举报
回复
解决了错误后重新编译
fatal error C1083: 无法打开包括文件:“resource.h”

添加了menu和accelerator资源后编译

.\accelerator.cpp(74) : error C2065: “IDM_EDIT_UNDO”: 未声明的标识符
.\accelerator.cpp(75) : error C2065: “IDM_EDIT_PASTE”: 未声明的标识符
.\accelerator.cpp(81) : error C2065: “IDM_EDIT_CUT”: 未声明的标识符
.\accelerator.cpp(82) : error C2065: “IDM_EDIT_COPY”: 未声明的标识符
.\accelerator.cpp(83) : error C2065: “IDM_EDIT_CLEAR”: 未声明的标识符
.\accelerator.cpp(96) : error C2065: “IDM_FILE_NEW”: 未声明的标识符
.\accelerator.cpp(96) : error C2051: case 表达式不是常量
.\accelerator.cpp(97) : error C2065: “IDM_FILE_OPEN”: 未声明的标识符
.\accelerator.cpp(97) : error C2051: case 表达式不是常量
.\accelerator.cpp(98) : error C2065: “IDM_FILE_SAVE”: 未声明的标识符
.\accelerator.cpp(98) : error C2051: case 表达式不是常量
.\accelerator.cpp(99) : error C2065: “IDM_FILE_SAVE_AS”: 未声明的标识符
.\accelerator.cpp(99) : error C2051: case 表达式不是常量
.\accelerator.cpp(100) : error C2065: “IDM_FILE_PRINT”: 未声明的标识符
.\accelerator.cpp(100) : error C2051: case 表达式不是常量
.\accelerator.cpp(103) : error C2065: “IDM_APP_EXIT”: 未声明的标识符
.\accelerator.cpp(103) : error C2051: case 表达式不是常量
.\accelerator.cpp(106) : error C2051: case 表达式不是常量
.\accelerator.cpp(109) : error C2051: case 表达式不是常量
.\accelerator.cpp(112) : error C2051: case 表达式不是常量
.\accelerator.cpp(115) : error C2051: case 表达式不是常量
.\accelerator.cpp(118) : error C2051: case 表达式不是常量
.\accelerator.cpp(121) : error C2065: “IDM_EDIT_SELECT_ALL”: 未声明的标识符
.\accelerator.cpp(121) : error C2051: case 表达式不是常量
.\accelerator.cpp(122) : error C2065: “WM_SETSEL”: 未声明的标识符
.\accelerator.cpp(125) : error C2065: “IDM_HELP_HELP”: 未声明的标识符
.\accelerator.cpp(125) : error C2051: case 表达式不是常量
.\accelerator.cpp(128) : error C2065: “IDM_APP_ABOUT”: 未声明的标识符
.\accelerator.cpp(128) : error C2051: case 表达式不是常量

------------------------------------------------------------
应该是资源和源代码的连接问题吧,可我就是不知道这该怎么连!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧