- ベストアンサー
途中からMFCを使用したい
はじめて質問させていただきますVisual C++初心者です。 現在Visual C++ 6.0で開発作業を行っていますが大変困っています。 前任者が「MFCを使用しない」でプロジェクトを作成していたのですが、前任者の退職により本作業を引き継ぐことになりました。 ほとんどAPIのみで作成されたいましたが、MFCを使用したいと考え、プロジェクト設定から「共通DLLでMFCを使用」にしたところ、リンカエラー(LNK2001)が続出しました。(恐らくAPI使用分だけ出ているのだと思います。) このように途中からMFCを使用する場合、簡単に設定変更できるものなのでしょうか。やはり、MFC使用でプロジェクトを作り直してからコードを移植していったほうが早いのでしょうか。 諸先輩方のご意見を参考にさせてください。宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ダイアログ(CDialog)なら比較的簡単に可能かもしれません。 CDialogを継承したクラスを使います。 その後にCDialog::DoModalを呼べばダイアログは表示できると思います。 あとAfxWinInitという関数を前もって呼んでおく必要があります。 試しにMFCの使っていないコンソールWin32プログラムから CDialogを呼ぶように変更しましたがうまくいきました。(環境はVisual Studio 2005です) まずリソースエディタで ダイアログを作ります。それをIDD_DIALOG1とします。 #include "stdafx.h" #include "resource.h" class CMyDialog : public CDialog{ public: CMyDialog() : CDialog(IDD_DIALOG1) {} }; int main() { if (AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0 )){ CMyDialog* pDialog = new CMyDialog(); pDialog->DoModal(); } return 0; } ※#include "stdafx.h"の内容 pragma once #define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <tchar.h> #include <afxwin.h> #include <afxext.h> #include <afxdtctl.h> #include <afxcmn.h>
その他の回答 (2)
- furyfox
- ベストアンサー率56% (58/103)
「既存のプログラムでCStringなどのMFCを使用するには」 http://www.doumo.jp/postgretips/tips.jsp?tips=20
お礼
ご回答ありがとうございます。 リンク先を参考にし、ビルドが通るようになりました。 CStringやCFile等が使用できるようになり、快適に作業を進められそうです。
補足
追加の質問申し訳ありません。 ダイアログベースのアプリケーションなので、あわよくばダイアログクラスを追加したい(コンボボックスやリストボックスにメンバ変数を追加して扱いたい)のですが、クラスが存在しないため新規作成せよといわれました。新規作成したら新たにダイアログクラスのcppファイルも追加され、そのファイルにいろいろ記述しなければならないようです。既存のcppファイルでダイアログクラスを扱いたいのですが、どのようにすればよいのでしょうか。 初歩的な質問で申し訳ありませんが、ご存知の方がいらっしゃればご教授願います。
MFCはカプセル隠蔽してますから、表記同調は困難ですよ。 SDKソースとMFC擬似ソースのトランスレータでもあれば可能かも しれませんが開発環境管轄なら再構築ですよね・・・。 WM_PAINT/OnDraw,なら移植調でできますが、コンテキスト処理となると ハンドラルーチンを構築する必要ありますから・・・。 外部設計仕様から内部設計仕様は共通なんですよね? WM_?? を1つずつメソッド作成して結合させるのが無難かと 思われます。私の知る限りでは・・・。
お礼
やはり再構築がよさそうですね。 横着して楽にできるのであればと思って質問させていただいたんですが、そんな都合よくいかないですよね。 ご回答ありがとうございました。
お礼
大変丁寧に説明してくださりありがとうございます。 サンプルまで記述していただいて大変わかりやすかったです。 上記方法でうまくいきそうなので、独自のコードを追加していきたいと思います。 ありがとうございました!