■MFC相談室 mfc11.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
関連リンクは >>2-10 の辺り。
0002デフォルトの名無しさん
NGNG■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc2.2ch.net/test/read.cgi/tech/1062098350/
■ VisualC++(MFC限定)相談室 MFC8.dll■ (スレタイ壊れているけど前スレ)
http://pc2.2ch.net/test/read.cgi/tech/1056584836/
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc2.2ch.net/test/read.cgi/tech/1047949606/l50
■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc2.2ch.net/test/read.cgi/tech/1039607377/
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/tech/kako/1028/10285/1028553308.html
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/tech/kako/1021/10216/1021620974.html
■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/tech/kako/1014/10140/1014057520.html
■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/tech/kako/1008/10080/1008031675.html
■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/tech/kako/989/989902845.html
0003デフォルトの名無しさん
NGNGZ!
0004デフォルトの名無しさん
NGNG>>972
Thanks!
これでOKザウンス!
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG本当です。
0008デフォルトの名無しさん
NGNGシニ
で命運尽きたと見るべきだろう
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG最初からMS提唱のプログラミング技術は信用していない。
0012デフォルトの名無しさん
NGNGUNIXのパクり
CORBAのパクリ
SmallTalkのパクリ
Javaのパクリ
オリジナルは??
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG.NETの開発環境やブラウザのSleipnirとかで使ってる
アイコンの背景の変わるツールバーってどうやって実装するんでしょう?
スタイル設定とかで駄目なん?
0017デフォルトの名無しさん
NGNGMFCを継承していじりたおす。
0018デフォルトの名無しさん
NGNG×ボタンでアプリケーションを終了させると、
「コード 20 (0x14) で終了しました。」
で、終了して、タスクバーから終了させると、
「コード 61536 (0xF060) で終了しました。」
と、表示されます。
0で終了していないので、どこかにエラーが潜んでいるのかと思うのですが、
どうやって調べたらよいでしょうか?
検索してもそれらしい情報がなくて、
ヘルプでも、0でなければエラーがあるって事しか書いてないので、
どうやったらいいのかと。。。
どなたか知ってる方お願いします。
0019デフォルトの名無しさん
NGNGEscキーで終了すると0x1bで、Enterキーで終了すると0x0dになるはずですが。
これはちっともエラーではございません。
0020本田
NGNGCORBA
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG初歩的な質問ですが、
VisualC++で新しいMFCプロジェクトとしてMDIを作るとき、
初期状態のコードで下記の部分がありますが、
>myappli.cpp
BEGIN_MESSAGE_MAP(CmyappliApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// 標準のファイル基本ドキュメント コマンド
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// 標準の印刷セットアップ コマンド
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)のコマンド(メニュー)を選ぶと自動的にMDIウィンドウが作成されますが、
このMDIウィンドウを作成するコード(ソース)がどこにも記述されてないのに、どうしてMDIウィンドウが作成されるのでしょうか?
また、ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)も同じく、ファイルを開くDialogが出てきますが、
このコモンダイアログを表示するという記述がされている部分がありません。
これらのコード(ソース)は、どこに記述されてるのでしょうか?
0023デフォルトの名無しさん
NGNGVCをインストールしたディレクトリ下のMFCってとこにソースがある。
その中をgrepしてみれば?
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGCWinAppの初期化コードの中
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
とするとでてこない。この辺が関係してる。
0026デフォルトの名無しさん
NGNGプロジェクトの新規作成でMFCのMDIを作ったのですが、
そのMDIをSDIに変更したいと思いして、
部分部分を修正したんですが、
どうしてもエラーダイアログ「空のドキュメント作成に失敗しました。」と表示されて、
MainFrameが作成されず、アプリケーションが終了してしまいます。
何故でしょうか?
修正箇所は、
CMDIFrameWnd → CFrameWnd
MultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_system_mfcTYPE,
RUNTIME_CLASS(Csystem_mfcDoc),
RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
RUNTIME_CLASS(Csystem_mfcView));
↓
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(Csystem_mfcDoc),
RUNTIME_CLASS(CMainFrame), // メイン SDI フレーム ウィンドウ
RUNTIME_CLASS(Csystem_mfcView));
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
↓
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
0027デフォルトの名無しさん
NGNGMFCを使ったダイアログを
スタティックライブラリで実現できるんでしょうか?
DLLで出来るのはわかってるんですが。
820 名前:デフォルトの名無しさん[sage] 投稿日:04/06/27(日) 14:50
>>819
Prof 以上ならできる。
821 名前:デフォルトの名無しさん[sage] 投稿日:04/06/27(日) 15:21
>>820
リソースは
リンクするメイン側に置くのですか?
0028デフォルトの名無しさん
NGNG気になったのでちょっと調べてみたよ
Error: Trying to create object which is not DECLARE_DYNCREATE
アウトプットに以下のメッセージが出て失敗してたので
mainfrm.hのDECLARE_DYNAMICをDECLARE_DYNCREATEに
mainfrm.cppのIMPLEMENT_DYNAMICをIMPLEMENT_DYNCREATEに
それぞれ変えればOKだったよ
つーか、新規に作ったSDIと見比べればOKかと・・・・
0029デフォルトの名無しさん
NGNGのように、外部ファイルドロップで起動した時、
ドロップしたファイル名を取得するにはどうすれば良いですか?
0030デフォルトの名無しさん
NGNGWizardが吐いたソースならCHogeApp::InitInsatance()の中に
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
ってコードあるでしょ。そのあたりで調べてみれば?
あと、__argcと__argvとか。
0031デフォルトの名無しさん
NGNG助かります!調べてみます!
0032デフォルトの名無しさん
NGNG文字列で受けるなら
CString cmdstr = GetCommandLine();
__argc変数を使うなら
for(int i = 1; i < __argc; i++){
CString cmdstr = __argv[i];
}
どちらかというと後者の方が扱いやすいね
0033デフォルトの名無しさん
NGNG//Buttonの作成
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 150);
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
img.Create(IDB_HOTBUTTON, 22, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
img.Detach();
→img.Create(IDB_COLDBUTTON, 22, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
img.Detach();
矢印部分でデバッグエラーが出てしまいます。
なぜなのかがわかりません。
Createの戻り値を見ても、「1」と出てるのでエラーはないと思われますが。
0034デフォルトの名無しさん
NGNGそこではエラーが出ていないのでは?
0036デフォルトの名無しさん
NGNG文字に色つけたりフォント変えたりリンク踏めるようにするのはどうすればいいんですか?
今はリッチエディットでやってるけど98とXPだとdllのバージョンが違うし
微妙に重かったり、選択の文字色反転がイヤだったりで、改造したいんですよ。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGcodeguruとかにヒントになるソースがあったはず
0039デフォルトの名無しさん
NGNGSetWindowLongでできなかったんですが…
0040デフォルトの名無しさん
NGNG実行することはできないのでしょうか?
自分が作ったExeのみで配布することはできないでしょうか?
0041デフォルトの名無しさん
NGNG1. ResetContent
2. スタイル付け替え
3. AddString
でもダメ?
すでにあるアイテムのソート/非ソートをスタイル変更で
切り替えてくれるような器用な造りにはなっていないと思う。
けど、これはAPIスレ用の話題だな。
>>40
MFCをスタティックリンクすれば。
0042デフォルトの名無しさん
NGNGVC6以前のVCでビルドしたものならDLLの心配はしなくていい
ほとんどのwin32環境でDLL持ってるのが当たり前になってるから
VC7以降なら注釈を付けてDLLのインストールが必要なことを書いておくか
同梱するかした方がいい
0043デフォルトの名無しさん
NGNGMFCのスタティックライブラリを使用にする
0045デフォルトの名無しさん
NGNGスタティック ライブラリで MFC を使用する
0046デフォルトの名無しさん
NGNGメニューの開くと同じ動作させるにはどうすればいいでしょうか?
0047デフォルトの名無しさん
NGNGCMenu
0048デフォルトの名無しさん
NGNG「開く」のメニュー項目と同じIDのボタンを
0049デフォルトの名無しさん
NGNGできました
ダイアログに開くからえたビットマップをダイアログのピクチャーボックス
に表示するにはどうすればいいのでしょう?
0050デフォルトの名無しさん
NGNG・それをダイアログから得たビットマップファイルの場合に応用する
0051デフォルトの名無しさん
NGNG>>42
>>43
>>45
ありがとうございます。
スタティックは知っていたのですが、
結局Exe以外にも添付しなきゃならないとか何とか・・・・
ってどこかのHPで書いてあって、
結局駄目なのか?と思ってたので。。
一応、どのWindowsでも動かないとまずいって言うので、
(95は除外してもよさそうなのですが)
困ってたんです。
環境はVC6なので、大丈夫かと思うのですが。
0052デフォルトの名無しさん
NGNG作ったexeを検証したところ
Win98 WinME Win2000 WinXP (by VirtualPC)
で動いてます
0053デフォルトの名無しさん
NGNGついでにランタイムライブラリもスタティックリンクにしとけよ
0054デフォルトの名無しさん
NGNGCXXXView.h 内で CXXXDoc.h を
CXXXDoc.h 内で CXXXView.h を
それぞれインクルードするとコンパイル出来ないのですが、そう言うものなのでしょうか?
インクルードする順番も一応変えてみたりしたのですが、無理でした。
この方法が無理ならば、DocとViewで相互に呼び出したいときはどうしたらいいのでしょうか?
0055デフォルトの名無しさん
NGNGCView::GetDocument()
CDocument::GetFirstViewPosition()
CDocument::GetNextView()
DocからViewは普通はポインタを使って直接呼び出すのではなく
CDocument::UpdateAllViews()でドキュメントの変更を通知する。
あとはCView::OnUpdate()で。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNGそれにコントロール変数を追加したいんですが
VC6の時は、グループ先頭を「グループ」にチェック入れて
int変数を追加できたんだけど
VC7.1だと先頭のGroupをtrueに設定して
コントロール変数を追加しようとすると
BOOLしか追加できないみたいなんです
intで追加できないんでしょうか?
0058デフォルトの名無しさん
NGNGちょい工夫すれば容易にできる話だが・・・
だが、そーゆーPGはやめておけ。
0059デフォルトの名無しさん
NGNGソースにハードコーディングしたら駄目らしく、
かといってストリングテーブルにいれたら???となってしまいます・・・
文字セットはUnicode文字セットを使用しているので、
エディットボックス間のコピー等は上手く行くのですが・・・
どなたかお知恵を貸して下さい
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGWinXPなんで、言語のあたりをいじると、ハングルIMEが使えます。
けど、OCNの翻訳サイトで単語訳してコピペする予定です
0062デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNG今AppWizard見てみたのだが、リソースに使用する
言語ってコンボがあるが、それには日本語、英語しか
ないからOSもVCもハングル版買わないといかんのでは?
0065デフォルトの名無しさん
NGNGMessageBox(NULL, a, L"韓国語", MB_OK);
少なくともこういうのは通るし動くんで、
・ソースはUTF-8とかでハングルで直接書く
・プリプロセッサとして、UTF-8なソースをShift_JISなソースに書き換える
(リテラルのユニバーサルキャラクタへの置き換え)物を作る
でなんとかなるんじゃ。リソースはどうにもなんないかもだけど。
006659
NGNGそこには「韓国語」っていうのもあるんですが、
コード生成時に何やらエラーが出て止まります。
やはり環境が揃ってないと無理なんでしょうかね・・・
レスくれた方、どうもありがとです。
もうちっとVC++で粘ってみます。
と、リロードしてみたら!
>>65
これは、素晴しい!
なんとかなりそうです。感激!
0067デフォルトの名無しさん
NGNGMSDNの「Unires サンプル : Unicode リソース ファイルの使用」
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcsample/html/vcconuniressampledemonstratesuseofunicoderesourcefiles.asp
は?
006859
NGNGサンクス!
国際化対応のサンプルがいろいろ参考になりました!
一度リソースファイルを外部エディタでUnicode保存すると、
VC.NETのリソースエディタから編集がきかなくなる事が分かりました。
(VC.NETのリソースエディタがUnicode未対応の為)
#define KOREAN_1 L"\uD55C\uAD6D\uC5B4" //韓国語
#define JAPANEASE_1 L"\u65E5\u672C\u8A9E" //日本語
#define ENGLISH_1 "ENGLISH"
CString ss;
ss = KOREAN_1;
の様に使う事で、多言語対応する事ができました。
0069デフォルトの名無しさん
NGNGどなたか教えてください。
//App.cpp
#include <afxwin.h>
#include "App.h"
CMainWin::CMainWin()
{
Create(NULL, "sample");
}
afx_msg void CMainWin::OnPaint()
{
//CPaintDC dc(this);
}
afx_msg void CMainWin::OnLButtonDown(UINT nFlags, CPoint point)
{
MessageBox("abcde");//ここで停止(応答なし)
}
BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
END_MESSAGE_MAP()
BOOL CApp::InitInstance()
{
m_pMainWnd = new CMainWin;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return (TRUE);
}
CApp App;
0070デフォルトの名無しさん
NGNG//App.h
class CMainWin :public CFrameWnd {
public:
CMainWin();
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
class CApp :public CWinApp {
public:
BOOL InitInstance();
};
//EOF
OnPaintメッセージハンドラにCPaintDC dc(this)を記述すると問題なく動作
します。理由がどうしてもわかりません。
007169
NGNG0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGメンバ関数版じゃなければ表示されるんでない?<MessageBox()
AfxMessageBox()だっけ?
0074デフォルトの名無しさん
NGNGファイルの保存でユニコードで保存してやると
ちゃんと保存される。
0075デフォルトの名無しさん
NGNGほんとだね
これはなかなか興味深い
ちょっと調べてみるか
007675
NGNG何時までたってもウインドウが無効領域のままになる
なのでOnPaintの無限ループのような状態が起きている
これのせいで、MessageBoxがメッセージを受け取れないみたいだね
WM_PAINTのディフォルト処理を入れなきゃウインドウズプログラムはだめだってことで
007775
NGNGちゃんと書くと
WM_PAINTメッセージってシステムがこの領域は無効な領域(描画が必要な領域)
だと判断したから発生させるメッセージ(よく再描画するのにInvalidateを呼び出すが
これは、アプリ側で無理やり無効な領域にしているってこと)
このメッセージを受け取ったアプリ側は、適切な描画処理をするもしくは
ウインドウズディフォルトの処理に任せる
このとき使用されるAPIがBeginPaint EndPaint、MFCならCPaintDC
このAPIもしくはクラスを使用した場合、無効領域がクリアされるため
再び無効領域が出来るまでになるまでWM_PAINTが発生されることは無い
69の作ったプログラムでは、WM_PAINTメッセージのハンドラで何も処理をしない為
何時までたってもその領域が無効であるとシステム判断するのでWM_PAINTを繰り返す
WM_PAINTは優先度の高いメッセージなので、この処理が完了しないと他のメッセージは
受け取れない、メッセージボックスはWM_INITDIALOGなど一連のメッセージを受け取って
処理をしない限り動けないので何時までたってもそのメッセージを受け取れない
つまりプログラムが停止しているわけではなく、OnPaintメッセージでループしている
説明下手ですまんが、大体のニュアンスは分かっていただけたかな?
0078デフォルトの名無しさん
NGNG多言語リソースは.rc2の方に書いておけば、リソースエディタは影響受けない。
もちろん、逆にそこの部分はリソースエディタの支援をまったく受けられなく
なるんだけど、C(++)ソース中にユニバーサルキャラクタで書き込むよりは
可読性があっていいんじゃないかと。
ちなみにユニコードで保存したrc2ファイルは、テキストファイルとして
VisualStudioで編集できる。
007969
NGNGWM_PAINTメッセージが送られ続けているということですね。
Windowsプログラムはまだやり始めたばかりでわからないことが多いですが
とても楽しいです。
これからもがんばっていこうと思います。
本当にありがとうございました。
0080デフォルトの名無しさん
NGNG何かいいコントロールとかってありますか?
ピクチャーコントロールって、こういうときに使うのでしょうか?
0081デフォルトの名無しさん
NGNG俺はこういう時に使ってる
0082デフォルトの名無しさん
NGNGダイアログボックスに貼り付けると、IDがIDC_STATICとなって、
普通のスタティックテキストと扱いが同じなんだよね。
で、どうやって使わせようとしているのかの意図が読み取れなくて???
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGスライドさせてそのアプリケーションの表示をスクロールさせたいのですが、
スクロールバーそのものの位置は更新できるんですけど表示はスクロールしません。
どうやればよいのでしょうか?ちなみに今は
void CXXX::foo()
{
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
::GetScrollInfo(m_hScroll, SB_CTL, &si);//m_hScrollはスクロールバーのHWND
SCROLLINFO tmpsi = si;
tmpsi.fMask = SIF_POS;
int pos = si.nPos;
while(pos < si.nMax)
{
tmpsi.nPos = pos;
::SetScrollInfo(m_hScroll, SB_CTL, &tmpsi, TRUE);
//キャプチャ処理
pos += si.nPage;
}
}
という感じです。
0086デフォルトの名無しさん
NGNGInvalidateRect()してみるとか?
0087デフォルトの名無しさん
NGNGプロセス間通信はイベントオブジェクト以外苦手じゃ
0088デフォルトの名無しさん
NGNGそれじゃアプリにスクロール要求は出ない。
他アプリをスクロールさせるってのはやったことないけど、
単純にWM_xSCROLLを送ればいいんじゃなかろうか。
0089デフォルトの名無しさん
NGNGMessageBoxがダイアログの中央ではなく、画面の中央に表示されて
しますのですが、ダイアログの中央に出す方法はありませんか?
環境はVC++.NET 2003です。
/* スレッド作成 */
m_Thread = AfxBeginThread(func, (LPVOID)this, THREAD_PRIORITY_NORMAL);
/* スレッド関数 */
static UINT func( LPVOID pParam )
{
CHogeDlg *pHogeDlg;
pHogeDlg = (CHogeDlg*)pParam;
pHogeDlg->Hogehoge();
return 0;
}
/* 実行部分 */
int CHogeDlg::Hogehoge( void )
{
AfxMessageBox("Hoge",(MB_OK | MB_SETFOREGROUND | MB_ICONEXCLAMATION | MB_TASKMODAL),0);
}
0091デフォルトの名無しさん
NGNG普通はどっちなんだっけ?
ともかく、ダイアログ関係を中央に出そうとするのはCenterWindowの仕業だから、
そこにブレークポイントをかけて、しかるのちに対策を考えればいいかと。
0092デフォルトの名無しさん
NGNGそのスレッドでダイアログの情報を持ってないのが原因だろうから、
何らかの方法でCWnd*を渡してメンバ関数版を使えばいいんでないかな。
0093デフォルトの名無しさん
NGNG試していないけど、CHogeDlgがCDialogを継承
しているならのメンバ関数のメッセージボックスを
呼び出せばいいんじゃないの?
0094デフォルトの名無しさん
NGNG>ダイアログの中央に出す方法はありませんか?
方法はある。 WM_INITDIALOG
もっと簡単な方法が知りたいってことか?
どんくらいまでわかるのかを書かないと
それこそ基本中の基本から説明せにゃならん。
もちろん、それは万単位が相場で只ではできない。
0095デフォルトの名無しさん
NGNGMoveWindow()とかSetWindowPos()でサイズを変えようとすると
必ず落ちますが(DEBUGビルド時)、これって許されないのでしょうか。
CChildFrameのサイズに合わせて大きさを変えたいのですけど。
009695
NGNG簡単にいいますと、フォーム内のダイアログテンプレートのサイズを
変更するにはどうしたら良いのか、ということです。
単純にGetDlgItem()ではダメですよね。NULLが返ってきてしまいます。
■ このスレッドは過去ログ倉庫に格納されています