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


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

■MFC相談室 mfc18d.dll■



1 名前:デフォルトの名無しさん [2007/08/01(水) 06:23:28 ]
Microsoft Foundation Classライブラリ専用スレです。

2 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:02:21 ]
前スレくらい貼ってくれてもバチは当たらないと思う >>1

■MFC相談室 mfc17d.dll■
pc11.2ch.net/test/read.cgi/tech/1164073111/l50

3 名前:前スレ986 [2007/08/02(木) 21:54:39 ]
前スレ>987 遅レスだがサンクス

4 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 21:12:33 ]
GUIの設計が大変すぎるんだが
例えばVCLでいうStringGridみたいなもの作りたいとき
MFCだけでやろうとするとListBoxとかListViewとかをベースに
しこしこつくっていくわけなんすかね

5 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 21:44:32 ]
だからMFCは基本的にWin32のラッパなんだと何度言ったら(ry

StringGridって割と便利みたいだし、誰かMFCで実装した奴いるんじゃね?
いなけりゃ、自前で実装して公開すれば皆に喜ばれるよ。

6 名前:デフォルトの名無しさん [2007/08/11(土) 09:45:34 ]
ダイアログの中にマウス関連のイベントやグラフィック表示を扱う
独自のコントロールを置きたいのですが、

・CWndの派生クラス(カスタムコントロール)として作成
・CStaticの派生クラスとして作成

この両者で作り勝手などに違いはありますか?
どちらが妥当な方法でしょうか?

7 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 03:00:57 ]
>>4
よく分からんけど
ttp://www.codeproject.com/miscctrl/gridctrl.asp
ttp://support.microsoft.com/kb/196833/ja
ttp://forums.belution.com/ja/vc/000/098/43s.shtml
こんなん使ったらアカンのか?

8 名前:デフォルトの名無しさん [2007/08/14(火) 06:33:44 ]
CListView(report)とCDocumentの質問なんですが、
CDocumentに、オブジェクトの配列obj[10]を作って、それを配列の引数順にリストに表示させているのですが、
リストでソートしたときに、リストの表示とCDocumentのリンクのさせかたが分かりません。

つまり、リストのどの行に、オブジェクト配列obj[10]の何番目が入っているのか、どうやってリンクさせればいいんでしょうか?

9 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 06:55:17 ]
>>8
CListCtrl.SetItemDataでインデックス・ポインタ等を関連付けておく。
UI上でのインデックスは、GetItemData用と割り切って考えるといい。

10 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 07:21:23 ]
>>9
レス有難うございます。

やってみたのですが、SetItemDateは、 LVITEM 構造体の lParam メンバの値を設定するもののようなのですが、

で、ソートするときに、このlparamの値を、itemの値と同じ通し番号にしているので(他から引っ張ってきたソート用
のコードで、なんでこうしているのかわからないのですが・・・)、
初めにセットしたlParamの値がソートすることで消えてしまいます。
ソートのコードがおかしいのでしょうか?

どうすればよいのでしょう。



11 名前:デフォルトの名無しさん [2007/08/14(火) 07:36:31 ]
>>9
CompareFuncの中もobjを使って比較すればよいのですね。
わかりました。
ありがとうございました。

12 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 08:11:07 ]
>>10
ちゃんと頭を使ってドキュメントを読めば、そんな引っ張ってきたロジックに頼らずに
自分でソートくらい書けるようになりますよ。
尤も、SetItemDateなんてTypoやっているようじゃお郷が知れますがね。

13 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 09:10:37 ]
お郷が知れます(w

14 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 09:34:54 ]
日曜大工ならず、夏休みプログラミングなもんで・・・
スレ汚し勘弁

15 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 23:24:41 ]
>>10
lParamの値からFindItemを使ってアイテムのIndexを取得してソートに利用
すれば良いでしょう。そうすれば、後からソートをし直してもIndexは
変わってもlParamの値は変わらないので、配列に関連付けて使う事が可能です。
この場合lParamはアイテム挿入時に一度セットしたら後から変えないで下さい。

16 名前:デフォルトの名無しさん [2007/08/16(木) 20:44:02 ]

テキストエディタとかにルーラー(目盛り)ついてますが
あれと同等のことをやりたいです。下にスクロールしても常に表示するみたいな
CScrollViewと CDC::IntersectClipRectつかってもうまく行きそうにない・・・。

CViewとIntersectClipRectでスクロールは自前でやるしかないのでしょうか?
# CSplitterWndでルーラー部と本体部の2つのViewってのもありでしょうか・・・

17 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:57:04 ]
>>7
試してみます thx

18 名前:デフォルトの名無しさん [2007/08/17(金) 00:39:30 ]
>>7
その程度のものなら自前で作ってもたかがしれてる
ドキュメント読んで使い方を覚えるほうが面倒だよ

19 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:00:02 ]
すいません。質問です。
ダイアログのクラスの名前を間違えたので、
ダイアログのクラスを一旦削除して、同じ名前のダイアログのクラスを再度作成すると以下のエラーがでます

error C2374: 'classCDialogXXXX' : 再定義されています。2 回以上初期化されています。
'classCDialogXXXX' の宣言を確認してください。
error C2084: 関数 'CRuntimeClass *CDialogXXXX::GetRuntimeClass(void) const' は既に本体を持っています。
'GetRuntimeClass' の前の定義を確認してください
・・・

grepしてもclassCDialogXXXXは一箇所しか見つかりません・・・
同じ名前のクラスを再度作るにはどうすればいいですか?


20 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:13:13 ]
>>19
単に、消し忘れた場所があるだけのような気もするが……
リビルドとかいう基本的な話じゃないよな?



21 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 11:28:49 ]
MFCのソフト1つで、次の場合はダイアログとSDIのどちらが適切ですか?
メニューバーはありで、ツールバーは使いません。
ドキュメントを1つ扱います。
ビューでは、8割がボタンなどで、2割が独自の描画をします。

ビューの一部だけを独自描画の時に、どちらを選ぶのが適切か教えて下さい。

22 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 17:32:08 ]
>>21
画面の一部のみ独自で描画したいというだけなら
DialogでもSDIでもどっちでも構わない。

メニューありでボタンが一杯という所を見る限り
自分ならSDIでViewの種類をCFormViewにする。

23 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:57:42 ]
漏れなら可能な限りダイアログだ。

24 名前:デフォルトの名無しさん [2007/08/17(金) 23:34:25 ]
ダイアログの何が便利なのかさっぱりわからん
大体、CViewから派生させ、すべて自前で描画したほうが
客の理不尽な要求に応じれる。

25 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 00:49:36 ]
配置がリソースエディタで弄れる

26 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 04:41:41 ]
CFormViewでもいじれるやん

27 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:29:11 ]
>>24 の条件でCFormViewって反則じゃね?

28 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:52:49 ]
>>24
>ダイアログの何が便利なのかさっぱりわからん
ビューとドキュメントをわざわざ分離するまでもない場合、コード量が減る。

29 名前:デフォルトの名無しさん [2007/08/18(土) 22:57:02 ]
>>28
その程度のプログラムを作成する必要があるのかしらん?


30 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:28:23 ]
必要がある、と答えられたらそれまでだな。
プログラムの規模とその必要性に関連は無いし。

MFCで小規模アプリ組むの禁止〜!
ってな決まりもないしね。



31 名前:デフォルトの名無しさん [2007/08/19(日) 02:36:15 ]
っえ?
MFCは大規模アプリケーションには向きませんよ

32 名前:デフォルトの名無しさん [2007/08/19(日) 02:50:20 ]
>>24
あれだろ?
MSの仕様から逸脱した仕様を希望する馬鹿な客だろ?
そういうの刎ねちゃって問題無い場合がほとんどだぜ
そいつの好感度上げてもなんもいいことねーし
やったからって次の仕事がくるかどうかも全然関係無い場合が多い

俺はタブフォーカスやショートカットの類は全部高額な金額ふっかけて刎ねてる
やりたきゃ自分のところでやれと
正直、やるだけ無駄、全く意味無し

33 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 05:50:13 ]
ソフト会社入社3年目の初心者です。
MFCは今後は.NETに取って代わられるというような話を聞きました。
実際どうなんでしょ?

34 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 06:30:35 ]
>>33
.NETってなーに?

35 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 06:38:50 ]
.NET Frameworkのことじゃね?
でも.NET FrameworkってC++で使えるの?

36 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 11:43:23 ]
>>33
まあ、単純で簡単な.NETに移っていくのはしょうがないんじゃね。
VSの機能も、明らかにC++よりC#に力入れてるし。
MFCがなくなることはないだろうけど、使う機会はゆっくり減っていくかと。

37 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:25:21 ]
組み込みプログラムとそのツールの作成の仕事が多いから
MFC+C++の形を保ってくれないと困る
ソース流用できねーじゃん
基本理念(オブジェクト指向)が変わらないのに
新しい言語なんて無駄に作るんじゃねぇといいたくなる

38 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 13:50:40 ]
C#やVB.NETは厳密にはコンポーネント指向

39 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:10:15 ]
>>35
C++/CLI

>>37
>組み込みプログラムとそのツール
GUIとファイル処理、通信部でも作っとけば、
ちょっとした組み合わせと改造で事足りるんじゃないか?
その程度だったら、2ちゃん回ってる時間を少し割けば、速効で作れるだろ
VC、VBだろうが、OOPがどうとか目くじら立てるほどのもんかね?
組み込みでアーキテクチャやOSやらが変わったり、
実績のないボード動かしたりするほどの手間でもないだろ

40 名前:デフォルトの名無しさん [2007/08/19(日) 20:01:19 ]
.netでのアプリを出荷したことないから何とも言えないが
客先から見たら、.NETであることによるメリットってなにもないよね?
しかも、.netは遅いなんてことも浸透してるから・・・






41 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 00:32:37 ]
今までいろんなプログラム書いてきたが
MFCほどわからんもんはない

42 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 00:47:01 ]
>>40
なんだろうなあれ?
なんであんな糞動作するんだろか?

スクリプトで動作してんのかな?
Vistaといい動作の糞なアプリが多くなったな

43 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 06:16:33 ]
>>42
糞動作の意味がわからん
中間言語で動いてるんだから初回起動は遅いのがあたりまえだろ
もっさりしているが 異常動作してるわけじゃない

さらにVistaをアプリと分類する頭も逝かれてるな

44 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:28:57 ]
アンマネージドなのは好きになれないが、GUI周りの設計は嫌いじゃない。

45 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:31:23 ]
アンマネージドじゃなくてマネージドだった

46 名前:デフォルトの名無しさん mailto:晒しage [2007/08/20(月) 11:31:13 ]
>>42
>>42
>>42
>>42
>>42
>>42
>>42


47 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 11:38:51 ]
>>40
ヒント

1年目マでも使える
開発期間
ASP.NET

48 名前:デフォルトの名無しさん [2007/08/20(月) 17:14:01 ]
CWinApp* pApp = AfxGetApp();
if (pApp != NULL)
return pApp->DoMessageBox(lpszText, nType, nIDHelp);
else
return pApp->CWinApp::DoMessageBox(lpszText, nType, nIDHelp);

49 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:29:14 ]
>>43
やっぱ、もっさりしてるんじゃんw
これが糞動作でなくてなんなんだと聞きたい

俺等は.Netをサポートしてバージョンをわざわざアップしてやるのに
動作はもっさりすんのか?
お前等なんて一生もっさりしてればいいんだ

50 名前:デフォルトの名無しさん [2007/08/20(月) 22:36:34 ]
CDC::SaveDCとCDC::RestoreDCって、
CDC::SelectObjectの戻り値を最後に戻す方法に比べて、
なにかデメリットってありますか?
こっちのほうがずっと簡潔に書けると思うのだけど。



51 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:15:09 ]
一切合財保存するだろうから、必要なものだけ戻すよりは重いと思う。
でもまあ今時のPCならデメリットと言えるほどのものではないだろう。

52 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 20:45:43 ]
一ヶ所でやる事しか考えないなら
どっちでもいい

53 名前:デフォルトの名無しさん [2007/08/22(水) 12:37:48 ]
>>51
やっぱりSaveDCとRestoreDCのほうが便利ですよね。
なんでこの方法って広く浸透していないんだろう。
卑怯な方法みたいに書かれているところもあったし。

>>52
これはどういうことでしょうか?
SaveDCはスタック的に何回でもコールできるみたいですけど。

54 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 20:40:42 ]
CDocumentでファイル開く処理を行った後、
CViewのOnDrawで再描画行いたいんですけど

CView::GetDocumentのような
GetViewみたいなの無いですか?

OnDrawするような再描画コマンドでもいいです。

55 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:18:28 ]
>>54
Viewの更新は、基本的にCDocument::UpdateAllViewsで通知する
GetFirstViewPosition/GetNextViewを使って、
関連付けられたViewの取得もできなくはないけど。

56 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:47:13 ]

CMyView* pView = (CMyView*)AfxGetMainWnd()->GetActiveView();
pView->InvalidateRect(NULL, FALSE);

57 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:49:32 ]
ドッキングウィンドウ難しい・・・orz
誰か詳しいページ知ってる人いませんか?
コードGruruしかない?

