すみません、お聞きしたいことがあります。
MFCを使って、ウィンドウを表示するプログラムを作成しました。メニュー項目は「ファイル」だけです。
その後、VCの「挿入」ー「リソース」メニューを選択してリソースエディタからダイアログを作成しました。
その後は何もせず、「ビルド」したのですが、既にリソースファイルのところでエラーが生じます。
リソースエディタでダイアログをデザインすると、自動的にリソースファイルが記述されてしまうのでその理由がわかりません。
ダイアログを作成しただけだとエラーが生じるのでしょうか?ダイアログをデザインした後、何かしておかなければ処理や、用意しておくべきファイルがあるのでしょうか?その他注意事項があるのでしょうか。マニュアルに沿って作成したはずなんですけど・・・
すみません、教えていただけませんか。お願いします。
こういう場合、どんなエラーが出たのか明記してください。
そのほうが格段とレスしやすくなりますよ。(^^;
お返事ありがとうございます。
たしかにご指摘のとおりです。すみません。
C:\test1.rc (20): error RC2144 : PRIMARY LANGUAGE ID not a number
C:\test1.rc (29): error RC2135 : file not found: 100
C:\test1.rc (31): error RC2164 : unexpected value in RCDATA
C:\test1.rc (33): error RC2135 : file not found: MENUITEM
C:\test1.rc (34): error RC2135 : file not found: MENUITEM
C:\test1.rc (35): error RC2135 : file not found: END
C:\test1.rc (70): error RC2135 : file not found: DIALOG
というえらーです。リソースファイルの
// 日本語 resources
// Menu
に関する部分です。ただ、// Menuに関しては、ダイアログをデザインしない状態、つまりウィンドウが表示されるだけの時はエラー出てこなかったんですけど。
なにかインクルードすべきファイルとかあるんですか?
/////////////////////////////////////////////////////////////////////////////
// 日本語 resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
#ifdef _WIN32
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT // <<<<<------------この行を編集してしまったのでは?
#pragma code_page(932)
#endif //_WIN32
rcファイルの、この部分がおかしくありませんか?
リソースをテキスト形式で開きましょう。
sugarさんに教わったのですが、ファイルー開く で
拡張子がrcのファイルを選び、用途 コンボボックスで
テキストを選択し内容をチェックしてください。
Bunさんお返事遅れてごめんなさい。
確かに、ご指摘された行のエラーが出るんですが、編集してないので・・・
以下にリソースのエラーが出る部分を載せます参考までに。
ちなみにプロジェクトは「Win32Application」で作成し、「空のプロジェクトを作成」を選んだんですけど、これが原因ですか?
//Microsoft Developer Studio generated resource script.
//
#include resource.h
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include test1_def.h
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 日本語 resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
#ifdef _WIN32
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
#pragma code_page(932)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MAINFRAME MENU DISCARDABLE
BEGIN
POPUP ファイル
BEGIN
MENUITEM 開く, IDM_FILE_TEST
MENUITEM アプリケーションの終了, IDM_FILE_EXIT
END
END
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
ちなみに、もともとリソースは、以下の記述がしてありました。
エディタでダイアログを新規にデザインしただけなのでリソースだけが変更されたと思うんですけど。
#include test1_def.h
IDR_MAINFRAME MENU DISCARDABLE
BEGIN
POPUP ファイル
BEGIN
MENUITEM 開く, IDM_FILE_TEST
MENUITEM アプリケーションの終了, IDM_FILE_EXIT
END
END
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_MAINFRAME test1
END
>ちなみにプロジェクトは「Win32Application」で作成し、「空のプロジェクトを作成」を選んだんですけど、
>これが原因ですか?
これならMFCは使っていませんよね?
>ちなみに、もともとリソースは、以下の記述がしてありました。
>エディタでダイアログを新規にデザインしただけなのでリソースだけが変更されたと思うんですけど。
Win32Applicationでダイアログをデザインしただけでは、MENUのリソースは作成されません。
別のプロジェクトで試してみて、違いを比べてみてはいかがでしょうか?
>STRINGTABLE PRELOAD DISCARDABLE
>BEGIN
> IDR_MAINFRAME test1
>END
この辺も自動では作成されないと思いますし・・・
たびたびすみません。ごみです。
どなたか今まで作成してきたプログラムに
1「挿入」-「リソース」メニューを選択する
2「Dialog」を選び、「新規作成」を押す。(ダイアログ編集ウィンドウが表示)
3ダイアログをデザインする
の手順でダイアログリソースを追加した方いらっしゃいますか?
この後、ClassWizard でクラスの追加をしたんですけど(この時色々メッセージボックスが出る)それがいけないのでしょうか?
なにか手がかりが欲しく板を汚してしまいました。すみません
Bunさん、いつもいつも丁寧にお返事ありがとうございます。
MFCを使用していますが、やはり問題ありましたか?
ただ、ウィンドウ表示するプログラムは、「Win32Application」で作成し、「空のプロジェクトを作成」を選んで作成しました。全部ファイルは手書きです。
このウィンドウを表示するプログラムのリソースファイルに記述を追加して、「ファイル」というメニュー項目を表示させました。この「ファイル」を選択するとOnFileTestメソッドが呼ばれるように記述してあります。
このOnFileTestが処理をする記述に ダイアログオブジェクトを作成し、DoModalで表示させようとしています。
この表示させるダイアログを「挿入」「リソース」からデザインしようとしています。
なにか他の方法で作成したほうが良いのでしょうか?
ソースは、単純に以下の記述のみです
#include <afxwin.h>
#include <afxext.h>
#include test1_def.h
#include test1.h
Test1 z_app;
Test1Wnd z_mainWnd;
Test1::Test1()
{
}
Test1::~Test1()
{
}
BOOL
Test1::InitInstance()
{
if (z_mainWnd.LoadFrame(IDR_MAINFRAME) == FALSE) {
return FALSE;
}
m_pMainWnd = &z_mainWnd;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
Test1Wnd::Test1Wnd()
{
}
Test1Wnd::~Test1Wnd()
{
}
BEGIN_MESSAGE_MAP(Test1Wnd, CFrameWnd)
ON_COMMAND(IDM_FILE_TEST,OnFileTest)
ON_COMMAND(IDM_FILE_EXIT,OnFileExit)
END_MESSAGE_MAP()
void
Test1Wnd::OnFileTest()
{
test1Dlg dlg;
dlg.DoModal();
}
void
Test1Wnd::OnFileExit()
{
DestroyWindow();
}
>MFCを使用していますが、やはり問題ありましたか?
>ただ、ウィンドウ表示するプログラムは、「Win32Application」で作成し、
>「空のプロジェクトを作成」を選んで作成しました。全部ファイルは手書きです。
普通はこの場合 WinMain関数からはじまるプログラムを記述します。
この場合にはMFCを使わないのが一般的だと思います。
MFCを使う場合にはMFC AppWizardからプロジェクトを使えばよいと思います。
MFC AppWizardからプロジェクトをつくって、ごみさんのおっしゃる手順で
ダイアログを作成してみましたが、なんの問題もありません。
一度、別のプロジェクトで試してみてはいかがでしょうか?
私にはこの程度したアドバイスできません。m(__)m
Bunさん、お返事遅れてごめんなさい。
#include afxres.hを.rcファイルに記述したら上手くいきました。
色々試しました。ありがとうございます。