[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 11:54 / Filesize : 106 KB / Number-of Response : 448
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

■MFC相談室 mfc20d.dll■



1 名前:デフォルトの名無しさん [2008/12/26(金) 00:43:36 ]
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc19d.dll■
pc11.2ch.net/test/read.cgi/tech/1207301867/

381 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 01:37:19 ]
つ oninitdialog()

最近MFCやってないからあやふやだ・・・
来週からまた使うことになりそうだからリハビリせねば

382 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 01:53:11 ]
>>381

thx!できました。オーバーライドするのね。

↓参考にしました
rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200504/05040016.txt

383 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:26:30 ]
>>382
既に見ていないかもしれないが ...

ダイアログ派生クラスに、ラジオボタンに対応するint型のメンバ変数を
割り当てて、DoDataExchange()内でDDX_Radio(pDX,...)でコントロール
に関連付けておけば、ダイアログウィンドウが生成されていないタイミ
ングでも、クラスのオブジェクトが生成された時点で、メンバ変数には
アクセスできるので、メンバ変数の初期値を変更してDoModal()すれば、
ラジオボタンの初期値を変更できるよ。

クラスウィザードでメンバ変数を割り当てると、コンストラクタで「-1」に
初期化されるコードが自動生成されるので、これを0〜の値にすればいい。

384 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 19:36:04 ]
>クラスウィザードでメンバ変数を割り当てると、コンストラクタで「-1」に
>初期化されるコードが自動生成されるので、これを0〜の値にすればいい。
VS2008 だと初期値は 0。修正されたのかな。

ちなみに、変数のカテゴリには Value を選ぶこと。

385 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:18:58 ]
MSDNのScribbleサンプルなんかを見ると、
リスト(m_strokeList)や配列(m_pointArray)などのメンバは堂々とpublicで、
描画時などは外から直接参照したり操作してるけど、
これってやはり手を抜いているだけでしょうか?
それとも、この程度のものはいちいちカプセル化しないものなのでしょうか?

386 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:44:12 ]
Scribbleサンプルって15年くらい前からあるよな・・・

387 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 11:48:51 ]
>>385
クラスウィザードでメンバ変数を作ると、意識して設定しない限り public になる。

388 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:00:41 ]
MSのサンプルは「動けばまだマシな方」くらいに思っとかないと。

389 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:03:47 ]
CPaneDialog型って、リサイズをさせたくない場合どうすればいいんでしょ?
知っておられる方、情報をお願いします。



390 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:31:33 ]
CBasePane::CanBeResized をオーバーライドして FALSE を返す

391 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:32:21 ]
「このメソッドは現在実装されていません。」だった。すまん

392 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:34:25 ]
実装すればいんだから、それでいい

393 名前:389 mailto:sage [2009/03/03(火) 09:10:56 ]
>>390-392
Visual Studio 2008のIDEでは、
派生元へのオーバーライドができないのね・・・手書きなのか・・・

できました!
ありがとうございます!

394 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 14:23:17 ]
むみません。
ダイアログ上でレイアウトされたグループボックスにて、
文字色をで変更しようとSetTextColorを使ったのですが、
反映されませんでした。

何かコツみたいなものがあるのでしょうか?

ちなみに環境はVS2008でMFC Feature Packを使っています。

395 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 14:56:00 ]
むみません。

396 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 17:47:13 ]
>>394
CWnd::OnCtlColor

397 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:37:02 ]
VC++ 6 でプログラミングしています。
ポップアップメニューを表示しています。
各行で文字位置を合わせたいので固定ピッチのフォント
を利用したいのですが、ポップアップメニューのフォント
はどのようにすれば変更できますか?

ポップアップメニュー作成は、TrackPopupMenuを使っています。

398 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:53:49 ]
>>397
OwnerDraw Menu にする

399 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:48:22 ]
ちと古いけど>>129の件、おれも悩んでたんで調べた結果を貼っとく。

afxGlobalData.SetMenuFontで設定するといいらしい。
他にもafxGlobalDataをいじるといろいろできるけど、
これ直接いじっていいんかな?



400 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:37:04 ]
それをいじる関数として、CMFCMenuBar::SetMenuFont() が用意されているんだが。

401 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:27:13 ]
あれ、CMFCMenuBarのヘルプを見てもFont関係が見あたらなかったから
MFCのソースを追っかけたのに・・・・

思いっきり見落としたらしい。