58 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 14:55:47 ]
MFCでドッキングは茨の道すぎるので
C#かBCBやりなさい

59 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:16:51 ]
VC++2005にCWebBrowser2が無いのですが、
ダイアログに貼り付けたWeb Browserコントロールで
下記のようにNavigate2したいのですが、どうすればできるでしょうか?

CWebBrowser2* wb = (CWebBrowser2 *)GetDlgItem(IDC_EXPLORER1);
wb->Navigate2(url,NULL,NULL,NULL,NULL・・・);


60 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:34:59 ]
>>59ですが、webbrowser2.hとwebbrowser2.cppを自分のプロジェクトへ追加することで解決しそうです



61 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:07:23 ]
>58
MFCはドッキングツールバーがあるから
ドッキングウインドウは簡単だけど?

62 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 14:57:46 ]
>>61
なら教えてやれよ。

63 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 17:12:58 ]
>>57
www.codeproject.com/docking/sizecbar.asp

64 名前:デフォルトの名無しさん [2007/08/31(金) 23:11:46 ]
ドッキングも使えないとは・・・

65 名前:デフォルトの名無しさん [2007/09/01(土) 11:35:46 ]
メモリマップドファイルについてですが

hMap = CreateFileMapping( hFile, 0, PAGE_READONLY, 0, 0, NULL); // MAP名なし
if( hMap <= 0 )
{
    return false;
}
pPointer = (char*)MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, 0); // 全サイズ

↑のようにとするとhFileの内容が数1G超とかの場合、無謀になるような気がしますが
MapViewOfFileEx等で数ページ分を部分的に割り当てていくしかないでしょうか?
1Gぐらいのファイルを試してみるとpPointerがNULLでした。

66 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 11:40:58 ]
ここMFCスレですよ

67 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 12:14:26 ]
CControlBarから派生する独自ドッキングバー作る時はかなり苦労したもんだ( ´∀`)
CDockBarとかCDockContextとかMSDNドキュメントにも載ってないしソース読むしかないもんな
でも.NETだと最初からリサイズ可能ドッキングバーがあるんだよなー・・・なぜMFCも拡張せん!ヽ(`Д´)ノ

68 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 14:53:09 ]
だってMFCだもん

69 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 17:48:35 ]
MFCって今後は先細り?
.NETマンセー時代は来るんですか?

70 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:55:43 ]
VS2008でVista向けMFCが出るみたい



71 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:18:12 ]
MFC嫌いなんで廃れてくんねーかな

72 名前:デフォルトの名無しさん [2007/09/02(日) 00:23:31 ]
なぜ?

.NETに比べたら100倍はいいと思うが?

73 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:28:05 ]
>>71嫌いなんで氏んでくんねーかな

74 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:58:33 ]
例外でポインタを投げてくるのだけはどうにかしてほしい

75 名前:デフォルトの名無しさん [2007/09/02(日) 14:27:02 ]
MFCに文句つける奴って単に使えないからだけだでょ?

現在、WINでGUIを作成するなら最強だと思う。
MFC無い時代はWINアプリを書くのはしんどかった。

最近C#なんてあるが、所詮インタプリタみたいなもんだからおもちゃw

76 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:24:09 ]
お前は小学生か

77 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:43:12 ]
.NET Frameworkに文句つける奴って単に使えないからだけだでょ?

現在、WINでGUIを作成するなら最強だと思う。
.NET無い時代はWINアプリを書くのはしんどかった。

昔MFCなんてものがあったが、所詮遺産みたいなもんだからガラクタw

78 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:22:51 ]
MFCなんて時代遅れっしょ

79 名前:デフォルトの名無しさん [2007/09/03(月) 00:48:28 ]
次期VSでのMFCはかなりイイ

ダウンしてみ。

.NETなんざ使う気しなくなるぞ

80 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:45:52 ]
具体的に説明せよ



81 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 03:31:47 ]
MFCってなにがどうなってんのかさっぱりわかんね('A`)

82 名前:デフォルトの名無しさん [2007/09/03(月) 11:39:24 ]
ダイアログ上に数十のラジオボタンを配置したいのですが、
後のメンテナンス性を考慮して、ダイアログエディタではなく
プログラム内の初期化処理にて生成したいのですが、
どういう関数を使えばいいのですか?

よろしくお願いします。

83 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 12:42:25 ]
>>82
CButton::Create

84 名前:82 mailto:sage [2007/09/03(月) 13:39:19 ]
>>83
ありがとうございます。

85 名前:デフォルトの名無しさん [2007/09/03(月) 20:50:30 ]
MFCって関数ポインタテーブルを使いたい「だけ」のためにC++使ってるんだろ?
C with class でしかないじゃん、C++と言うより

86 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:58:27 ]
>>85
"C with class"であることの何が悪いのか知らんけど、クラス継承もあるし、オペレータオーバロードもある。
新しいMFCならテンプレートも使っているね。

87 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:46:56 ]
ダイアログ上にタブコントロールを配置してます。
ダイアログの表面色を塗りつぶしてるんですけど、
タブコントロールのタブが並んでいる部分の横の余った空間や、
タブコントロールの周囲の微小な背景がグレーのままです。
ここを塗るにはどうしたらいいんでしょうか。
塗るでもいいし、背景を透過にできればいいんですけど。


88 名前:デフォルトの名無しさん [2007/09/03(月) 23:53:19 ]
rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200704/07040003.txt
場所は↑この方が説明してるのと同じです。


89 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:26:42 ]
CHtmlViewでURLのドロップを受け取れるようにするにはどうすればいいの?
SetRegisterAsDropTarget(TRUE)をしてもダメだった

90 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:03:19 ]
中味はIEだし、特に何もしなくてもできるだろ



91 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:12:42 ]
ちょっと興味あったんで試したけどデフォルトじゃ無理みたい。
WM_DROPFILESのイベントハンドラ追加のみで出来ました。
ショートカットだけじゃなく、htmlファイルやtxtファイルも表示可。

92 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:36:09 ]
ウイザードでCHtmlViewにして、あとは何もいじらない状態でできたよ

93 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:33:26 ]
>>90,92
通常のCHtmlViewではドロップできませんでした
MFCのバージョンが関係あるかもしれないでしょうか?
自分はVisual Studio 2005 Standard Edition SP1を使ってます(WinXP&IE6)

>>91
OnCreateでDragAcceptFiles()してWM_DROPFILESを追加したら、
ローカルのファイルはドロップできるのですが
IEからのURLのドラッグ&ドロップはできませんでした・・・
IEからのURLのドロップをしたいのです

94 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 09:49:06 ]
CDC::DrawDragRect()の説明には、座標は「論理座標」と書かれてるのに、
指定した位置にちゃんと描かれず、ネットで使用例を漁ってみたところ、

dc.LPtoDP(&rect);
dc.DrawDragRect(rect, Last_draw_size, NULL, CSize(0, 0));

という記述がありました。
これに倣ってLPtoDP()してみたらちゃんと描かれたんですけど、
LPtoDP()するということはデバイス座標ですよね?
MSDNの「論理座標」というのはどういう意図なんでしょうか?

CDC::Rectangle()のほうにも論理座標と書かれていて、
こっちはLPtoDP()は必要無いんですけど。

95 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 14:55:19 ]
>>94
MSDNの説明が間違っているな、これ。英語版でも駄目だな。
VS2005のCDC::DrawDragRectのコードだと、
矩形描画の範囲を指定するのにSelectClipRgnを使っているが、
この関数はデバイス単位での指定を仮定しているにも関わらず、
単位変換無しでそのまま渡している。

96 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:49:14 ]
mfc(VC++ 2005)で開発をしているのですが、
ステータスバーをスレッド中から参照しようとすると、
Assertion Failedで怒られてしまいます。
ダイアログに変数で CStatusBar m_statubar を追加して
OnInitDialog でCreate、ペインの初期化を行い
ダイアログのコンストラクタで外部変数で定義した CStatusBar *m_sb に
m_sb = &m_statusBar でアドレスを渡してスレッドで参照しているのですが
どこがいけないのでしょうか?

97 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:55:33 ]
>>95
解析情報ありがとうございます。
やっぱりCDC::DrawDragRect()ってデバイス単位で渡すのですよね。
昔からある関数なのにドキュメント修正すらされてないのか…。

98 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:59:24 ]
たまたま指摘が無かったんじゃね?
ちゃんとMSに言えば多分直してくれるよ。

99 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 00:11:21 ]
>>96
メインスレッド以外からコントロールを操作してはいけないからと思われ。

100 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 00:13:46 ]
>>99
msdn2.microsoft.com/ja-jp/library/h14y172e(VS.80).aspx



101 名前:100 mailto:sage [2007/09/06(木) 00:14:51 ]
アンカー間違えた、ごめん。
99じゃなくて96宛です。

102 名前:96 mailto:sage [2007/09/06(木) 00:47:54 ]
>>99 >>100
スレッドから参照できないんですね。
ということで、タイマーで監視することにしました。
ありがとうございました。

103 名前:デフォルトの名無しさん [2007/09/06(木) 01:28:16 ]
>>102
作り方によってはタイマー監視でもいいけど、同期オブジェクト使った方がいいかも
スレッドプログラミングをタイマーで監視するプログラムは安易でいいけど嵌ることもあるから

104 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 01:32:44 ]
あ、スマン96のようなステータスバー監視だったら
タイマーで良いや

105 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 07:34:25 ]
>スレッドプログラミングをタイマーで監視するプログラム
何を監視するんだか。

106 名前:デフォルトの名無しさん [2007/09/06(木) 08:20:53 ]
>>94
さぁ、ドキュメントのフィードバックをしよう

107 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:14:58 ]
VC++ 2005, OSはXPProを用いているものです。
DLLを作成し、そこからAfxBeginThreadでスレッドを複数立ち上げているのですが、
メモリリークが起こってしまいます。 同様のコードをDLL経由でなく、EXEから直接動かすとリークしません。
恐らく、何らかの初期化処理が足りてないためと思っているのですが、心当たりのある方がいらっしゃいましたら、教えてください。

//--- 以下ソース
#pragma once
#include "TestThread.h"

class CThreadManager
{
public:
CThreadManager() {
m_pThreads = NULL;
}
virtual ~CThreadManager() {
delete [] m_pThreads;
}
void Run() {
if (m_pThreads == NULL) {m_pThreads = new CTestThread[50];}
for (int i = 0; i < 50; i ++) {
if (m_pThreads[i].IsEnable()) {
m_pThreads[i].SetEnable(FALSE);
m_pThreads[i].Run();
return;
}
}
}
private:
CTestThread* m_pThreads;
};


108 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:15:43 ]
//続き
#pragma once

class CTestThread
{
public:
CTestThread()
{
m_pThread = NULL;
m_bEnable = TRUE;
}
virtual ~CTestThread(void)
{
EndThread();
}
void Run()
{
EndThread();
m_pThread = ::AfxBeginThread(TestProc, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if (m_pThread != NULL)
{
m_pThread->m_bAutoDelete = FALSE;
m_pThread->ResumeThread();
}
}


109 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:16:15 ]
//続き
BOOL IsEnable() {return m_bEnable;}
void SetEnable(BOOL bEnable) {m_bEnable = bEnable;}
private:
void EndThread()
{
if (m_pThread != NULL)
{
m_bEnable = -1;
::WaitForSingleObject(m_pThread->m_hThread, INFINITE);
delete m_pThread;
m_pThread = NULL;
}
}
static UINT TestProc(LPVOID pParam)
{
for (int i = 0; (i < 50) && (((CTestThread*)pParam)->m_bEnable == FALSE); i ++) ::Sleep(5);
((CTestThread*)pParam)->m_bEnable = TRUE;
return 0;
}
CWinThread* m_pThread;
BOOL m_bEnable;
};


110 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:16:58 ]
以上です。
108,109は一つのファイルを分割しています。
それと、掲示板に登校するサイズを減らすためにヘッダファイルのみで書いてみました……


よろしくお願いします。



111 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:44:11 ]
>>107に追加です。
CThreadManager::Run(); 関数をタイマーで何回も呼ぶと、どんどんメモリが消費されていくという現象です。
確認は[管理ツール]→[パフォーマンス]から行い、一日ほど回し続けました。

112 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 00:28:50 ]

初心者です、質問させてください。

OnFileNewなどMFCが用意してくれた関数の中身(=ソースコード)って

見る事ができないのでしょうか?

もしできるのなら、その方法を教えてください。

よろしくお願いします。


113 名前:デフォルトの名無しさん [2007/09/09(日) 00:55:01 ]
初心者を自称する人がMFCのソースコードが読めるとでも?

114 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:54:18 ]
>>107
もっと簡素化したソースで検証したほうがいいんでねえの?
あと、”何らかの初期処理”ってのが、DLLの初期処理ではないとか、
メモリリークが発生しているかどうかをどのように見極めているとか、
メモリリークは、1スレッドあたりどの程度発生しているとか、記載すべきことがあるんでねえの?

>>112
どのクラスのOnFileNewだかしらねーけど、MFCのソースはインストールされてんの?
されてんなら検索すればいいだろう。 されてねーならインストールすればいいだろう。

115 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:56:48 ]
検証方法は>>111に書いてるつもりなんじゃね?

