作者xatier (一串电研阿飘先生)
看板C_and_CPP
标题[问题] Dev 不支援WIN_API的资源???
时间Tue Jul 28 12:43:04 2009
小弟最近在研究用C写windows API
我用的编译器是dev C
写一些简单的API程式都可以
但是
到後面像要做menu的部份
书上说要用资源档去做
我也试了Dev里的*.rc档
但是失败了
//我的书是用Visual C++当编译器的
但是我没有,我只有Dev
请问各位大大有没有方法能在Dev C里加入资源档??
//===============================================
C程式部分的源码
#include <windows.h>
#include "resource.rc"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE ,int );
char szClassName[ ] = "Windows01"; //视窗类型
int WINAPI WinMain (HINSTANCE hCurInst,
HINSTANCE hPrevInst,
LPSTR lpsCmdLine,
int nCmdShow)
{
MSG msg;
BOOL bRet;
WNDCLASSEX wc;
HWND hWnd;
ATOM atom;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hCurInst;
wc.hIcon = (HICON)LoadImage(NULL,
MAKEINTRESOURCE (IDI_APPLICATION),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE | LR_SHARED
);
wc.hCursor = (HCURSOR)LoadImage (NULL,
MAKEINTRESOURCE(IDC_ARROW),
IMAGE_CURSOR,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = "MYMENU";
wc.lpszClassName = (LPCSTR)szClassName;
wc.hIconSm = (HICON)LoadImage(
NULL,
MAKEINTRESOURCE(IDI_APPLICATION),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
if ((atom = RegisterClassEx(&wc))==0)
return FALSE;
hWnd = CreateWindow(
szClassName,
"Xatier API",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hCurInst,
NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (bRet = GetMessage (&msg, NULL, 0, 0) !=0 ){
if(bRet == -1){
break;
}else{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
int id;
switch (msg){
case WM_COMMAND:
switch (LOWORD(wp)){
case IDM_END:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
case IDM_HELP:
MessageBox(hWnd,
"CopyRight(c)2009 Xatier\n功能表",
"about",
MB_OK);
break;
default:
return(DefWindowProc (hWnd, msg, wp, lp));
}
break;
case WM_CLOSE:
id = MessageBox(hWnd, "你确定要结束程式吗?",
"确认",
MB_YESNO | MB_ICONQUESTION);
if(id == IDYES)
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return (DefWindowProc (hWnd, msg, wp, lp));
}
return 0;
}
//========================
资源档
MYMENU MENU
BEGIN
POPUP "档案(&F)"
BEGIN
MENUITEM "结束(&X)", IDM_END
END
MENUITEM "说明(&H)", IDM_HELP
END
//=======================
有点乱......
在Dev C里它在
#include "resource.rc" 这行就挡下来了...囧
对於我这个初学API的新手而言
看了好久还是不知道是哪里出问题
拜托各位大大了 M(_ _)M
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.60.107.233
1F:推 aecho:menu有其它的方法可以达成,不见得需要用到资源档。 07/28 12:48
2F:→ xatier:参考书名:"猫也会的windows程式设计" 07/28 12:51
4F:→ xatier:10235655 //接 07/28 12:52
6F:推 zlw:去下载 Visual Studio 2008 Express,一来你写 Win32 API 需要 07/28 13:24
7F:→ zlw:有 platform sdk (lib,header),dev c++好像不含这个。二来 07/28 13:24
8F:→ zlw:dev c++似乎不能编译 *.rc 档的样子。 07/28 13:25
9F:推 zlw:查了一下dev好像透过mingw32所有有支援win api,不过我想还是 07/28 13:31
10F:→ zlw:微软网站提供的会比较完整,要开发win32程式,还是用微软的好 07/28 13:31
11F:推 lairrol:Visual Studio 2008 还不错用... 07/28 16:11
12F:推 typeotoco:你要用微软的东西, 就用微软的IDE, 这样不是很好 07/28 16:30
13F:推 herman602:楼上是指不要还是要XD 07/28 16:32
14F:推 ofy:Dev C++不支援include rc,而是直接在专案里添加rc file 07/28 16:35
15F:→ ofy:之後在专案选项里设定在编译过程中,会自动调用windres.exe 07/28 16:36
16F:→ ofy:把rc编成res,ld linker就能用了 07/28 16:37
17F:→ ofy:另外有必要在.h里宣告类似这种 #define VERSION_INFO 1 07/28 16:47
18F:→ ofy:在rc里 include .h,并且以VERSION_INFO VERSIONINFO这种方式写 07/28 16:49
19F:→ ofy:前面是自订的名称,後面是rc的类型 07/28 16:51
20F:→ ofy:以你的为例就是 .h里宣告#define MYMENU 9999<任意数 07/28 16:54
21F:→ ofy:这些动作MS的编译器VS会自动指定,但MinGW全都必须手动 07/28 16:58
22F:→ ofy:要把所有需要的资源,全都指定一个不相同的数字 07/28 17:00
23F:→ ofy:有空可以用资源编辑器(中文化工具)去看看,会发现所有项目都 07/28 17:04
24F:→ ofy:有一个不相同的指定数字 07/28 17:04
25F:推 zlw:原来还可以这样。 07/28 19:09
26F:推 elfkiller:可以 用专案 07/29 04:04
27F:→ xatier:哦~小弟在回家研究 M(_ _)M 谢谢各位大大的解答 07/30 17:00