402 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:56:41 ]
ついでに言っておくと、WM_SETTINGCHANGE が飛んでくると
CMFCMenuBar::SetMenuFont() した内容はクリアされるから、再度設定しなおすこと。:-)

403 名前: ◆8x8z91r9YM [2009/03/09(月) 21:08:28 ]
質問です。
VS2005 MFCでCrystalReport(PUSH型)を扱ってる
参考になりそうなサイトをご存知の方おられましたら
教えていただけませんでしょうか?

C#やVBなどは表示したいデータをDataSetでまとめて
Crystalreportに渡して表示できますが、
それをMFCでどのように実装すればいいのか悩んでおります。。
よろしくお願い致します。


404 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 00:51:10 ]
VS2008SP1のCMFCToolbarで、初期状態からアイコンの右側にテキストラベルを表示する方法は無いでしょうか。
ToolbarResetを発行してやると、文字は表示されるにはされるんですが、
カスタマイズ設定も消えてしまうので・・・

405 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 02:04:50 ]
横に表示できたっけ?
CMFCToolBar::EnableTextLabels() だと下に表示だよな。

CMFCToolBar::GetButton( nIndex)->m_bText = TRUE; あたりで試してみ。

406 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 06:25:28 ]
VS2005 WinInet で http Postを使ってファイルアップロードをするプログラムを書いているのですが
うまくいきません。 ソース 80行程度をアップしてアドバイスを頂いてもよろしいでしょうか?

1週間ぐらい頑張りましたが分からなかったもので・・・。

407 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 08:02:46 ]
それのどこがMFC?

408 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:28:21 ]
質問部分にCInternetSession等のMFCクラスを使ってれば質問は可
ただ「うまくいきません」としか説明できないんじゃ答えるつもりはない。

409 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:47:21 ]
406です。スレ汚し失礼します。

状態としてはデバッガ出力ではエラーは帰ってきていませんが
スニファツールで見ると サーバから501エラーが帰ってきています。
サーバ側のPHPテストプログラムの方は $_FILES["upfile"]["tmp_name"]
にも $_FILES['userfile']['error']にも 値が入ってきません。

多分ヘッダの送り方、設定の仕方がおかしいと思うのですが。。。

ソースは以下になります。



410 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:49:25 ]
80行貼るのかよ
ろだ使っては

411 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:49:28 ]
#define APP_NAME "PostTool"
#define BOUNDARY "hogehoge"
#define POST_FILE "C:\\TEST.DAT"
#define BUF_SIZE 2048

bool PostData(TCHAR* uri){
bool bRtn = false;
try
{
DWORD dwServiceType = 0, statusCode;
CString strServer, strObject, strBuf, strBoundary = TEXT(BOUNDARY);
INTERNET_PORT nPort;
char szBuf[BUF_SIZE + 1];

if (AfxParseURL(uri, dwServiceType, strServer, strObject, nPort) == false)
{OutputDebugString(TEXT("PostData() AfxParseURL失敗\n")); goto pd_End;}

CInternetSession session(TEXT(APP_NAME));
CHttpConnection* conn = session.GetHttpConnection(strServer,
CHttpConnection::HTTP_VERB_POST, nPort, NULL, NULL);

CHttpFile* file = conn->OpenRequest(CHttpConnection::HTTP_VERB_POST,
strObject, NULL, 1, NULL, NULL,
INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE);

412 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:59:43 ]
すいません あっぷろだに置きました。
411の投稿すいませんでした。

ttp://www7.uploader.jp/dl/game/game_uljp00007.txt.html

413 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:04:14 ]
support.microsoft.com/kb/811262/ja
エラー メッセージ : エラー 501/505 - 未実装または未サポート

[HTTP 1.1 を使用する] チェック ボックスをクリックしてオフにし、[OK] をクリックします。
テストして問題が解決したかどうかを調べます。

2002 年 12 月現在、HTTP 1.1 は新しい Internet プロトコルです。
一部の Web サイトでは HTTP 1.0 が使用されているため、HTTP 1.1 を使用した場合、
接続の問題が発生することがあります。


414 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:44:28 ]
こういう場合
プログラムに問題がある
設定が間違ってる
使い方が間違ってる
ネット上にトラブルがある
メールを送った相手に問題がある

みたいにありとあらゆる原因が考えられるわけだけど
いきなりプログラムのソース見ろと言われても
設定が間違ってる
使い方が間違ってる
ネット上にトラブルがある
メールを送った相手に問題がある
だったら見るだけ無駄だろ

