[問題] Dev 不支援WIN_API的資源???

看板C_and_CPP作者 (一串電研阿飄先生)時間15年前 (2009/07/28 12:43), 編輯推噓10(10017)
留言27則, 8人參與, 最新討論串1/1
小弟最近在研究用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

07/28 12:48, , 1F
menu有其它的方法可以達成,不見得需要用到資源檔。
07/28 12:48, 1F

07/28 12:51, , 2F
參考書名:"貓也會的windows程式設計"
07/28 12:51, 2F

07/28 12:52, , 4F
10235655 //接
07/28 12:52, 4F

07/28 12:56, , 5F
http://0rz.tw/PZCwm (msdn上win32 API的menu functions)
07/28 12:56, 5F

07/28 13:24, , 6F
去下載 Visual Studio 2008 Express,一來你寫 Win32 API 需要
07/28 13:24, 6F

07/28 13:24, , 7F
有 platform sdk (lib,header),dev c++好像不含這個。二來
07/28 13:24, 7F

07/28 13:25, , 8F
dev c++似乎不能編譯 *.rc 檔的樣子。
07/28 13:25, 8F

07/28 13:31, , 9F
查了一下dev好像透過mingw32所有有支援win api,不過我想還是
07/28 13:31, 9F

07/28 13:31, , 10F
微軟網站提供的會比較完整,要開發win32程式,還是用微軟的好
07/28 13:31, 10F

07/28 16:11, , 11F
Visual Studio 2008 還不錯用...
07/28 16:11, 11F

07/28 16:30, , 12F
你要用微軟的東西, 就用微軟的IDE, 這樣不是很好
07/28 16:30, 12F

07/28 16:32, , 13F
樓上是指不要還是要XD
07/28 16:32, 13F

07/28 16:35, , 14F
Dev C++不支援include rc,而是直接在專案裡添加rc file
07/28 16:35, 14F

07/28 16:36, , 15F
之後在專案選項裡設定在編譯過程中,會自動調用windres.exe
07/28 16:36, 15F

07/28 16:37, , 16F
把rc編成res,ld linker就能用了
07/28 16:37, 16F

07/28 16:47, , 17F
另外有必要在.h裡宣告類似這種 #define VERSION_INFO 1
07/28 16:47, 17F

07/28 16:49, , 18F
在rc裡 include .h,並且以VERSION_INFO VERSIONINFO這種方式寫
07/28 16:49, 18F

07/28 16:51, , 19F
前面是自訂的名稱,後面是rc的類型
07/28 16:51, 19F

07/28 16:54, , 20F
以你的為例就是 .h裡宣告#define MYMENU 9999<任意數
07/28 16:54, 20F

07/28 16:58, , 21F
這些動作MS的編譯器VS會自動指定,但MinGW全都必須手動
07/28 16:58, 21F

07/28 17:00, , 22F
要把所有需要的資源,全都指定一個不相同的數字
07/28 17:00, 22F

07/28 17:04, , 23F
有空可以用資源編輯器(中文化工具)去看看,會發現所有項目都
07/28 17:04, 23F

07/28 17:04, , 24F
有一個不相同的指定數字
07/28 17:04, 24F

07/28 19:09, , 25F
原來還可以這樣。
07/28 19:09, 25F

07/29 04:04, , 26F
可以 用專案
07/29 04:04, 26F

07/30 17:00, , 27F
哦~小弟在回家研究 M(_ _)M 謝謝各位大大的解答
07/30 17:00, 27F
文章代碼(AID): #1ARe7PsA (C_and_CPP)