116 名前:112 mailto:sage [2007/09/09(日) 02:15:39 ]
>>114

「OnFileNew」をキーワードに、下記フォルダを検索したら探せました。

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


C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc

117 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:24:10 ]
WIN32開発、java、C#とやってきて
最近MFCを始めました。
MFCってすごく難しく感じます。
実際どうなんですか?

118 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:25:59 ]
>>117
あなたにとって難しい。それだけのことです。

119 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 03:16:30 ]
>>117
平然と並列でないものを並べられると、頭がグラグラする。

漢文、英語、中国語とやってきて、
最近2ch語を始めました。
2ch語って凄く難しく感じます。

とかそんな感じか?

120 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 03:24:08 ]
とりあえず、107のソース使って、dllとexeから実行してみたけど
リーク検出できなかったな
1日実行してみて、どれくらいリークしてるの?



121 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 08:17:53 ]
>>117
win32の経験があるのなら、mfcはそんなに難しくないと思うが。

122 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:15:43 ]
フレームワーク「郷に入っては郷に従え」
の考え方ができればいける。

123 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:48:24 ]
>>114
もっと簡素化したソースについては今から作る事にします。
>あと、”何らかの初期処理”ってのが、DLLの初期処理ではないとか、
何らかの初期化処理というのは、単にスレッドを起こす前に、おまじない的なものが必要なのかと思って書いただけです。
また、DLLMain関数はMFC側で作っているものを使っているので、こちらの初期化処理については不明です。

>メモリリークが発生しているかどうかをどのように見極めているとか、
管理ツールからパフォーマンスモニタを開きまして、そこでプロセスを選択して、15秒おきにワーキングセットを監視しています。
直接のメモリリークではないと思いますが、exeとの比較により、ワーキングセットの増え方があまりに異常なので問題かと……

>メモリリークは、1スレッドあたりどの程度発生しているとか
1スレッドあたりのリークは調べていませんが、15秒おきのワーキングセット増加値は平均で23kBほどです。
これは、CThreadManager::Run();をタイマーで、90msごとに動かした結果です。

一日動かしたときは、これよりも間隔をあけて1000msでやりました。割合は減りますが、同じようにリークします。
なお、1000msで一日動かしたときの、一日のリーク量は1MBほどです。


>>120
1000ms間隔で1MB程度です。

ちなみに、事情がありまして、DLLエクスポートの部分は少々特殊かなぁ……と。
そこのソースも書いてみます。

124 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:49:25 ]
// エクスポート部分のソース。
__declspec(dllexport) void CreateThreadManager(DWORD** ppObject)
{
*ppObject = (DWORD*)(new CThreadManager());
}
__declspec(dllexport) void RunThread(DWORD* pObject)
{
((CThreadManager*)pObject)->Run();
}
__declspec(dllexport) void DeleteThreadManager(DWORD* pObject)
{
delete (CThreadManager*)pObject;
}

//アプリ側の使用部分
#include "stdafx.h"
#include "ThreadTest.h"
#include "ThreadTestDlg.h"
#include "ThreadDll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CThreadTestDlg::CThreadTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CThreadTestDlg::IDD, pParent)
{
m_pManager = NULL;
m_nTimerEvent = 0;
}
// 続く


125 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:50:08 ]
//続き
BEGIN_MESSAGE_MAP(CThreadTestDlg, CDialog)
ON_WM_TIMER()
ON_WM_DESTROY()
END_MESSAGE_MAP()

BOOL CThreadTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
::CreateThreadManager(&m_pManager);
m_nTimerEvent = SetTimer(1, 89, NULL);
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}
void CThreadTestDlg::OnTimer(UINT_PTR nIDEvent)
{
if (m_pManager)
{
RunThread(m_pManager);
}
CDialog::OnTimer(nIDEvent);
}
void CThreadTestDlg::OnDestroy()
{
CDialog::OnDestroy();
if (m_nTimerEvent != 0)
{
KillTimer(m_nTimerEvent);
}
DeleteThreadManager(m_pManager);
}


126 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:51:26 ]
てな具合で、動かしています。正直な話タイマー間隔をこのぐらい短く設定すると一日は多分動きません。
もうちょっと空けてやらないと、マシンスペックの弱いPCだと落ちてしまうのではないかと……

127 名前:デフォルトの名無しさん [2007/09/09(日) 13:59:38 ]
>>122
そうですか?
BCBやVC#と比べると何をどうしていいのかまったく分からん

128 名前:デフォルトの名無しさん [2007/09/09(日) 14:11:26 ]
>>127
>何をどうしていいのかまったく分からん

たとえば、何をどうしたいのかな?
よほど難解なことをしようとしてるのか。それともごく標準的なGUIツールも作れないのか。

129 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:18:07 ]
>>127
ぶっちゃけ、すぐ上のサンプルコードは動かせる?

130 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 00:10:07 ]
>>126
とりあえず、そのもたないと思われる状態で一日動かしてみるべき



131 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 10:16:49 ]
CObjectから派生させていないデータクラスでも
Serializeでないファイル読み書きに
CArchiveを使ってしまってよいものでしょうか?

virtual void LoadData(CArchive& ar);
virtual void SaveData(CArchive& ar) const;
こんな感じのメンバ関数を用意しようかと思っているんですけど。

それとも、CFile*を引数にしてしまうべきですか?

132 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 18:42:47 ]
>>131
シリアル化にIMPLEMENT_SERIALを使わないなら、
CObject派生の意味は殆ど無いし、良いんじゃないかな。
結局は単純なバイト列の読み書きなのだし。

133 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 09:47:20 ]
>>132
ありがとうございます。
自作データクラス群は大元の親クラスが純粋仮想クラスで、
また、自分自身がCObjectから派生することに慣れていないため、
この形のままCArchiveだけ使えないかなと思いました。

このデータクラス群の一つが内部でCArrayのメンバを持っているのですが、
これを保存するためにCArray::Serializeを呼ぼうとすると、
SaveDataはconstにはできないですね…。

まぁconstを取り外してしまえば、とりあえず動きそうですが、
SaveDataの中でMFCクラスメンバのSerializeをコールというのが
かなりまずい構造なのかなぁ。

134 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 10:05:42 ]
>>133
MFC - 概念 - シリアル化 - シリアル化 : オブジェクトのシリアル化
- アーカイブを通じた CObject の格納と読み込み

135 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 22:03:21 ]
質問です
CDialogの派生クラスを作成して、そのダイアログに
CButtonやCStaticなどのコントロールを貼り付けています
そのコントロールの上に色々描画したいんですが
やり方が解りません。どうすればいいでしょうか?

OnPaintを作ってその中で
CPaintDC dc(this);
dc.MoveTo(*,*);
dc.LintTo(**,**);
としてみましたが、コントロールの上でなく背後に描画されてしまいます

136 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 22:57:38 ]
>>135
ダイアログを派生させるまで分かって、
コントロールを派生させることに思いつかなかったってことでいいの?

137 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 23:53:45 ]
>>136
CStaticを派生させてそのOnPaintを処理したら
キャプションが表示されなくなりました。

やりたいことはCStaticのコントロールがあれば、そのコントロールに
縁取りして線を描いたり、コントロールの上にビットマップを表示したり
したいんです。その時CStaticの文字を表示する機能はそのまま活かしたい。

イメージとしてはダイアログを表示してそれをビットマップで保存し、
その上に落書きする、みたいな。

138 名前:デフォルトの名無しさん [2007/09/14(金) 12:06:25 ]
DLLの関数をコールした時に、よく解らない現象が起きます。

char Buff[1000];
int nRet = ((PT_FUNC)*m_fpFunc)( Buff, sizeof(Buff) );

1行目でBuff領域を確保した後、
2行目のDLLをコールするとBuffのアドレス値が変化してしまいます。
しかもthis変数の値も変化してしまい、エリアの破壊が起きている感じです。
DLL側(自作)では無処理のreturn としています。

2行目のBuff宣言を static char Buff[1000] とすると正常に動作します。
DLL関数には 静的なバッファしか渡せないという事なんでしょうか?
教えて下さい

139 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 12:26:52 ]
>>138
m_fpFuncの中身をさらせ

140 名前:138 mailto:sage [2007/09/14(金) 12:38:29 ]
>>139
FARPROC  m_fpFunc;
です。ここが違うのでしょうか?



141 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 12:53:40 ]
>>140

FARPROCやめて実体と同じ型で宣言してみ
引数と戻値が呼び出しと実体で違っててスタックを壊してるだけだと思うぞ

142 名前:138 mailto:sage [2007/09/14(金) 13:30:42 ]
>>141
指摘の通りでした。
ありがとうございました。


143 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 17:31:24 ]
>>137
> やりたいことはCStaticのコントロールがあれば、そのコントロールに
> 縁取りして線を描いたり、コントロールの上にビットマップを表示したり
> したいんです。その時CStaticの文字を表示する機能はそのまま活かしたい。

CStaticのOnEranseBkGroundって作れるっけ? 作れるんなら、そこで処理してみたら?
作れないなら、無理っぽい。

144 名前:143 mailto:sage [2007/09/15(土) 17:34:21 ]
×OnEranseBkGround
○OnEraseBkgnd

145 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 19:40:30 ]
>>143
結局CStaticから派生してOnPaintの中で
DrawTextとかFrameRectとかを使用するようにしました

今OnEraseBkgndでFrameRectを使ってみましたが、
これでも出来そうな気がします
しかし、テキストの描画時にFrameRectで描いた枠が消されて
しまうようで他にも幾つかいじらなければいけないっぽいですね

一応解決です、皆さんアリガト

146 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 14:26:04 ]

CHtmlView::Navigate2のエラー検知を行いたいのですが、
どうすれば良いのでしょうか?
どなたか教えてください。





147 名前:デフォルトの名無しさん [2007/09/16(日) 14:49:26 ]
自作DLLでダイアログを表示しようとしています。
m_pcDebugDlg->Create(IDD_TEST);
を実行すると、
ERROR: Cannot find dialog template with IDD 0x36B1.
というエラーが発生します。

何かの設定が足りないのでしょうか?
よろしくお願いします。

148 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:25:03 ]
そこに書いてある通りじゃないの?

149 名前:147 mailto:sage [2007/09/16(日) 17:25:10 ]
>>148
IDD_TEST は resource.h に定義されていました。

プロジェクト/プロパティ/MFCの使用を「共有DLLでMFCを使用する」から
「スタティックライブラリでMFCを使用」に変更したら、ダイアログが表示される様になりました。
ただし、客先からは「共有MFC」でと指示があります。
何が悪いのでしょうか?

150 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 17:33:08 ]
リソースをビルドしなおしても同じ?



151 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 17:44:40 ]
>IDD_TEST は resource.h に定義されていました。

.rc ではどうなってますか
まあ>>150でおkだと思うけど

152 名前:147 mailto:sage [2007/09/16(日) 18:02:30 ]
..rc には
IDD_TEST DIALOGEX 0, 0, 250, 170
という記述がありました。

リソースをビルドという方法がよくわからなかったのですが、
 ソリューションのリビルド 
. rcファイルのコンパイル
の両方とも、現象は変わりませんでした。
リソースのビルドって、他のやり方でしょうか?


153 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:10:28 ]
つ AFX_MANAGE_STATE

154 名前:147 mailto:sage [2007/09/16(日) 18:43:56 ]
>>153
DLL関数の先頭に
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
を追加したらうまくいきました。

どうもありがとうございました。

155 名前:デフォルトの名無しさん [2007/09/19(水) 17:46:56 ]
ダイアログの上でエンターキーを押すと、
プログラムが正常終了してしまいます。
プログラムを終了させたくないのですが、どうすればいいのか教えて下さい。
よろしくお願いします

156 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 18:47:04 ]
>>155
つ[OnOK()]

157 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:23:59 ]
いや俺は PreTranslateMessageで処理するほうが好きだ

158 名前:155 mailto:sage [2007/09/19(水) 20:06:07 ]
>>156,157
ありがとうございました
OnOK()で対応しました

159 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:57:01 ]
OnOK()で対応するというのは間違っていると思う。
OnOK()の意味をちゃんと考えるべき。
そして「Enterキーを押したときにダイアログを終了させない」という仕様の意味をちゃんと考えるべき。
するとどうやって実現するのが正しい形かわかるでしょ。
面倒でも、何事も正しい形ってものを常に意識して作っておかないと後悔するよ。大袈裟だがw

160 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:19:33 ]
MFCが勝手に定義してる機能を殺すだけだろ
元のダイアログにはそんな機能ない



161 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 22:50:34 ]
リターンキーが押される→OnOK()が呼び出される→OnOK()の処理をキャンセルする
よりは
リターンキーが押される→OnOK()を呼ばないようにする
の方がスマート。
よってPreTranslateMessageを推奨するよ。
他の用途にも使えるし覚えといて損はない。

162 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 23:14:48 ]
そこまで気にするんなら
メッセージ発生するごとにPreTranslateMessage呼ばれるのも気にした方がいいよ
OnOKよりはるかにオーバヘッドになってるはず

163 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 12:46:43 ]
Okボタンが在る場合、
Okボタンがデフォルトボタン形状なのはUI的にまずい。

