MFC にメニューをつけれない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

MFC にメニューをつけれない

#1

投稿記事 by dic » 9年前

http://www.kumei.ne.jp/c_lang/mfc/mfc_06.htm
ここを参考にMFCにメニューを追加させているのですがうまくいきません。

リソースをひっぱってこれなくてコンパイルエラーになってしまします。

MFC(初級)に詳しい方、デバックをお願いできないでしょうか?

ソースコードを載せておきます。
menu01.cpp

コード:

//	menu01.coo

#include <afxwin.h>
#include "menu01.rc"

class CMyApp : public CWinApp
{
public:
	virtual BOOL InitInstance();
};

class CMyWidnow : public CFrameWnd
{
public:
	CMyWindow();
	afx_msg void OnPaint();
	afx_msg void OnEnd();
	afx_msg void OnAbout();
	DECLARE_MESSAGE_MAP()
};


CMyApp	MyApp;

BOOL	CMyApp::InitInstance()
{
	m_pMainWnd = new CMyWindow();
	m_pMainWnd->ShowWindow( m_nCmdShow );
	m_pMainWnd->UpdateWindow();
	return TRUE;
}


BEGIN_MESSAGE_MAP( CMyWindow, CFrameWnd )
	ON_WM_PAINT()
	ON_COMMAND_( IDM_END, OnEnd )
	ON_COMMAND( IDM_ABOUT< OnAbout )
END_MESSAGE_MAP()

CMyWindow::CMyWindow()
{
	Create( NULL, "猫でもわかるメニュー", WS_OVERLAPPEDWINDOW,
		CRect(100,100,100,+220,100+120), NULL, "MYMENU" );
}

void CMyWindow::OnPaint()
{
	int y;
	RECT rc;
	TEXTMETRIC tm;
	CString str = "粂井康孝:制作";
	CPaintDC dc(this);
	GetClientRect( &rc );
	dc.GetTextMetrics( TA_CENTER );
	dc.SetTextColor( RGB{255,0,0) );
	y = (rc.bottom - tm.tmAscent) / 2;
	dc.TextOut( rc.right/ 2, y, str );
	}

	void CMyWindow::OnAbout()
	{
		MessageBox( "粂井康孝:制作者", "About" );
	}

	void CMyWindow::OnEndSession()
	{
		SendMessage( WM_CLOSE );
	}

リソースファイルです。
menu01.rc

コード:

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.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_MENU1 MENU DISCARDABLE 
BEGIN
    MENUITEM "IDM_MENUITEM (終了""",        ID_MENUITEM40005
    MENUITEM "ヘルプ",                      ID_MENUITEM40006
END


#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED

#endif    // 日本語 resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

コンパイルすると以下のエラーメッセージがでます。

--------------------構成: MFC_SDK_06 - Win32 Debug--------------------
コンパイル中...
menu01.cpp
c:\users\owner\documents\visual c++ 6.0\mfc_sdk_06\menu01.rc(20) : error C2143: 構文エラー : ';' が 'constant' の前に必要です。
c:\users\owner\documents\visual c++ 6.0\mfc_sdk_06\menu01.rc(20) : error C2501: 'LANGUAGE' : 識別名を宣言するのに、型が指定されていません。
c:\users\owner\documents\visual c++ 6.0\mfc_sdk_06\menu01.rc(20) : fatal error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー

MFC_SDK_06.exe - エラー 3、警告 0

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: MFC にメニューをつけれない

#2

投稿記事 by YuO » 9年前

Resource FileResource Compilerによってコンパイルされるものであって,C/C++ソースコードの一部としてincludeするものではありません。
menu01.cppの4行目にある,menu01.rcのincludeを削除し,プロジェクトにmenu01.rcを登録する必要があります。
オフトピック
メニューリソースの名前 ((IDR_MENU1) とCreateで渡す識別子"MYMENU"が異なっているので,それが実行時の問題になるとは思いますが,今回はそれ以前のようなので。

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: MFC にメニューをつけれない

#3

投稿記事 by dic » 9年前

>>YuO様
回答ありがとうございます。
このコードを打っていたときは、どうやら疲れていたようです。

リソースとして追加しました。

しかし、別の問題が発生してしまっていたようです。

私のパソコン環境は(OS)はWindows7
コンパイラはVC++ 6.0 を使ってます。
この環境だと添付したファイルのように、互換性の問題が発生して
コンパイルできませんでした。
問題の rc.exe だけを互換性モード (Windows98,XP) ともに変換して起動すると
rc.exe が起動せず、エラーを出力するのです。

Visual Studio 2015 はインストールしたのですが、いかんせんメモリが不足気味で
あまり起動したくないのですが、手軽にリソースを作れる環境がないか調べます。
添付ファイル
互換性の問題2.jpg

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: MFC にメニューをつけれない

#4

投稿記事 by dic » 9年前

Visual C# もしくはjavaで実装しようかと思います。
解決にしておきます。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: MFC にメニューをつけれない

#5

投稿記事 by Dixq (管理人) » 9年前

今時VC++ 6.0って古すぎませんか。。。
メモリが少ないのであればせめて2008をオススメします。

閉鎖

“C言語何でも質問掲示板” へ戻る