2009-09-11 5 views

答えて

15

Windowsでは、アイコンとその他の要素(カーソル、ビットマップなど)をリソースファイルに指定する必要があります。このファイルはコンパイルされるとプログラムにリンクされます。

最初に、Windowsプログラムにアイコンを追加する方法の例を示します。このアイコンは、Eclipse内での使用方法を示します。ここでは単にウィンドウを作成する簡単なプログラムである、我々はWNDCLASSEXを埋める時に見て、アプリケーションのアイコンが参照されます。

resources.h - このファイルは、に値を割り当てるために使用することができますリソース識別子、およびその代わりに値を使用します。

#define AppIcon 101 

次のファイルはリソースファイルである、あなたは右、あなたがそれをしたいディレクトリをクリックして、Eclipseでそれを作成するだけでなく、手動またはEclipse内からそれを作成することができ(この場合はsrc)、New -> Fileを選択します。必要な名前を書いてFinishをクリックします。 Eclipse内から編集するには、右クリックしてOpen with -> Text Editorを選択します。

resources.rc - アイコンはここで指定されます。

#include "resources.h" 

// The icon path I used will be needed by Eclipse. 
// If you want to use back-slashes you have to scape them (\\ instead of \): 
AppIcon ICON "../src/icon.ico" 

demoicon.c - プログラムのコードを含むファイル:今

#include <windows.h> 
#include "resources.h" 

const char *ClassName = "DemoIcon"; 

// Declaration of the window procedure, to be used in the WNDCLASSEX struct: 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd) { 

    WNDCLASSEX wc; 
    HWND hWnd; 
    MSG msg; 

    // Filling the structure: 
    wc.cbSize = sizeof(WNDCLASSEX); 
    wc.style = 0; 
    wc.lpfnWndProc = WindowProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = hInstance; 
    // Remember this just loads 32x32, use LoadImage() instead for other dimensions (16x16, 48x48, ...): 
    wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(AppIcon)); 
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = ClassName; 
    // Here we'll use LoadImage, as we need a 16x16 mini icon: 
    wc.hIconSm = LoadImage(hInstance,MAKEINTRESOURCE(AppIcon),IMAGE_ICON,16,16, LR_DEFAULTCOLOR); 

    // Registering the class: 
    if(!RegisterClassEx(&wc)) { 
     MessageBox(NULL, 
        "Could not register window.", 
        "Error", 
        MB_ICONEXCLAMATION | MB_OK); 
     return -1; 
    } 

    // Create the window using the "MainWindow" class: 
    hWnd = CreateWindowEx(WS_EX_WINDOWEDGE, 
          ClassName, 
          "Demo Icon", 
          WS_OVERLAPPEDWINDOW, 
          CW_USEDEFAULT, 
          CW_USEDEFAULT, 
          200, 
          150, 
          NULL, 
          NULL, 
          hInstance, 
          NULL); 

    // If the window was not created show error and exit: 
    if(hWnd == NULL) { 
     MessageBox(NULL, 
        "Could not create window.", 
        "Error", 
        MB_ICONEXCLAMATION | MB_OK); 
     return -1; 
    } 

    // Set the windows show state, to show it: 
    ShowWindow(hWnd, nShowCmd); 
    // Draw the window: 
    UpdateWindow(hWnd); 

    // Retrieve messages from the message queue: 
    while(GetMessage(&msg, NULL, 0, 0) > 0) { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return msg.wParam; 
} 

// Implementation of the window procedure, will handle the messages: 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { 

    switch(uMsg) { 
     case WM_CLOSE: 
      DestroyWindow(hWnd); 
      break; 
     case WM_DESTROY: 
      PostQuitMessage(0); 
      break; 
     default: 
      return DefWindowProc(hWnd, uMsg, wParam, lParam); 
    } 

    return 0; 
} 

を、あなたにEclipseプロジェクトのソースディレクトリには、すべてのファイル(上記の例では3つのファイルとアイコンファイル)があることを確認してください。

その後、Project -> Propertiesに行ってください。
そこには、C/C++ Build -> Settings -> Build Stepsタブに行きます。
ここにPre-build steps -> Commandが表示されます。あなたがそこに書き込むコマンドは、コンパイルが始まる前に実行されるので、リソースファイルをコンパイルするように指示します。あなたはMinGWのを使用していると、リソースコンパイラはwindresです:

windres ../src/resources.rc -o ../Resources/resources.o 