164 名前:デフォルトの名無しさん [2007/09/20(木) 17:56:11 ]
フォトショップ等、メインウィンドウの他に、
レイヤー情報などを表示するウィンドウがあるんですが、
それをCDialogで作ろうと思っているんです

m_dlg.Create( CTestDialog::IDD , this );
m_dlg.ShowWindow( SW_SHOW );

で、一応表示されるんですが、
ダイアログにフォーカスが写ると、
メインウィンドウのタイトルバーが灰色になるのです。

正しい、子ウィンドウの作り方ってありますか?


165 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 19:38:14 ]
正しいかどうか知らんけどツールウィンドウ

166 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 12:26:58 ]
Enterキーは、OKボタンを押すのではなく、デフォルトボタンを押す操作です。
PreTranslateMessageでEnterキーを弾いてしまうと、
OKボタン以外のボタン上でEnterキーを押したときにも無視されてしまいます
(そのときにはそのボタンが押されるべき)。

もちろん、PreTranslateMessageでフォーカス位置を調べてもいいけど、
そこまで面倒なことをするのなら、
OKボタンをDisable・非表示にしたほうが早いです。

OKボタン自体は残しておきたいのであれば、
なにもしない非表示ボタンをデフォルトにすればよいです。

PreTranslateMessageの方法だと、デフォルトボタン枠が出ているのに
Enterキーが効かないというGUI上の矛盾もあります。

167 名前:392 mailto:sage [2007/09/21(金) 21:55:41 ]
> OKボタン自体は残しておきたいのであれば、
> なにもしない非表示ボタンをデフォルトにすればよいです。
デフォルトボタンは何ですか、と問われたときに、ありませんと答える方が良いかと。

168 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:03:04 ]
今、以下の方法で自作ボタンを作ろうとしています。
・CStaticを派生させる。SS_BITMAPとSS_NOTIFYを設定する。
・OnMouseMoveでカーソルが乗ったらSetCaptureなどして降りるまでハイライト用のビットマップをSetBitmapする。
・カーソルが降りたらReleaseCaptuerして通常のボタン用ビットマップをSetBitmapする。
・OnLButtonUpで親ウインド(CDialog)にWM_COMMAND,BN_CLICKEDをPostMessageする。下記ソース参照。あと押された時のビットマップをセットする。
CMyButton::OnLButtonUp
{
 WPARAM w = MAKEWPARAM(id,BN_CLICKED);
 ::PostMessage(hParent,WM_COMMAND,w,0);
 ごにょごにょ
}

すると確かにLボタンを押下すると親のダイアログに通知されます。
しかしながら親ダイアログではON_BN_CLICKEDマクロで登録したハンドラが2回呼ばれます。
一回目は不明。2回目は私の作ったCMyButton::OnLButtonUpから。

誰が一回目のBN_CLICKEDを送るの?CStaticの規定クラス??

169 名前:392 mailto:sage [2007/09/22(土) 22:02:59 ]
winuser.h
#define STN_CLICKED 0
#define BN_CLICKED 0

170 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 22:19:04 ]
>>169
ありがとうございます。



171 名前:デフォルトの名無しさん [2007/09/22(土) 23:31:42 ]
本当にMFCが全くわかりません。
とにかく、GUIを作るのが難しすぎに感じます。

VC#なんて超簡単にGUI作れるのに・・・

まだまだ、VC+++MFCはデファクトスタンダードなんですかね?

172 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 00:33:02 ]
>>171
MFCは欠陥製品だと思う

対抗するボーランドがコケちゃったんでMSの一人天下になっていますが
これに付き合わされる開発者はたまらない

C#を使いましょう


173 名前:デフォルトの名無しさん [2007/09/23(日) 00:42:51 ]
慣れの問題ですよ
VC#が簡単に、作れるって言っても例えばテキストエディタを作る場合
商用を考えたら標準のTextBoxなんて使い物になりません。
一から書くことになります。

だったら、WIN32APIを手間なく呼べるVC++に利がある。
VC#だと使う、WIN32APIをいちいち宣言しなくてはいけない。

174 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 01:58:19 ]
MFC使わねばならん環境なら、頑張って使えるようになればいいだけだし、
使わなくて言い環境なら、C#でやればいいだろう。
何故このスレで愚痴るのか理解できない。

175 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 23:52:49 ]
>>174
MFCの習得に挫折した人がMFC叩きしてるだけ。
穏やかになだめてあげてください。

176 名前:デフォルトの名無しさん [2007/09/24(月) 00:10:51 ]
確かに他のライブラリと比較すると挫折率はダントツに高いかもしれん
よく、Cはポインタで躓いたなんて人いるけど似たようなもん

177 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 01:45:06 ]
ていうかあまりの複雑さと面倒臭さに死にたくなるときあるな
なんでもかんでもメッセージって逆に面倒臭いだけだったんじゃないだろうか・・・

178 名前:デフォルトの名無しさん [2007/09/24(月) 02:17:59 ]
けど、大抵の商用ソフトはMFCが使われている。
.NETなんて皆無では???

179 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 02:47:39 ]
>>178
だって糞おせぇし

180 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 02:54:45 ]
Vistaならネイティブとほとんど変わらんが?



181 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 03:10:20 ]
>>180
それって普通に作ってた奴の方が遅くなったんでしょ?w

182 名前:デフォルトの名無しさん [2007/09/24(月) 05:07:52 ]
MFCは隠蔽化というより隠蔽工作だというようなことがかかれた本があった。
本来仕組みなど知らなくても簡単に使用できるのが隠蔽化だが
MFCには仕組みを知らなければバグの原因がまったく理解できない不可解な現象も多い。
それらを苦労して乗り越えて来た人間は威張り腐りって、
「MFCが糞なんじゃなくて理解できないやつが糞」と言いたいのだろう。気持ちはわかる。
だが世間一般ではそういう場合ライブラリが糞だという。
自分の腕前を自慢したいからって言葉を捻じ曲げてはいけない。



183 名前:デフォルトの名無しさん [2007/09/24(月) 05:31:44 ]
あの当時に書かれたライブラリで今まで通用したものってほかに何かあるかな?
OLEを隠蔽するフレームワークとして十分納得いくし、フル機能のウインドウズ
ソフトウエアを書くのにほかにいいライブラリが無かったのも事実だと思う。

184 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 06:03:59 ]
>>それらを苦労して乗り越えて来た人間は威張り腐りって、
被害者意識が強い傾向が見られます。
何かトラウマになるような事でもあったのでしょうか(w

185 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 06:41:22 ]
MFCがなければWIN32のバグが分からない
永遠に更新を続けるべき

186 名前:デフォルトの名無しさん [2007/09/24(月) 07:39:58 ]
>>182
あー、でも俺、そういうラッパー系のクラスで
下層の構造知らずにうまく包んであるもんってみたことないわ
無理なんじゃねぇの?って思ってる

可変長ですよといいつつ
なんも意識せずに1文字ずつ追加すると毎回全バッファを再確保する
最近の次世代(?)言語の文字列クラスのようにw

187 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 09:28:21 ]
文字列定数 -> System.String
CString -> System.Text.StringBuilder
と考えれば、それはそんなもんかって気もする。
Stringの連結はおまけ機能ってことで。

188 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 10:54:07 ]
MFCのいいところはVisualStudioで使う場合にドキュメントモデルを提供してくれることとダイアログエディタがあることか。
ちょっと凝ったことをしようと思うと折角クラスで隠蔽化しているように見えても実際にはAPIと同じ名前のメソッドだからAPIと手間は変わらないし、
全てを網羅しているわけではないから結局APIを直截呼ばないといけないケースもある。
あれはだからAPIラッパクラス集と思えばいいのであって、それ以上のフレームワークと思ってはいけないのだろう

189 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 15:22:11 ]
>>187
>Stringの連結はおまけ機能ってことで。
そんなことになってるぐらいならラップなんてしないほうがいいじゃないって思う

190 名前:デフォルトの名無しさん [2007/09/26(水) 11:01:12 ]
CDC型のメンバからその描画領域のサイズを取る方法はありますでしょうか。

CBitmap* pBitmap = pDC->GetCurrentBitmap();
BITMAP bmp;
pBitmap->GetBitmap(&bmp);

とやってbmp.bmWidthやbmp.bmHeightを参照しようと思ったのですが、
ビューのOnDrawなどで渡される画面DCに対しては
GetBitmapがエラーになるようなのです。
メモリDCに対しては成功します。

もちろん、OnDraw時はGetClientRectを使えばサイズを取れるのですが、
関係無い場所でpDCだけを見て調べられないかなと思っています。




191 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 11:43:46 ]
つ ::WindowFromDC

192 名前:デフォルトの名無しさん [2007/09/26(水) 11:53:25 ]
>>191
ありがとうございます。
::WindowFromDCというのは、CDC::GetWindowと対応しているようなので、

CRect rect;
BITMAP bmp;
if (pDC->GetCurrentBitmap()->GetBitmap(&bmp)) {
  /* メモリDC */
  rect = CRect(0, 0, bmp.bmWidth, bmp.bmHeight);
}
else {
  /* 画面DC */
  pDC->GetWindow()->GetClientRect(rect);
}

とやってみたところ、どちらの場合でもサイズを取ることができました。
判定方法はこれで大丈夫ですよね?

193 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 13:30:06 ]
.NETのMenuStrip簡単にできていいなぁ
MFCでもサポートしてくれ

194 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 21:33:08 ]
簡単に作れる代わりに使い物にならんほど遅いプログラムとなってしまった
.NET非常に残念だったな

195 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 01:39:05 ]
MFC not dead - "massive update" planned

まさか
.NETは無しね!MFC大幅機能強化するから!
なんてことになるん(r

196 名前:デフォルトの名無しさん [2007/09/30(日) 06:51:40 ]
MFC と NET って、どの程度の処理速度がちがうんですか?
まじレス希望

197 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:27:09 ]
>>196
MFC全盛期のPCでMFCを動かすと、今のハイエンドなPCで.netを動かすのとは較べ物にならないほどもっさりしています。

198 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 11:28:36 ]
MFCって.NETのコントロールと比べると鼻くそみたいにショボイのに2008にもまだ残ってる理由ってなんですか?
必要かな?


199 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 12:54:06 ]
鼻くそみたいにショボイと思ってるのに
このスレへやってくる理由ってなんですか?
必要かな?

200 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:07:07 ]
.NETのコントロールなんて飾りです。偉い人には(ry

冗談抜きで。



201 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:56:35 ]
>>198
2008ではMFCはなくなってたお

202 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:25:47 ]
>>201 ソースキボンヌ

2008でも含まれると考えられるソースはこちら
ttp://msdn.microsoft.com/msdnmag/issues/07/06/Cpp/default.aspx?loc=jp

203 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:29:11 ]
EEダウンロードできんじゃん


204 名前:デフォルトの名無しさん [2007/10/01(月) 11:36:20 ]
VS2005とMFCで拡張DLLを作成しているのですが、
この拡張DLLを呼び出した側のインスタンスハンドルって
どうやって参照すればよいのでしょうか。

AfxRegisterClassで必要なのですが、
AfxGetInstanceHandleだと、大元のEXEのハンドルが返ってきてしまいます。
EXEから呼び出された別の拡張DLLがこの拡張DLLを使う可能性もあるため、
大元のEXEではなく、呼び出し元を参照できるようにしたいのです。

205 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 23:44:38 ]
Code Projectにたくさんのコントロールがあげられているが
コントロールってダイアログベースにするかViewをFormViewに選択するしか
使えないんでしょうか?



206 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 19:19:08 ]
VC6です。

プログレスバーについての質問。
時間がどのくらい掛かるか不明な処理でプログレスを表示したい。
Webなんかで有るような、2−3このコマが左から右へくるくる回ってるの
が良いんだけど、CProgressCtrlじゃできないっぽい?
なんか良い案あったらおしえて。

時間がどのくらい掛かるか不明なのは、開始ボタン押すとハードと通信して
ハードが処理終了するのを待つから。
ハードは詳細な進捗なんて返してくれない。
ハードの状態や処理対象によっても時間が大きく変わるので平均でこのくらい
ってどんぶりで表示するのも厳しい状況。

したがって、ループするようなヤツが欲しいといった理由。

207 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 19:21:10 ]
砂時計

208 名前:206 mailto:sage [2007/10/02(火) 19:29:58 ]
>>207

レスサンクス。

砂時計は却下されてしまいました。
と言うか、すでに砂時計は出してるけど、曰く
「ホントに、動いてるのか解らない」だそーで。
プラスでプログレスが欲しいんだと。

えらい人の考えは良くわかりません。


209 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 21:23:57 ]
>>206
まあ、砂時計出したままフリーズするアプリもあるから、動いているか
どうかを確認したいというのもわからなくはない。
どうしてもプログレスコントロールにこだわるなら、何回も繰り返して
描画してやればいいんじゃない?

210 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 01:24:29 ]
>>205
ん? Code Projectにあがっているコントロール”だけ”使えてないの?
そうなら、そのコントロールを挙げてくれ。
そうでなく普通のEditやComboも同じように使えてないなら、動的生成すればいい。
”Edit 動的生成”とかでググレば、サンプルとかあるんじゃねーかな。