415 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:49:36 ]
サーバ側のhttpdのログ見たらわかると思うよ

416 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:01:28 ]
こういった感じでソース書いている人って多いのか?

・グローバル関数だし、
・コメントないし、
・goto ラベル使い放題だし、
・for(;;)だし・・・ (while() 使えよ)

417 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:15:34 ]
別に習作なんだし
そういう関係ないところつっこむからソース出したがらない質問者が増える

418 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:29:12 ]
Httpは手順が多くてネストが深くなるしエラー処理も多いからどうやっても汚くなる
手抜きしないできれいに書いてあるサンプルあったら見てみたい

419 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:32:03 ]
>>416
> ・グローバル関数だし、
> ・コメントないし、

コミュニケーション能力重視とか、ヒューマンスキル重視の現場では、
ありがちだ。 業務で引き継ぐと悲惨なパターン。

しかも極端な場合、グローバル変数の名前が「i」なんて場合もある。

> ・for(;;)だし・・・ (while() 使えよ)

個人的には「while(1)」の方が好みだけど、「for(;;)」の方が推奨
されているらしい。

しかし、「for(;;)」を使いながら、forループ内で「if(...) break;」
はやめてほしい。



420 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 22:46:05 ]
>>419
>しかし、「for(;;)」を使いながら、forループ内で「if(...) break;」
そりゃ無茶や。
全く脱出しないループで外部から殺してもらうってことなら兎も角、
ループ内の何かの事象で脱出したくなることくらいあるだろよ。

421 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 22:52:57 ]
>>416
while(1)はMS-C V6がwarning吐いてたから、おれはfor(;;)使うよ。

>>420
そういう場合forに脱出条件を入れろという説がある。
おれは基本的に嫌いだけどね。


422 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:05:32 ]
for (;;) {
...;
someStatus = someFunction();
if (someStatus) break;

...;
...;
}
--
よくありがちなこんなコードを否定するのかな?

423 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:25:55 ]
someStatus が いつか必ず TRUE になるという保証があるなら、かまわんのでは。

無限ループの可能性を残すコードを、おれ個人は書かないけど。

424 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:30:58 ]
for (;;)の正しい使い方が良くわからないからMFCのソースの中探してみたけど
やっぱfor (;;)とbreakはセットで使ってるね

以下VC6のMFC
SRC\AFXMEM.CPP(322): for (;;)
SRC\AFXMEM.CPP(371): for (;;)
SRC\APPUI1.CPP(172): for (;;)
SRC\ARCCORE.CPP(816): for (;;)


425 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:35:02 ]
下らない疑問かもしれませんが質問させてください。
MFCでコントローラに追加した文字列のメモリ管理ってどうなってるんでしょうか?

例えば、以下のような場合、FuncA()関数を抜けたときに
strのアドレス先のメモリが解放されて、コンボボックスで
strの文字列が参照できなくならないのでしょうか?
試したところ問題ないようですが、不思議です。

void FuncA() {
CString str;
m_pCmbBox->AddString(str); //メンバ変数であるコンボボックスに文字列追加
}

426 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:45:01 ]
コントロールが別のところでメモリを割り当ててるのさ。メモリの割り当てに失敗したら
CBN_ERRSPACE が通知されてくる。

これはMFCの質問じゃないな。

427 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:50:26 ]
>>426
すみません、もう一歩だけお願いします。
調べるなら、C++のメモリ管理で調べればいいでしょうか?

428 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:51:14 ]
フォントなんかが参照不能になるのは
描画のタイミングが関数抜けた後だから
文字列は渡し終わってるから問題なし

429 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:10:04 ]
>>426, 428
まとめるとこうでしょうか。
・コントローラに文字列を渡すと、コントローラが新たにメモリを割り当てる。
・この場合、関数を抜けた後も、描画タイミングで割り当てられたメモリが参照されるので問題なし
 ただしフォントの場合は、メモリ割り当てが行われない(?)ので、関数を抜けると参照不能

コントローラのメモリ管理について調べてみます。
ありがとうございました。



430 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:18:04 ]
どうでもいいけど「コントローラ」ってなんだよ。
controllerじゃなくてcontrolだぞ。

431 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:28:17 ]
>>430
訂正thx。気をつけますw

432 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:44:32 ]
>ただしフォントの場合は、メモリ割り当てが行われない(?)ので、関数を抜けると参照不能
これは単にスコープの問題

