作者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
推 aecho:menu有其它的方法可以達成,不見得需要用到資源檔。 07/28 12:48
→ xatier:參考書名:"貓也會的windows程式設計" 07/28 12:51
→ xatier:10235655 //接 07/28 12:52
推 zlw:去下載 Visual Studio 2008 Express,一來你寫 Win32 API 需要 07/28 13:24
→ zlw:有 platform sdk (lib,header),dev c++好像不含這個。二來 07/28 13:24
→ zlw:dev c++似乎不能編譯 *.rc 檔的樣子。 07/28 13:25
推 zlw:查了一下dev好像透過mingw32所有有支援win api,不過我想還是 07/28 13:31
→ zlw:微軟網站提供的會比較完整,要開發win32程式,還是用微軟的好 07/28 13:31
推 lairrol:Visual Studio 2008 還不錯用... 07/28 16:11
推 typeotoco:你要用微軟的東西, 就用微軟的IDE, 這樣不是很好 07/28 16:30
推 herman602:樓上是指不要還是要XD 07/28 16:32
推 ofy:Dev C++不支援include rc,而是直接在專案裡添加rc file 07/28 16:35
→ ofy:之後在專案選項裡設定在編譯過程中,會自動調用windres.exe 07/28 16:36
→ ofy:把rc編成res,ld linker就能用了 07/28 16:37
→ ofy:另外有必要在.h裡宣告類似這種 #define VERSION_INFO 1 07/28 16:47
→ ofy:在rc裡 include .h,並且以VERSION_INFO VERSIONINFO這種方式寫 07/28 16:49
→ ofy:前面是自訂的名稱,後面是rc的類型 07/28 16:51
→ ofy:以你的為例就是 .h裡宣告#define MYMENU 9999<任意數 07/28 16:54
→ ofy:這些動作MS的編譯器VS會自動指定,但MinGW全都必須手動 07/28 16:58
→ ofy:要把所有需要的資源,全都指定一個不相同的數字 07/28 17:00
→ ofy:有空可以用資源編輯器(中文化工具)去看看,會發現所有項目都 07/28 17:04
→ ofy:有一個不相同的指定數字 07/28 17:04
推 zlw:原來還可以這樣。 07/28 19:09
推 elfkiller:可以 用專案 07/29 04:04
→ xatier:哦~小弟在回家研究 M(_ _)M 謝謝各位大大的解答 07/30 17:00