211 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 02:23:43 ]
>>206
IEのようなウィンドウ右上のアニメーションで済むならCAnimateCtrlでが楽。

プログレスバーの現在位置が左から右へ動き続けるような奴だと
中断ボタンも必要だろうし、別スレッドでプログレスバー制御と中断の
入力待ちをすることになるんじゃないかな。

砂時計を却下する上司って良いなーと思った。

212 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 08:38:51 ]
動いてるのか解らないという理由で砂時計がダメなら
IEのようなアニメーションもダメだろう

213 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 18:40:21 ]
>>206
blogs.wankuma.com/melt/archive/2007/06/21/81494.aspx

214 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:03:48 ]
エディットコントロールの質問です。
コントロール内部に画像を表示させて、文字編集を行うものを作ろうと思ってるのですが
なかなかうまくいきません。
OnCtlColorでCreatePatternBrushで作ったものを返すようにして
何とか文字未入力領域に画像を表示させたのですが、
文字入力エリア部分に画像を表示できなくて困っています。

何かいい解決方法はないんでしょうか?

215 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:19:12 ]
>>214
SetBkModeで透過にするのを忘れている予感
マルチラインは、この方法だと不都合があるみたいなので注意

216 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:30:44 ]
>>215
あ、説明たりなくて申し訳ない。
複数行エディットコントロールについての話でした。


217 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 01:05:32 ]
質問です。

CViewの派生クラス を A 、
CWndの派生クラス を B とします。

Aのメンバ変数にBを持ち、A の OnCreate にて B を Create し、A全体に貼り付けました。
正常に生成され、貼り付けもうまくいっているのですが、B にてマウスホイールが
取得出来ないことに気づきました。(クリック等は正常動作します)

どうもフォーカスがいっていないようなので、A の OnSetFocus にて、B に対して
SetFocus をすると、期待通りの動作をしてくれ、B にてホイールを取得出来る
ようになりました。

A全体にBが貼り付けてあり、これをクリックしたら当然Bにフォーカスが行くものだと
思っていたのですが、なぜ行かないのでしょうか?

XP Pro SP2
VC++8 sp1

218 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 02:15:47 ]
>>217
例えば、ラベルをクリックしてもフォーカス受け取らないじゃん?
そしてどーやるんだったか忘れた。 ごめん。

SPYでフォーカス受け取るコントロールと
受け取らないコントロールのメッセージの違いを調べる…とか。 激しく疲れるな。。


219 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 06:11:25 ]
ラベルというかスタティックはidの設定だから全然別の話

220 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 00:21:28 ]
>>219
idの設定て、IDC_STATIC? まさか、そんなはずは。 もうちょっと分かるように説明してくれ。



221 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 10:53:03 ]
シングルダイアログのプログラムです、最小化ボタンと最大化ボタンを付けるのを忘れてしもうたww
今から付加したいのだが、どのクラスのどのプロパティーをいじったらええの?
VS20005 MFC


222 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 11:21:44 ]
>>221
ダイアログエディタかテキストエディタで<project>.rcを編集し給え。

223 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 11:58:13 ]
>>222
221です
rcファイルいじって悲惨な目(編集不能)に何回かあったのだが大丈夫なのか?


224 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 12:34:21 ]
ダイアログのプロパティでMinimize/MaximizeBoxをTrueにすればいいだけの話だろ。
何を悩んでるんだ?

225 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 12:53:44 ]
>>224
('ー')ゞラジャサンクス

226 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:57:59 ]
>>223
ダイアログエディタでプロパティを変更する行為だけで編集不能にできるならたいしたもんだ。

227 名前:デフォルトの名無しさん [2007/10/06(土) 15:19:49 ]
CToolBarのボタンを大きくすることは出来ますか?ロードするビットマップのサイズが大きければ大きくなるのでしょうか?

228 名前:デフォルトの名無しさん [2007/10/06(土) 18:17:23 ]
MFCのSDIアプリケーションを作成しています。
日本語以外のOSでも正しく動作させたいのですが、
最小化ボタンの上にカーソルを合わせたときに表示されるツールチップの「最小化」
などは自動的に現地の言葉で表示されるのでしょうか?


229 名前:デフォルトの名無しさん [2007/10/06(土) 19:09:31 ]
コード調べたらわかるでしょ

230 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:24:13 ]
日本語化されてない英語アプリ動かしてみりゃわかるだろ



231 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:28:51 ]
apiのソースは非公開
漏れたのもあるけど

232 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 09:57:50 ]
CStringのTrimの中でアサートするんですが・・・

CString str = "33 "
str.Trim();
 ・・・
Truncate
  ATLASSERT( nNewLength <= GetLength() );

Unicodeライブラリ使ってますがこれがまずい?

233 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 10:33:50 ]
"33 "

234 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 11:07:27 ]
VC2005で試したところ、>>232のコードはコンパイルを通らなかったのだが、
それはそれとして、不思議な現象が。

1. CString str = "33"; // NG
2. CString str("33"); // OK
3. CString str; str = "33"; // OK

いまいち納得がいかない。

235 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 11:10:22 ]
すみません str = _T(" 33 ")なら通りますね

236 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 12:22:02 ]
>>234
コンストラクタと=の動作が違うんかな?とかわからずに言ってみるテスト

237 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 21:32:43 ]
>>234
初期化と代入の違いわかってるか?
あと_T()マクロがどう展開されるか

238 名前:234 mailto:sage [2007/10/08(月) 08:29:48 ]
WCHARベースのCStringでも
CString(LPCSTR)
operator=(LPCSTR)
の両方とも定義されているので、2.と3.が通るのは分かるが、
なら、何故1.が通らないのかがよく分からない。
1.は3.の省略系みたいなものだとの解釈は間違い?

239 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 08:39:47 ]
コンパイラはヘッダみてるだけだから
コンパイラの立場でヘッダ見てみればいい

240 名前:デフォルトの名無しさん [2007/10/08(月) 16:48:36 ]
MDIでApp作ってます。

CMDIChildFrameA :: OnCreate()
{
dlg.Create(IDD_DIALOG, this);
}

としておいて

Dialog 内 OnOKで
if ( GetParent()->IsKindOf(RUNTIME_CLASS( CMDIChildFrameA )) )

とすると何故か失敗するのですが・・・
GetParent()で取れるCWnd* がCMainFrameになっているみたいです。
誰かボスケテ



241 名前:234 mailto:sage [2007/10/08(月) 16:52:45 ]
(・∀・)ワカッタ!!

1.
CString str="33"; は、暗黙的に CString str("33") に変換される

2.
が、WCHARベースのCStringでは
#define CSTRING_EXPLICIT explicit
CSTRING_EXPLICIT CString::CString (LPCSTR str);
と宣言されることになる

3.
explicit宣言されていると、1.のような暗黙的なコンストラクタへの変換は禁止される。
よってコンパイルエラー発生。

explicit使った事無かったから、全然思いもつかなかった。

242 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 17:36:32 ]
>>240
Windowsの仕様で、自動的にフレームウィンドウを親にされてしまうみたいだな。
Get/SetOwnerで関連付けてしまうのも一つの方法か。

243 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 18:20:18 ]
>>242さん ありがとうございます

色々試してみてたんだけど
GetWindow(GW_OWNER) ← 駄目
GetParent() ← 駄目

SetOwner() GetOwner()すればRUNTIME_CLASSうまくいきました

244 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:34:05 ]
>>228
MFC使わないコードで
Tooltip(?)の処理しなくても出てくるから
OSが処理してる。
だからOS依存で英語版なら英語で表示されるでしょ。

MFC内で独自処理してたらしらない

245 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:04:47 ]
英語版のVCでコンパイルすれば解決ということだな

246 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:05:39 ]
そうだっけ?
なんかリソースファイルの中くまなくさがしてみるとか・・・

247 名前:デフォルトの名無しさん [2007/10/09(火) 00:25:46 ]
SDIアプリでCreateWindowでCFrameWindowの子供ウインドを作成し、Viewの上に沢山並べてみた。
で、そいつらをクリックしたら、アクティブになってフォーカスがあたってフォアグラウンドになる予定だった。
でも実際はWM_MOUSEMOVEすらそいつらには飛んでこない。くるのはWM_CREATE,WM_MOVE,SIZE,PAINTくらいだ。
この子供ウインドをWS_POPUPとかにすれば飛んでくるけど。。あーわかんないよぉ。
子供ウインドの一つを選択したら、他のウインドがフォーカスを失って、選択されたウインドがフォーカスされて
しかもメッセージを受け取って欲しいんだよぉ。なんでだめなの?????


248 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 01:23:05 ]
>>247
何が作りたいのか俺にはわからんが
他のアプリで似たような動きしてるもんあったら教えてみぃ

249 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 08:18:03 ]
MFCのライブラリをスタティックリンクすると挙動が変になり悩んでます。

[現象]
・スタティックリンクすると、
 メニュー → ファイルを開く → コモンダイアログのフィルタに「すべてのファイル(*.*)」がなくなる。
・共有DLLでビルドすると普通に出来る。

--
新規プロジェクトでスタティックリンク試してみると
普通に出来るので俺が悪いのは確かだろうが・・・

ちなみにデバッグビルド(&スタティックリンク)すると
[docmgr.cpp]
DoPromptFileName()
    VERIFY(title.LoadString(nIDSTitle));
でエラーになる。
この先を追っかけているが(atlcore.hとか)だんだん鬱になってきた。
似たような現象になった人いませんか?

>>247 割り込んでごめんなさい

250 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 08:41:24 ]
フォーカスないウインドウにもマウスのメッセージは飛んでくるし
WM_MOUSEMOVEすらそいつらには飛んでこないというのは変



251 名前:デフォルトの名無しさん [2007/10/09(火) 14:34:01 ]
>>248
そうですね。。たとえて言えばエクセルのオートシェープをウインドで表現し、
シートに沢山並べた状態みたいなものでしょうか。


252 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 21:54:53 ]
トラッカークラス使えよ

253 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 10:54:24 ]
VC6です。CListCtrlをレポート形式で使ってます。
SetExtendedStyle()でLVS_EX_GRIDLINESを設定するとグリッド線が表示されていたのですが、
Windows2000からWindowsXPに変えて、画面をXPスタイルで表示するとグリッドが消えてしまします。
設定の仕方を間違えているのでしょうか。

254 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 11:22:16 ]
>>253
スクロールさせると消える挙動はバグ。修正予定はたぶん無い。
どうしても直したいなら、自前描画するしかないと思われ。

255 名前:253 mailto:sage [2007/10/10(水) 12:35:12 ]
>>254
まだスクロールもさせていない段階なのですが・・・。

256 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 20:02:58 ]
カスタムコントロールにCPenで書いた線を消そうと
void CLineChartCtrl::DeInvalidateCtrl()
{
CClientDC dc(this);
CRect rcClient;
GetClientRect(rcClient);
InvalidateRect(rcClient , TRUE);
}
として再描画しても消えないのはお子ちゃまだからデツカ?
ハンドルもしっかり取れてるのにな??


257 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:11:51 ]
おぼっちゃまがやっていることは
ただ画面を更新してるだけ


258 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:14:22 ]
再描画でまた書いてるだけなんじゃ……
ちなみに、その処理ならCWnd::Invalidate()一発で済む。

259 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:19:55 ]
>>257のおじさま、ありがd
うぅぅぅ〜〜〜、嫌な悪寒デツ
どうしたら簡単に線が消せマツカ?
やっぱり書いた線をxorで描くとかマンドクサイことやんなきゃムリッポなのかなぁ。。。。。。うぅぅぅ〜〜〜


260 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:31:29 ]
>>258さんもありがd
やってミマスタガ線が消えません、MFCってCPenクラスがあるならCEraserクラスも
作ってホスイ片手落ちって言うんだよねこれ豆知識
線が消したいというか初期画面に戻したいんデツガ、コンストラクタをも一回読んでみたら
どうなるのかな、実験シマツ



261 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:41:26 ]
おまいは何か根本的に勘違いをしている。
ウィンドウに描画した内容は、基本的に保持されていない。
描画内容を変更したい時は、一旦クライアント全体を無効にして、
次の再描画からその変更した内容で描くようにする。

自前でフレームバッファを用意してそこに描画してる、とかは無しな。

262 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:45:15 ]
>>260
おまえ、あたまん中をいっぺん消した方がいいぞ


263 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:57:24 ]
最小化して戻したら消えてないか?

264 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:59:21 ]
>>260
消しゴムかそうか?

265 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 01:27:09 ]
まぁマイクロソフトのウインドシステムは確かにわかりにくい仕様がおおいけどな。



266 名前:デフォルトの名無しさん [2007/10/15(月) 10:11:46 ]
VS2005です。
SDIのプロジェクトからダイアログを追加し(CDialog1)、
そのコンストラクタにビューのポインタを渡してみたのですが、
ダイアログはフレームウィンドウの中央に出てきてしまいます。

void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
  CDialog1 dlg(this);
  dlg.DoModal();
}

ダイアログのコンストラクタで親ウィンドウを指定しているのに、
なぜその中央に表示されないのでしょうか?
中央に表示させたい場合は、ダイアログに何を渡せばよいのでしょうか?