433 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 10:43:00 ]
スコープの問題じゃなくて、寿命の問題。
スコープが外れても寿命が続くのなら大丈夫。
だから例えば、staticでも(一代限りは)使える。

434 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:06:01 ]
フォントって、CFontクラスやCBrushクラス等のGDIオブジェクトをローカル
変数で作成したなら、関数を抜けた時点で変数の寿命が尽き、DeleteObject()
を呼んでいなくてもデストラクタから(メンバ変数のm_hObjectを使って)強制
的にDeleteObject()が呼び出され、(GDIオブジェクトとそのハンドルが)破棄
される。

CFont *pFont=new CFont;

などとやった場合、ポインタ変数の寿命が尽きても、newしたオブジェクト
自体はdeleteはされないので、プロセス終了まで、紐が切れた凧のように
メモリ空間に残る。

95系だとプロセス終了でも解放されず、リソースリークになるんだっけか?

static で宣言したオブジェクトでも、

  if(s_FontStatic.GetSafeHandle())
    s_FontStatic.DeleteObject();
  s_FontStatic.CreateFontIndirect(...);

と破棄する手順を踏めば、何回でもリサイクルできる。

435 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 02:34:29 ]
CMFCToolbar上にStatic Textを作成できないですかねぇ・・・

436 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 10:05:36 ]
>>435
CMFCToolbar って、CDialogBar よりも美味しいの?

スタティックテキスト相当な機能なら、わざわざウィンドウを置かなくても
CString型のメンバ変数を追加して、ツールバーの描画処理を自前でやれば
いいだけのような肝。


437 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 23:37:17 ]
>>435
つCStatic::Create

438 名前:デフォルトの名無しさん [2009/03/22(日) 15:54:16 ]
ダイアログ上のコントロールのタブオーダーが一つ前のコントロールIDを調べるにはどうしたらいいんですか?
例えばCEditが10個並んでいるとして、5番目のタブオーダーのCEditにフォーカスがある時に、
4番目のタブオーダーのコントロールIDを調べたいんですが。

"タブオーダー MFC"でググってもタブオーダーを変更する方法しか見つからなくて。
タブオーダーがらみのAPIって無いんですかね?

439 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:23:08 ]
CWnd* pWnd = wndEdit.GetWindow( GW_HWNDPREV):
if ( pWnd->GetStyle() & WS_TABSTOP) UINT nID = pWnd->GetDlgCtrlID(); // こいつがそう。

else pWnd = pWnd->GetWindow( GW_HWNDPREV);

以下繰り返しってな感じで取得できないかな。
実際には while ループするほうがお得だろうが。




440 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:14:26 ]
>>439
どうもありがとうございます。
GW_HWNDPREVというのはウインドウのZオーダー順であるだけでなく、
Window上のコントロールのタブオーダー順でもあるんですね。

441 名前:デフォルトの名無しさん [2009/03/22(日) 21:59:09 ]
C初心者スレで相手にされなかったので、質問させてください

MFCでアプリを作っているのですが、
動作確認のため、コンソールも起動しております。
_cprintf_sや_cscanf_s関数を使っているのですが、

_cscanf_s関数でバックスペースのキーを入力すると、
プログラムが無限ループで暴走してしまいます。

普通のscanf()関数のようにバックスペースで一つ前の文字を削除するには
どうすればよいでしょうか?

442 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:07:52 ]
暴走するようなもの使うな

443 名前:名無し募集中。。。 mailto:sage [2009/03/23(月) 09:08:39 ]
MFCも使っているのかもしれないけど_cscanf_s関数ってMFCじゃないし
コンソールならダイアログにEditコントロールを置いて表示・入力するって感じになりそうだけど
デバッグ表示だけならTRACEマクロが便利
値の入力は・・・ちょっと試すだけならブレイクポイントで値の代入とか

444 名前:デフォルトの名無しさん [2009/03/23(月) 21:24:49 ]
いまさらながら、mfcおもしろいお。

詳しい説明書ないかお?

445 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:07:58 ]
SP1以降の解説か、まだないかもな。

446 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 17:14:26 ]
>>444
SP1非対応でよければMicrosoft Pressの「プログラミングVisual C++.NET Vol.1/2」
Vol.2の最後にちょろっと.NETの説明があるけど、それ以外はMFCの説明になってる

447 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:59:37 ]
後はmfcのソース読んどけ、ってところだな。
ドキュメント化されていない情報が山ほどあるし。
別に全部目を通さなくても、疑問に思った箇所だけで十分。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<106KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef