看板 C_and_CPP 關於我們 聯絡資訊
小弟最近在研究用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
aecho:http://0rz.tw/PZCwm (msdn上win32 API的menu functions) 07/28 12:56
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