267 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 11:49:39 ]
.........@ノ”

かたつむりなのです。
わかってほしいのです。
触られると触角がひっこんじゃうの。
動けなくなっちゃうの。
よくわかんない、でもそうなっちゃうのだ。
雨の日とかにぺたぺた這うのが好きなのです。
なんでかしら。
自分でもよくわからないのだ。
あんまり指ではがさないでください。
ごはんたべてうんこしようっと。


268 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 20:36:21 ]
塩撒くか

269 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 22:02:40 ]
>>266
>>240とたぶん同じ原因なので、同じ解決法で。
SetOwnerしておいて、OnInitDialogでCWnd::CenterWindow(GetOwner())。
別にオーナーに拘らずとも、中央配置の元になるウィンドウを渡せればいいんだけどね。

270 名前:デフォルトの名無しさん [2007/10/16(火) 09:30:39 ]
>>269
ダイアログのOnInitDialog()でGetParent()とm_pParentWndを調べてみたら、
m_pParentWndにはコンストラクタで渡したビュークラスが入っているのに、
GetParent()ではメインフレームが返ってきました。

OnInitDialog()でm_pParentWndを直接CenterWindow()に渡してみたところ、
ビュークラスの中央に表示させることができました。
m_pParentWndっていうのは隠れメンバっぽいけど、
これならダイアログを呼ぶ側でオーナーを別途指定する必要は無いですよね。

ダイアログのコンストラクタって、なんの意味があるんだ…?



271 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 11:14:36 ]
>>270
それはダイアログ(そのもの)ではなくてダイアログクラスだ。
OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。

272 名前:デフォルトの名無しさん [2007/10/16(火) 11:49:03 ]
>>271
> OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。

もちろんコンストラクタの使いかた自体は理解しているつもりですが、
ダイアログクラスのコンストラクタで親ウィンドウを指定しても
それが実際の親にならないのなら、
コンストラクタで親ウィンドウなんて指定させるなよっていうことでした。

まぁ今回の件では、隠れメンバに保管されていることがわかったので、
コンストラクタに渡す作業は無駄ではなかったようですが。

273 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:58:53 ]
>それが実際の親にならないのなら、

親になってるからCenterWindowが正しく動作しているのでは?
CWnd::GetParent()が親じゃなくオーナーを返すのは、内部で
呼び出しているAPI(GetParent())の仕様。
トップレベルウィンドウがGetParentするとオーナーを返すみたいね。

274 名前:273 mailto:sage [2007/10/16(火) 18:04:38 ]
あ、CenterWindow(NULL)じゃ駄目なのか。しょっく

275 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 21:29:33 ]
MFCアプリケーション(ダイアログ)の終了時、アプリケーションのの戻り値(%ERRORLEVEL%)を
使用したいんですが何か方法ありますか?

・コンソールアプリケーションだと一瞬コンソールが表示されるのが問題
・引数なしの起動でダイアログでて起動をさせたいができればMFCダイアログテンプレートで作りたい。

という理由です。

WinMainのでやれば恐らく可能とは思いますが・・誰か知ってたら教えてください。

276 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:04:11 ]
>>275
CWinApp::ExitInstanceをオーバーライド

277 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:12:31 ]
>>276
今その方法でやったらできました。

一応方法を書いておくと、ExitInstance で戻り値を返すだけではだめで
start /wait aaa.exe
とかしてアプリケーションの終了を待機しないとだめなんですね・・
当然といえば当然なのかも。

なにはともあれ、ありがとうございました。


278 名前:デフォルトの名無しさん [2007/10/16(火) 23:44:10 ]
ダイアログアプリケーションでCDialog派生クラスのデストラクタがないのですが、
デストラクタの処理はどこでするのでしょうか?

279 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 23:54:06 ]
>>278
勝手にオーバーライドすればいい。

280 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 00:09:14 ]
定型文のボタンを押したら、
CEditコントロールのカーソル位置に文字を自動で入力したいのですが、
どうやればいいですか?




281 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 00:13:17 ]
現在のCEditの文字取得して定型文追加して再設定
カーソル位置は GetSel() で取得

282 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 00:26:29 ]
>>281
ありがとうございます!

283 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 11:46:56 ]
★番組で紹介された亀田史郎が息子・興毅に書いた手紙
興毅 ほんとうに おめでとう
お前は もう 親父だけの者ではない
今や世界の亀田興毅になったんじゃ
それも山あり谷ありの厳しい勝負の道を
ひたすら歩み続けたからこそ今日の栄光が会った
しかしボクシングの道は終った分けではない
これから厳しいボクシング道が待ってる
興毅よ万文の山はいくつはばまおうとも
戦陣の谷に何度も落ちようとも前え 進め
最後に 本当におめでとう
親父

★ アニメ「侍ジャイアンツ」最終回
川上監督が番場蛮に贈った言葉
番場よ、本当におめでとう。
おまえはもうジャイアンツだけのサムライではない。
今や世界のサムライになったんじゃ。
それも山あり谷ありの厳しい勝負の道を
ひたすら歩み続けたからこそ、今日の栄光があった!
しかし、野球の道はこれで終わったわけではない。
これから厳しい野球道が待っている。
サムライよ、万丈の山がいくつ阻もうと、
千尋の谷に何度落ちようと、前へ進め!
その前途を祝って、もう一度言わせて貰おう。
番場蛮、本当に、おめでとう!
巨人軍監督 川上哲治


284 名前:デフォルトの名無しさん [2007/10/17(水) 21:16:32 ]
visual c++ 2005 SP1でSDIアプリを作っています。
MFCをスタティックリンクでビルドすると、Cランタイム(_recalloc)で
メモリリークが発生します。共有DLLでビルドするとリークは発生しません。
リークのチェックにはBoundsChecker8.2を使用しました。

スケルトン(ソースは変更しない)でも同じでした。
どなたかご存知ないでしょうか?

285 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:26:32 ]
>>284
BoundsCheckerって使ったことないから知らないけど
support.microsoft.com/kb/192102/ja
この情報のVCのバージョン相当古いのは分かってるが、参考にならないかな?

286 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:02:39 ]
スタティックリンクは使うなってことよ


287 名前:デフォルトの名無しさん [2007/10/19(金) 13:00:37 ]
CInternetsessionでのFTPのcloseは、FTPサーバーにログが残らないものなのでしょうか。

288 名前:デフォルトの名無しさん [2007/10/19(金) 15:04:58 ]
CCriticalSectionについて質問があります。
今Visual C++ 2005でアプリを作成しているます。

TestA.cppに通信処理があって2箇所からココを呼び出してます
1つはTestA.cppのOnTimerからコール
1つはTestB.cppのワーカースレッドからコール
通信処理は、入った時点で CCriticalSectionのLock()、抜けるときにUnLock()してます

で、問題なのはTestB.cppのワーカースレッドから通信処理をコールし、Lock状態のときに
TestA.cppのOnTimerから通信処理をコールするとデッドロックしてしまいます

なぜそうなってしまうのか、原因が全く分からず困ってます・・・
何か分かる方、いらっしゃいましたらご教授お願いします


289 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 15:38:34 ]
通信処理が怪しい。
OnTimerの呼ばれるスレッド側に依存する処理が混じっていないか?
メッセージキューが回っている必要がある、とか。

290 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:20:28 ]
>>289
ご返答ありがとうございます
通信処理の本体はTestC.cppに用意してあり、そこで完結してます
それをTestA.cppからコールしているだけなのです
なので依存する処理とかはないと思います

簡単に書くとTestA.cppの通信部分はこんな感じです

void CTestA::SendProc()
{
m_CriticalSection.Lock();

TestC->SendData();

m_CriticalSection.Unlock();
}

もしかして、OnTimerとCCriticalSectionのLock、UnLockは
同じ場所(TestA.cpp)にあってはいけないとか
そんなことはない・・・ですよね?




291 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:26:09 ]
当たり前だろ
Lock状態というのは、他から同時に同じ部分をアクセスさせないように
するのが仕様だよ
要はバッティングしないようにしてるわけだから、用がすんだら
解放される


292 名前:291 mailto:sage [2007/10/19(金) 17:27:56 ]
>>291 は、>>288 に対するレスね

293 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:36:27 ]
>>292
Lock状態のときに、その処理に入ったら待機状態になりますよね?
先にLockを掛けた処理が動いてUnlockしてくれればなんの問題もないのですが、
何故か動いてくれないんですよ・・・
なので困っております・・・
説明不足ですみません

294 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:06:04 ]
ワーカースレッドからSendProcを呼び出した際にm_CriticalSection.Unlock(); 
までたどり着いてないってこと?

295 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:11:19 ]
UI更新しようとSendMessageしてロック、とかは初心者にありがちなんだけどな。
TestC->SendData()の処理内容が判らないことにはなんとも。
あと、Lock/Unlockを直接書くより、CSingleLockを使っておいた方がいい。

296 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:32:57 ]
>>294
はい、おっしゃる通りです
Lockした状態でOnTimerから通信処理に入って
m_CriticalSection.Lock(); の中へステップで進んで行くと
:EnterCriticalSection(&m_sect); で実行中になったまま処理が戻らず、
仕方なくデバッグ中断すると
「プロセスはデッドロックされているか、ユーザーモードコードがどれも実行されません。すべてのスレッドが中止されました。」
となります


>>295
TestC->SendData()の処理内容はUSBドライバに対して
プロトコルに沿ったデータの送信・受信をしています
CSingleLock、ちょっと勉強してみます


297 名前:294 mailto:sage [2007/10/19(金) 18:51:18 ]
ならAPIのTryEnterCriticalSectionを使うか >>295の方法。
ワーカスレッドから呼ばれたTestC->SendData()がフリーズしてる可能性もある。

298 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:25:33 ]
>>297
TryEnterCriticalSectionを試してみたところ、それっぽい動きになりました
ありがとうございます!

ところで、MSDNライブラリに書いてある解説に
「TryEnterCriticalSection 関数は、クリティカルセクションの所有権を
取得できたかどうかにかかわらず、すぐに制御を戻します。」
とありますが、これは処理が終わる前に次の処理が動いてしまう
と解釈してよろしいのでしょうか・・・


299 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:36:13 ]
戻り値で、他のスレッドがCriticalSectionを所有している事が判るわけだから
後で再送するとか、諦めてエラーにするとか好きにすれば良い。

300 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:41:08 ]
>>299
了解しました
戻り値で判断して何とか回避してみます

皆様、色々ご指導ありがとうございました
とてもとても助かりました
素敵な週末を過ごしてください



301 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 23:38:36 ]
今後Winアプリって.NETがデファクトスタンダードとなるんですかね?
MFCは開発止まってるのですか?

302 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:03:37 ]
デファクトスタンダード(笑)
まあ、そうだろうね。
XPが標準になってることで、.NETFrameworkデフォルトで入ってるだろうし

最近のすごいアプリ
3ds maxとか、C++/CLI(.NET使えるように拡張したC++)で
作られてるみたいだし


303 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:17:45 ]
Win32で十分だろ。なぜ.Netなんかで開発するの?
いまはじめてWindowsFormアプリケーションってのを生成してみたが
さっぱりわからない。ショック。


304 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:37:31 ]
しょぼいツール作るならWin32でいいけど、
こったもの作るなら、.Net最高

305 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:55:04 ]
自分がMFCを勉強し始めた時と比べると、C++/CLIの学習は
随分楽だなーと思った。

でもC++/CLIの描画がGDI+を使わなくなるか、GDI+の性能が
大幅アップするまではMFCを使い続ける気がする。

306 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 09:55:15 ]
結局.NETってライブラリとして充実しているんだろ?
Win32だって充実させてくれたらいいじゃん。
なんで言語まで変えるの。。

307 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 10:45:24 ]
>>303
Win32、MFCが理解できて
.NET Frameworkが理解できないヤツはいねえだろ
MTは運転できるがATは運転できない というヤツがいないように

308 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 22:12:33 ]
>>304
逆だろ?
こったものを.NETで作るのは無理
メモ帳程度のテキストエディタなら.NETでも十分つくれるが
メジャーなテキストエディタに勝とうとしたら.NETでは絶対無理

309 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 23:03:43 ]
ちょっとさみしい気もするが手軽にきれいなのできるからいいよ
クラスの構造もMFCと比べるときれいだし、仕事の関係上使えないのが残念なくらいだ
C#とかで作ってるとVBって(使ったことないけど)こういうもんなのかなーって思うくらい簡単

310 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:41:09 ]
ていうか基本的に糞重いアプリができる



311 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:28:10 ]
296じゃありませんが

ちょっと前(>295)で
CCriticalSectionを直接Lock/Unlockするのではなく
CSingleLockを使った方がいいとありますが
その理由はなぜでしょうか?

CCriticalSectionだと待ち合わせ時間が設定できないって事くらいですか?

312 名前:デフォルトの名無しさん [2007/10/22(月) 22:31:04 ]
MFC71.DLLは何処からダウンロードできるのですか?

313 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:29:00 ]
>>311
別に深い理由ではなく、単に解放し忘れが無くなるだけ。
途中returnや例外でロックしっぱなしとかなると危険だし。

