VS2008创建win32程序使用Dialog,icon资源报错这些资源的ID未定义

wangxiaosu 2015-01-24 10:43:31
兄弟今天用vs2008创建了一个win32程序,使用win32 API编程,目的是创建一个对话框小程序,并且改变对话框左上角的图标,使用自定义的ICON,过程如下:
1、按照向导提示创建win32程序,整个过程没有问题(可以确定,因为不使用资源的情况下运行一个Message框正常)
2、开始添加资源,资源文件夹右击->add new items->resource->.rc文件,然后在该文件试图下import添加icon,dialog,bitmap等资源,通过各个资源的属性试图设置好各个资源的ID
3、然后在代码中使用各个资源的ID,已经检查过代码中使用的各个资源ID和各个资源真实的ID相符;
但是代码编译报错:error C2065: 'IDB_BITMAP' : undeclared identifier,关于icon和dialog报的同样的错,求教是什么原因,主函数入口的代码如下,求教大神指点,是不是VS2008使用资源之前还需要对文件或者整个工程的某个属性进行设置一下呢?不明白了。求教求教,谢谢谢谢!
#include <windows.h>
#include "resource.h"
#include "stdafx.h"

BOOL __stdcall DlgProc(HWND, UINT, WPARAM, LPARAM);

HBITMAP g_hBitmap; // 图片的句柄
HICON g_hIcon; // 对话框图标句柄
HBRUSH g_hBgBrush; // 背景刷子 第一句
char szFileName[MAX_PATH]=""; //需要操作的文件
bool DoWhat=true; //开关变量,加密还是解密
bool IsReady=false; //是否选择了用于操作的文件

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
// 从资源中加载BMP文件和图标,这些工作也可以在WM_INITDIALOG消息中进行
g_hBitmap = ::LoadBitmap(hInstance, (LPCTSTR)IDB_BITMAP);
g_hIcon = ::LoadIcon(hInstance, (LPCTSTR)IDI_MAIN);
g_hBgBrush = ::CreateSolidBrush(RGB(0xa6, 0xca, 0xf0)); // 创建背景刷子



int nResult = ::DialogBoxParam(
hInstance, // 实例句柄
(LPCTSTR)IDD_MAIN, // 对话框资源ID号
NULL, // 父窗口句柄
DlgProc, // 消息处理函数
NULL); // 对话框初始化的值,在WM_INITDIALOG消息的lParam参数中取出

::DeleteObject(g_hBgBrush);

return 0;
}

BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
// 设置标题栏图标
::SendMessage(hDlg, WM_SETICON, ICON_BIG, (long)g_hIcon);

// 初始化显示图片的静态框架
//HWND hWndBmp = ::GetDlgItem(hDlg, IDC_BMP);

// 设置SS_BITMAP风格
//LONG nStyle = ::GetWindowLong(hWndBmp, GWL_STYLE);
//::SetWindowLong(hWndBmp, GWL_STYLE, nStyle | SS_BITMAP);

// 设置图片
//::SendDlgItemMessage(hDlg, IDC_BMP, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)g_hBitmap);

}
break;

case WM_COMMAND:
switch(LOWORD(wParam))
{
case 1: // 选择需要加密的文件
{
}
break;

case 222: // 选择需要解密的文件
{
}
break;

case IDCANCEL: // 退出程序
::EndDialog (hDlg, IDCANCEL);
break;
}
break;

case WM_CTLCOLORSTATIC: // 设置静态文本框的背景色
case WM_CTLCOLORDLG: // 设置对话框的背景色
{
HDC hdc = (HDC)wParam;

// 为静态文本框设置文本背景色
::SetBkColor(hdc, RGB(0xa6, 0xca, 0xf0));

/*if((HWND)lParam == ::GetDlgItem(hDlg, IDC_AUTHOR))
{
::SetTextColor(hdc, RGB(0, 0, 0xff));
}*/

return (int)g_hBgBrush;
}
}

return 0;
}
...全文
378 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2015-03-10
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
wangxiaosu 2015-01-25
  • 打赏
  • 举报
回复
谢谢兄弟的回复,资源图标?您是指的这个程序生成可执行文件后该可执行文件的图标吗?那这个图标就是IDI_MAIN,这个就是程序的图标,也是打开程序后对话框左上角的系统图标的ID。
machealx 2015-01-25
  • 打赏
  • 举报
回复
你的资源文件里面怎么没有资源图标的资源ID?ICON_BIG
wangxiaosu 2015-01-25
  • 打赏
  • 举报
回复
谢谢兄弟的回答,看了一下resource.h文件,里面有相关资源的ID的宏定义的,resource.h文件的内容如下:
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by 对外汉语测试.rc
//

#define IDB_BITMAP                      102
#define IDI_MAIN                        103
#define IDD_MAIN                        104

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        105
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif
lx624909677 2015-01-24
  • 打赏
  • 举报
回复
在Resource.h文件中看下有没有你的图片ID的宏定义

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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