あなたは私がResourcesというディレクトリにコンパイルされたリソースファイルを配置することがあります見ることができるように、あなたがしたい場所のままに(そのための名前もそのファイルは、resources.rcという名前である必要はありません)。

今すぐTool Settingsタブにアクセスしてください。この場合には、あなたが追加する必要があり
MinGW C Linker -> Miscellaneousに行き、他のオブジェクトで前に作成したオブジェクトファイルを追加し、:

Resources/resources.o 

を、これはWindowsのアプリケーションであるため、時リンカのフラグにオプション-mwindowsを追加同じタブの上。

完了、プロジェクトをビルドするEclipseはリソースファイルを最初にコンパイルし、生成されたオブジェクトをプロジェクトの他のオブジェクトファイルとしてリンクします。

これを読んでも十分なはずです。

+0

こんにちは!もう一つ質問があります。Eclipseで* .rcファイルを作成するにはどうすればいいですか?このFiletypeはリストされていません。作成するときには、eclipseのプレーンテキストファイルです。とにかく* .rcファイルを作成する必要がありますか? –

+0

私はあなたの答えをチェックしなかったことを申し訳なく思っています。実際に解決策を試してみる前に、私はそれをOKとチェックしてしまったように見えました。(正常には私はこれをしませんでしたが、試してみるとかなり時間がかかることが分かりました)最初のコメントからわかるように、rcファイルタイプに問題があります。Eclipseではこのファイルタイプは存在しないようです。 –

+1

さて、申し訳ありませんが、私はあまりにもそれを書いていたはずです。Eclipseでリソースファイルを作成するには、プロジェクトの「src」ディレクトリ(たとえば)を右クリックし、「New-> File」を選択し、次のダイアログボックスで名前を挿入します(たとえばicon .rc)。そのファイルをEclipse内から編集するには、ファイルを右クリックして「Open with-> Text Editor」を選択します。別のソースファイルであるかのように開きます。私はEclipseを定期的に使用していませんが、認識されていないため、リソースファイルの構文の強調表示ができないことに懸念しています。私はこれを追加する答えを編集します、ありがとう! – Xandy

1

Eclipseがリソースファイルを参照するように設定されていません。バグ。そのため、処理に追加する手順もあります。ここに6月のステップがあります。 [http://wiki.eclipse.org/CDT/User/FAQ#How_to_handle_Resource-Script-Files_.27.2A.rc.27_with_CDT.3F][1]

リソーススクリプトファイルの処理方法*。 rc 'とCDT? 現在CDTでwindres.exeを処理することはできません。プロジェクトに.rcファイルを追加して、自動的にコンパイルおよびリンクすることはできません。これは既にbugzillaのバグとして提起されています。

1つの方法は、プレビルドステップを作成することです。アンダーウェアの下に プロジェクト|プロパティ| C/C++ - ビルド|設定|ビルドステップ|ビルド前のステップ コマンドラインに: windres --use-temp-file -i .. \ MyProject.rc -o .. \ MyProject_rc \ MyProject_rc.o オブジェクトをリンカーに知らせます。アンダーウェアの下に プロジェクト|プロパティ| C/C++ - ビルド|設定 ツール設定| MinGW C++リンカ|その他|その他のオブジェクト "C:\ MyWorkspace \ MyProject \ MyProject_rc \ MyProject_rc.o" 「MyWorkspace」と「MyProject」は目的に合ったものに置き換えてください。

ビルドする前に、フォルダ。\ MyProject_rcを追加する必要があります。

windres.exeのパスはeclipseに認識されている必要があります。

0

プロジェクト内で使用したいすべてのアイコンを先にジップアップします。その後 は、あなたがすでに1(Iは「LIB」を使用) を得たhaventは場合は、リソースフォルダ内のjarファイルを配置し、リソースのフォルダを作成した.jar

.zipファイルの名前を変更します。

そして、プロジェクトのプロパティに1回の単純な加算:右クリックし、設定の「Javaのビルド・パス」によって

- ライブラリタブを選択します。 JARの追加ボタンをクリックし、icons.jarをライブラリに追加します。を保存します。

ウィンドウビルダエディタの中に目的の画像アイコンを簡単に割り当てることができます。例えば、アイコンを含むjarがクラスパスリソースリスト内の画像選択モードチューザ内に表示されます。すべてが正常に動作し、正常にコンパイルされます。

+0

質問はC++について質問しています。 –

関連する問題