314 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:20:13 ]
C#でのDataGridViewみたいな便利なものはないんですか?

315 名前:sage mailto:sage [2007/10/23(火) 02:40:33 BE:233717663-2BP(0)]
質問です。

あるGUI有りのアプリから、別のDLLの関数を呼び、そのDLLが
生成したウィンドウを表示したところ、Tab キーや、OK, Esc キーなどが
期待通りに動作しない現象が起こりました。

具体的には、CMainFrame から DLLのある関数を呼び出し、その関数に
HWND を引数に与えて、そのHWNDを親ウィンドウとした、別ウィンドウを
表示しています。モーダルではありませんが、モーダルでも同じ挙動です。

原因が分かる方、教えてください。

VC++ 8.0 SP1
WinXP SP2

316 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 13:45:48 ]
CEditコントロールで質問ス
カレット位置を取得するためにGetSel()を使うというのは理解できるんですが、
範囲選択状態となっている場合、カレット位置がどこにあるかという判断はどーすればいいっスか?

317 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 14:14:30 ]
>>316
CWnd::GetCaretPos()で取れると思う。尤も、クライアント座標だから適当に変換する必要があるけど。

318 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 14:47:10 ]
>>317
ありがとうっス!
ちょっと試してみるっス

319 名前:315 mailto:sage [2007/10/23(火) 16:44:59 ]
自己解決しました。失礼しました。

msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vccore/html/_core_Are_there_any_MFC_classes_or_functions_that_cannot_be_used_in_an_MFC_DLL.3f.asp


320 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 17:12:21 ]
VS2005、ダイアログベースで、マウスオーバーイベントを
ボタンコントロールが取得するにはどうしたらいいでしょうか?

↓やったこと
ボタンを画像にするのに、オーナードローでやってみて
それ自体は問題なかったのですが
マウスオーバーしたときにも画像を変えようと思ったら
マウスオーバーのイベントが来てませんでした。
MSDNみてCBitmapButtonなるものを使って見たのですが
AutoLoadでアサートが出てしまって動きませんでした。






321 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 17:41:50 ]
>>320
前似たようなもの作った時は CButtonのサブクラスの中のOnMouseMoveで
マウスが入ってきたことを検知し、TrackMouseEventを呼び出してWM_MOUSELEAVE
を発生させるようにし表示画像を変えてた。一般的なやりかたかどうかは知らない。
WM_MOUSEHOVERも同様にTrackMouseEventで発生させることができる。
マウスオーバーってホバーのことだよね?

322 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 17:44:08 ]
>>321
そうです。

ありがとうございまいた。
ちょっくらやってみます。


323 名前:デフォルトの名無しさん [2007/10/24(水) 17:42:18 ]
Win32APIスレから誘導されてきました。

MSGraph.Chart(Officeについてくるグラフコンポーネント)をウィンドウに張り付けたいんですが、どうすればいいですか?
MFCのCWnd::CreateContorlをいじってみましたが、うまくいかないです(´・ω・`)
゚・(ノД`)教えて下さい。

CWnd* wnd = new CWnd();
BOOL ret = wnd->CreateControl("MSGraph.Chart", "", WS_VISIBLE, rc, this, 2000);
で、retがFALSEになります。

CreateControlの第1引数を"mscal.calendar.7"にすると、ちゃんとカレンダーが表示されます。

324 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 18:45:52 ]
ActiveXコントロールとして貼り付けたら?

325 名前:323 mailto:sage [2007/10/24(水) 19:25:39 ]
>>324
(Officeフォルダ)\Graph9.olbをリソースエディタのツールボックスに登録しようとしたら、
「有効なCOMサーバーではありません」と言われました(´・ω・`)
そもそも根本的に無理なのでしょうか?

326 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:13:31 ]
ググってみて思ったのだが、
もしかすると、MSGraph.ChartはActiveXドキュメントかもしれない。
自分の所にはOffice無いからそれ以上は分からないけど。

327 名前:323 mailto:sage [2007/10/24(水) 22:38:16 ]
>>326
情報ありがとうございます(・∀・)
ActiveXドキュメントでググリましたが、要領を得ません(;´Д`)スミマセン
ActiveXドキュメントというのは、それ単体では表示できず、
ExcelのWorksheetや、RichEdit等にしか貼り付け出来ないということでしょうか?

328 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:24:44 ]
質問です。

class CHogeA;
class CHogeB;

class CHogeA : public CView
{
...
private:
CHogeB m_hogeB;
};

class CHogeB : public CWnd
{

};

CHogeA 上に CHogeB を貼り付けて使っていたのですが、そうすると、
CHogeA にて例えばマウス操作などのイベントを拾うことが出来ません。

そこで、
1. CHogeA でも各種イベントを拾う、一般的な方法がありますか?
2. CHogeA と CHogeB で、ウィンドウを2枚作らず、1枚を共有するような手法がありますか?

よろしくお願いします。
WinXP SP2
VC++ 8.0 SP1


329 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:32:13 ]
>217


330 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:14:52 ]
>>328

>1. CHogeA でも各種イベントを拾う、一般的な方法がありますか? 

あなたの書いたとおりの構成でサンプルを作ってみたらマウスイベントは
全てCHogeAに流れました。逆にCHogeBでマウスイベントを拾うためには
細工が必要でした。

>2. CHogeA と CHogeB で、ウィンドウを2枚作らず、1枚を共有するような手法がありますか? 

おそらくあります。

要するに情報不足杉です。



331 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:09:51 ]
SDIでCView
CViewでCWndをCreate
あとはどこもいじらないでCWndにMouseMoveイベント来たよ

332 名前:デフォルトの名無しさん [2007/10/27(土) 10:30:33 ]
スレ間違いで再投稿です。
マルチすいません・・・

Visual studio6.0です。
ラジオボタン2個、ボタン1個のwindow作ってます。
MFCでラジオボタンにintの変数を追加しようと
してもbuttonにしか変数が追加できません。

どうすれば、受付けてくれるのでしょうか?
VS.NET仕様のテキストを見ながらやってて違いに困ってます・・・

333 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:48:56 ]
ラジオボタンはボタンなの

334 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:53:22 ]
>>332
ラジオボタンのグループ分け(WS_GROUPのオン・オフ)がきちんとできているか?
面倒ならDDX_Radio()を直書きしてもいい。案外簡単だから。

335 名前:デフォルトの名無しさん [2007/10/27(土) 11:07:00 ]
>>333
言われて見れば・・・「チェックしたか、してないか」しかないのに
変数の設定っていうのも変な気がします・・・。

>>334
グループ分けは出来てると思うので
ラジオボタンがどんな値を返すのか勉強してきます。

VC6.0準拠の本かサイトも探してきます・・・

336 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:50:57 ]
VC2005でもそこら辺の仕様は変更されていなかったはず。
MFCのヘッダをDDX_Radioで検索して、実際に中身を見た方がたぶん早い。

337 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:12:59 ]
グループをチェックすれば出てくるな

338 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:21:37 ]
Win2k 上で vc6 sp6 使ってMFC勉強中の者です。
ウィザードで CFormView 指定してつくったもので、
その画面のボタンから CDialogの Modal で表示してる部分があるんですけど、
垂直方向に一画面に入りきらなくなってスクロールさせようと思い、ハマッテマス。
リソースで垂直のチェック入れて、OnVScrollとってきてScrollWindowExつかって
みたんですけど再描画で位置がリセットされちゃうんで OnDrawで覚えた値を使って
ScrollWindowExで戻してます。みなさんもこんなやり方で実装します?
アドバイスお願いしますm(__)m
やり方、なんか間違ってる気がするんですよね……。
CFormViewでdoModal できれば楽なのになぁ〜。

339 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:13:37 ]
リセットされるところをみるに、SetScrollPosしていない予感。
WM_VSCROLLはスクロールさせたいという意図を伝えてくるだけで、
実際にスクロールバーの位置を確定させるのはプログラム側の仕事。

340 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:35:10 ]
スクロールバーが付いたダイアログって見たことない。
止めるつもりは無いけど、自分ならプロパティシート使う。



341 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:13:02 ]
もう1個別のCFormViewのウインドウ出すのは可能だし
CDialogの上にCFormViewを貼り付けることも可能
でも問題はそういうことではなさそうだな

342 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:51:04 ]
レスありがとうございます
>>339
ウィンドウについてるって事で OnVScroll内に引数でもってきてる pScrollBarは null なので
pos = ::GetScrollPos( m_hWnd, SB_VERT );しています。
あとは nSBCodeみて 移動量決め SetScrollPos( m_hWnd, SB_VERT, pos, TRUE );して
ScrollWindowEx( 0, 垂直移動量, NULL, NULL, NULL, NULL, 0 ) してます
で…再描画でリセットされてしまうので OnPaint()用意して ScrollWindowEx( 0, 総移動量, …
って感じになっちゃっております。
>>340
なるほど。プロパティシートですか。
いやぁこまった、変えられない仕様みたいでして。
>>341
CDialog上にCFormViewの貼り付けですか。 CDialog持ってるクラスのメンバーに
CFormView持ってるクラスをメンバーのインスタンスもたせるのかなって想って
ちょっと今やってみましたがProtectあたりでひっかかってコンパイルもとおりませんね。
難しい……。

343 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 21:18:23 ]
子ウィンドウを全然動かしていない件について。
そりゃ、再描画でリセットされるように見えるわ。

子ウィンドウを一つ一つ動かすより、
フレーム-CDialog派生の子ウィンドウ(=フォーム) という風に乗せて、
フォームの位置を動かす感じで作ればいいんじゃないかな。

344 名前:デフォルトの名無しさん [2007/10/28(日) 01:43:07 ]
CSliderCtrlを使用して、マウスでクリックした位置に一発で移動する動作をさせたいです。
(通常はページスクロールをしますが、この動作をさせずに、クリックした位置に移動させたいです。)

ためしにGetChannelRectでスライダーの稼動範囲(厳密には稼動範囲より広いエリアになってしまうけど。。)とマウス位置から
Posを求め、SetPosしています。これだと問題が二個あります。
1)ユーザーが一回クリックすると、見た目上二回動く
2)そもそもGetChannelRectはスライダーの稼動範囲を取るわけではないので、微妙に位置の計算が狂う。

なにか良いアイディアは無いものでしょうか?


345 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 03:19:32 ]
ぶち殺すぞ糞が

346 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 03:39:56 ]
↑しゃぶれよ


347 名前:デフォルトの名無しさん [2007/10/30(火) 11:52:37 ]
とりあえず保守させておいてくれ
また質問したい時がくるかも知れんから

348 名前:デフォルトの名無しさん [2007/10/31(水) 09:32:39 ]
tserve01.aid.design.kyushu-u.ac.jp/~fujiki/vc_lecture/c_5.htm
のページを見てキャラクターを表示しようとしてるんですが
キャラクターの白い部分が残って
うまく表示がされません、どうすれば良いか教えて頂けないでしょうか。
お願いします。

349 名前:291 mailto:sage [2007/10/31(水) 10:37:25 ]
そのページを見てわからんのなら
君にはむりだ


350 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 10:49:25 ]
>>348
謎は解けた!
マスク描画のROPを、SRCPAINTからMERGEPAINTに変えれば正しく描画される。

普通はキャラ画像の背景は黒にして、
SRCANDで抜いてSRCORで重ねるってのが定番だと思うのだけどな。
CImageListならカラーキーを使った描画ができるから、
こっちを使った方が手っ取り早いかも。



351 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 12:36:21 ]
>>350さん
ありがとうございました。
感謝感謝です。

352 名前:デフォルトの名無しさん [2007/11/01(木) 07:21:07 ]
どうも、他スレから流されてきました。

Win32環境+VS2005で開発を行っています。
ダブルクリックでファイルを開く処理に対応させようと頑張っていた所
Debugビルドでは成功したのですが、Releaseビルドにするとファイルを開かなくなりました。
(でもショートカットに開きたいファイル名を指定するとReleaseビルドでもきちんと開く)

そこで処理を追っていくと、どうもInitInstanceメソッドが呼び出されていないようなのですが、似たような経験をされた方はいらっしゃらないでしょうか?




353 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:16:22 ]
そこまで分かってんなら呼び出せばいいじゃん

354 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 14:28:25 ]
CTreeCtrlを使ってエクスプローラライクなダイアログを作っています。
メーラーの未読数表示のように、フォルダ内のファイル数を表示する
方法はあるのでしょうか?

ラベル編集も可能にしたいので、"フォルダ名(n)"のように直書きでは
問題が出てしまいます。
やっぱり無理矢理作るしかないのでしょうか?

355 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 14:57:38 ]
>>354
楽な方法は無いな。
NM_CUSTOMDRAWを始め、
いくつかの通知メッセージを処理しないと実現できないと思う。

356 名前:352 [2007/11/01(木) 15:25:21 ]
>>353
すいません、関連付け関係のレジストリをすべて掃除したら直りました。
プログラムのミスではなかったようです。orz


357 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 15:33:26 ]
ダブルクリックってそういう意味か
仕様を満足に説明できないやつは1人でやってればいいと思う

358 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:04:18 ]
MFCを使った有名なソフトはどんなものがあるんですか?

359 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:51:16 ]
秀丸


360 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 00:07:13 ]
ペイント



361 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 15:55:16 ]
>>358
有名になる予感
www.cute.or.jp/~makuchan/wore.html
10/31


362 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:48:38 ]
Internet Explorer

363 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:19:39 ]
>>361
いいねえ。
これは期待できる。

364 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:58:22 ]
得体の知れないリンクは踏まないようにしてる

365 名前:デフォルトの名無しさん [2007/11/05(月) 22:00:13 ]
マルチです。すいません。
tserve01.aid.design.kyushu-u.ac.jp/~fujiki/vc_lecture/c_6.htm
のお絵かきソフトを作るページを参考にしてるんですが
「ToolBar」の「IDR_MAINFRAME」のボタンとIDを書き換えても
ページに書かれているようなIDに対応するような関数が作られず
ボタンも描いたように表示されず灰色の使用不可のような状態
になってしまいます。
VS2005stdです。
どなたか、わかるかた、VS2005ではどうしたらよいか教えていただけないでしょうか。
お願いします。

366 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:06:23 ]
>365
教えてやったのに無視してこっちに引越しか?
とんでもないやつだな

367 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:28:00 ]
VC++2005スタンダードを使ってMFCを勉強しているのですが、
onNewDocumentやonOpenDocument、Serializeなどファイル操作や
イベント処理などがどういう流れで行われているのかがいまいち把握できないので、
詳しく解説してある良い書籍とかないでしょうか?

ちなみに今頃MFCかよとかなしでおねがいします。

368 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 02:40:56 ]
いや、本当にいまさらMFC勉強しても意味がない
>>367
みたいな質問してるようだと、人に見せれるようなアプリがかけるまで、2年以上はかかる
2年後にはMFCはVSからなくなってるぞ

369 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 11:34:51 ]
なくなるわけねーだろ
お前みたいな、おこちゃまアプリしか作らんやつには
MFC は必要ないだけだ


370 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 12:46:27 ]
2年後が楽しみになってきました



371 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:17:56 ]
2年後にMFCが無くなってたら怖いな。
M$がwin32apiを無理矢理クラス化し、永続させてきたMFCを
ばっさり切るなんて、今までの努力を捨てちまうようなもんだもんな。
それにVBを.net化したりしてるのを見れば「まだまだ、へこたれへんでー」
ってな感じに受け止めれる。
まぁ、主流はVC#VB.netの方針で発展していくんだろうね。

372 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:37:15 ]
>>371
いいえ。C++の財産はとてつもなく大きいものです。

C++/CLI について語ろうぜ Part2
pc11.2ch.net/test/read.cgi/tech/1142147319/
これ最強

373 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:45:45 ]
Picture ControlのBorderをプログラム実行中に変更する方法を教えてください

374 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 16:16:42 ]
変らない?

375 名前:373 mailto:sage [2007/11/06(火) 16:17:49 ]
>>374
やり方がよく分からないんです。

376 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 10:43:29 ]
パスがファイルかフォルダかを判定する方法があれば教えていただけないでしょうか?
そのパスは存在することが前程でよいのですが。。。

よろしくお願いいたします。

377 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 10:53:11 ]
ファイルの属性を見る
MFCにそういうのを扱うクラスはなかったと思う

378 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 10:58:57 ]
>>377
CFileにGetStatus()があるのだが。static版の方は引き数にフルパスを取るから一応使えると思う。

379 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 11:25:51 ]
CFileでディレクトリも扱えるの?

380 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 11:32:05 ]
>>379
CFile::GetStatus()のstatic版は、実体を必要としないので普通の関数のように使える。
つまり、その対象を予め開いておく必要はない。詳しくは、MSDNでも読め。



381 名前:367 mailto:sage [2007/11/07(水) 18:08:26 ]
>>368
何を根拠に2年なのかkwsk、というかカチンときた。

まぁ、ATLとか.NETとか出てる中、いまどきMFCやるのもあれかもしらんが・・・

で、MSDN以外に参考になるものはないってことかい?


382 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 18:13:41 ]
カチンと来るのは勝手だけれど、MFCが斜陽なのは事実。
一頃本はたくさんあったようだしWebSiteもそれなりにあると思う。
それを探せないようでは先が思いやられるのも同感。

383 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 18:15:08 ]
ATLとMFCって同じレベルのものなの?
全然知らなくてすまそ

384 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:48:24 ]
無駄に複雑で使えないっていう点では同じレベル

385 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:13:42 ]
簡単なツールならVB感覚でさくっと作れるじゃない。MFCは。

386 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:05:34 ]
やっぱり.NET

387 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 15:15:14 ]
View画面でのサイズ指定で
SDIのCMainFrameウィンドウサイズを変更する関数ってありますか?

やっぱり、指定のサイズ+枠のサイズとかメニューのサイズとかを計算しないとだめですか?


388 名前:デフォルトの名無しさん [2007/11/09(金) 16:37:49 ]
CHTMLViewクラスを使って表示したHTML文書のテキストの
色などをプログラム中から変更することはできるでしょうか?

PutPorpertyというメソッドを使えばできそうな気がするの
ですが使い方がよく分かりません。

<P class='test'>Hello, World</P>
というテキストの色を赤にする方法を教えてください。

389 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:49:22 ]
>>388
CHTMLViewのGet/SetPropertyは、単にIWebBrowser2の同メソッドが呼ばれるだけ。
GetHtmlDocument()から始めるしかないと思う。という訳で、試しに書いてみた。
ちなみに、MFCでなくてATLだが全く問題無い。

// 1. CSSを追加してみる方法

CComPtr<IDispatch> spIDisp;
spIDisp.Attach(GetHtmlDocument());
CComQIPtr<IHTMLDocument2> spIDom(spIDisp);
CComPtr<IHTMLStyleSheet> spCSS;
spIDom->createStyleSheet(NULL, -1, &spCSS);
long idx;
spCSS->addRule(CComBSTR(_T("P.test")), CComBSTR(_T("color:red")), -1, &idx);

390 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:53:27 ]
// 2. エレメントに直接スタイルを追加してみる方法

CComPtr<IDispatch> spIDisp;
spIDisp.Attach(GetHtmlDocument());
CComQIPtr<IHTMLDocument2> spIDom(spIDisp);
CComPtr<IHTMLElementCollection> spElemCol;
spIDom->get_all(&spElemCol);
spIDisp.Release();
spElemCol->tags(CComVariant(_T("P")), &spIDisp);
CComQIPtr<IHTMLElementCollection> spElemCol2(spIDisp);
for ( int idx = 0 ; ; idx++ )
{
spIDisp.Release();
spElemCol2->item(CComVariant(idx), CComVariant(), &spIDisp);
if ( !spIDisp ) break;
CComQIPtr<IHTMLElement> spElem(spIDisp);
CComBSTR clsname;
BSTR bstr;
spElem->get_className(&bstr);
clsname.Attach(bstr);
if ( clsname != _T("test") ) continue;
CComPtr<IHTMLStyle> spStyle;
spElem->get_style(&spStyle);
spStyle->put_color(CComVariant(_T("red")));
}




391 名前:388 mailto:sage [2007/11/09(金) 22:57:03 ]
>>389 >>390
ありがとうございます。ATLは全く知らないのでコードは謎ですが、
必要なヘッダを調べてインクルードして何とか両方とも動かすこと
ができました。

if ( clsname != _T("test") ) continue; のところで
エラーが出たので調べてみると CComBSTR::operator==は
定義されていましたが CComBSTR::operator!=は定義されて
いませんでした。if ( clsname == _T("test") ) { /*../*/ }
と直すとコンパイル通りました。これはVisual C++6.0の
不具合かもしれません。

師匠になってほしいです。

392 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 02:19:17 ]
blogs.msdn.com/somasegar/archive/2007/11/09/visual-c-libraries-update.aspx
結局捨てないのか
ともかく壮絶なソースコードが見れそうだ

393 名前:デフォルトの名無しさん [2007/11/14(水) 11:34:45 ]
CReBarでレバーコントロールを利用しているのですが、
複数のコントロールを1つのバンドに含めるにはどうすればいいでしょうか。

CReBar cRebar;

cRebar.AddBar(コンボボックス)
cRebar.AddBar(ボタン)

とすると、コンボボックスとボタンが別々のバンドに配置されますが、
目的としては、コンボボックスとボタンを同一バンドに配置したいです。

394 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 12:30:31 ]
各バンドには 1 つしか子ウィンドウ (コントロール) を含むことができません。
各バンドに複数の子ウィンドウを含めたい場合は、この点が制約になります。

395 名前:393 mailto:sage [2007/11/14(水) 17:10:33 ]
なるほど、ありがとうございます。
ちょっと微妙ですけど、コンボボックスとボタンをスタティックコントロールの子にして、
そのスタティックコントロールをAddBarすることにしました。

396 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 00:22:50 ]
MFCでExcelのセルみたいなぐりっどコントロールってないんですか?

397 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 01:22:56 ]
ありません。ListCtrlを自前で拡張するか、CodeGuruでそうしたものを探すか、市販のライブラリを使うか、
ExcelをDDEで使うことになるかと。

398 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 18:29:30 ]
拡張DLLでダイアログクラスをエクスポートしようとしているのですが、
ヘッダのクラス宣言の中に
enum { IDD = IDD_… };
という記述があります。
このリソースIDは拡張DLL側のResource.hに書かれているものです。

拡張DLLを使う側がこのヘッダをインクルードすると、
リソースIDが見つからないと言われると思うのですが、
拡張DLLでダイアログクラスをエクスポートする場合
この部分はどのように対応すればよいものなのでしょうか。

399 名前:デフォルトの名無しさん [2007/11/16(金) 16:17:31 ]
保守!

400 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:52:56 ]
>>398
そのリソースIDが記述されてるヘッダをインクルードしなきゃいんじゃね?
使う側は、拡張DLL側のリソースIDなんて余計なだけじゃね?




401 名前:デフォルトの名無しさん [2007/11/17(土) 18:06:11 ]
MFC VC でセマフォや共有メモリみたいなのって無いの?

402 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:15:43 ]
>401
自分で調べようとも思わないのか?

403 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:25:37 ]
ぐぐってみようとも思わなかったんだろうな

404 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:25:53 ]
VS2005付属MSDNのキーワードに「セマフォ」って入れるだけで
あっさり対応するクラスが見つかった件について。

おまえやる気無いだろ。氏ね。 >>401

405 名前:デフォルトの名無しさん [2007/11/17(土) 22:35:15 ]
>>404
そんな高価なツールもってねえよばーーか

406 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:04:35 ]
VS2005のどこが高価なんだよw
今までのこと考えたらクソ安いつーの
つーかMSDNのちょっと遅れのイメージなんか完全フリーじゃねえか

407 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:12:13 ]
MSのサイトでみれるMSDNはVS2005のとは別ものなの?
同じなら、オンラインで検索すれば。

408 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:15:43 ]
基本的には同じはずだが…

409 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:58:57 ]
VS2005 MFCです
折れ線グラフを描画する、ツールを作りたいんだけど
MFCのツールボックスには、ピクチャーコントロールというツールと
カスタムコントロールというのがあるけれど、どう違うのでしょうか?
また、グラフを描画させるにはどちらのコントロールを選んだ方がいいのでしょうか?


410 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:29:12 ]
>>409
つ[TrueWinChart]



411 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:43:10 ]
>>410
>>409です
True WinChart for .NETですよね、標準価格:102,900円
そんな予算でないです

412 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:58:09 ]
自分で描画するだけだからコントロールは必要ない

413 名前:409 mailto:sage [2007/11/18(日) 19:11:21 ]
>>412
ダイアログに直接描画するのではなく、ピクチャーコントロールかカスタムコントロールに
描いて、それをサブクラス化したいんだけど、違いがよく分からないんだよね

414 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:24:32 ]
違いは標準かカスタムか

415 名前:409 mailto:sage [2007/11/18(日) 19:34:14 ]
ということは、カスタムコントロールのほうが、拡張性(自由度)が
高いってことだね?

416 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:56:50 ]
描画するだけなら、単純にウインドであれば良いだけじゃないの?
ゴテゴテ機能が付いている方がいろいろな横槍がはいって返って上手くいかないかもしれん。


417 名前:409 mailto:sage [2007/11/18(日) 20:34:14 ]
>>416
言われてみればそうかも知れないな、
コントーロールを貼り付けて、描画専用クラスを別に書き、シリアル化したデータを
流し込んで、グラフを描画させようと思ったけど
よく考えたら、描画専用クラスは、ダイアログに描こうがコントロールに描こうが必要なわけで
対象となるオブジェクトがどっちになろうが、使えるクラスを設計する方が賢いかもしれないね

418 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:17:07 ]
.flvから0.5秒おきのBMPを作りたいんですが
何かヒントだけでもいただけたら

419 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:24:14 ]
ヒント MFCと関係ない

420 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:34:30 ]
>>419
とは思ったのですがやはりプログラミングのプロ集団は
MFCスレかと思いまして。



421 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 14:26:56 ]
B's Recorderみたいな画面作りたい><

422 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 15:29:48 ]
>>420
DirectShowスレがあるぞ






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

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

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