2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

■MFC相談室 mfc21d.dll■

1 :デフォルトの名無しさん:2009/08/22(土) 14:34:39
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc20d.dll■
http://pc12.2ch.net/test/read.cgi/tech/1230219816/

2 :デフォルトの名無しさん:2009/08/22(土) 14:37:12
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(VS.80).aspx

3 :デフォルトの名無しさん:2009/08/22(土) 16:31:30
>>1乙FC

4 :デフォルトの名無しさん:2009/08/22(土) 16:45:11
>>1さん、お疲れ様です(><;)

5 :デフォルトの名無しさん:2009/08/22(土) 17:29:24
まさかのdat落ちいちおつ

6 :デフォルトの名無しさん:2009/08/22(土) 18:11:22
MFCなんてまだ需要あるの?

7 :デフォルトの名無しさん:2009/08/23(日) 07:38:55
重要性はかなり低くなったね。

リソースがいっぱいあって、実行速度もそれほど気にしないけど、
多機能なアプリを開発したいって人には.NETとC#の方がコストパフォーマンスが良いし、
(C++/CLIは本来のC++を無視した気持ちの悪い独自拡張が多すぎる…)
軽量・高速が重要なネイティブアプリにはATL/WTLが使われるようになったから。

実際、MFCの関連書籍も大半は6.0でとまっていて
もう7.0以降にはほとんど需要がない事実を物語っている。

8 :デフォルトの名無しさん:2009/08/23(日) 09:53:10
7.0以降でCStringが急激に強まった事実が殆ど知られていのは一寸悲しい。
未だにA2Wとか書いてそうだ。

>リソースがいっぱいあって、実行速度もそれほど気にしないけど、
>多機能なアプリを開発したいって人には.NETとC#の方がコストパフォーマンスが良いし、
その為か、9.0SP1(VS2008SP1)で進化が極端な方向に進み始めたな。
元々GUIアプリの基本的な機能を提供するという目的ではあったけど、
今や、表示テーマの変更や、キーボードショートカットのカスタマイズUIまで、
初めから提供されるようになった。

VS2010以降もやる気満々らしいし。開発チームの暴走発言かもしれないけどw
ttp://blogs.msdn.com/dd_jpn/archive/2008/12/04/9174764.aspx

9 :デフォルトの名無しさん:2009/08/23(日) 12:45:39
個人的なことを言えば、.NET とか C# とかいった新しいものをマスターする時間がない & もったいないのでMFCを使っているのが現状。
ATL/WTL にも興味はあるが、やはりマスターするには時間的なものが・・・。

もっとも、単純なプログラムは なんちゃってMFC 的な独自のクラスを使って書いている。
実質 100KB 程度の実行ファイルが MFC をスタティックリンクしただけで 3MB超になるんじゃ、どっちが主役かわからないもの。(笑)

10 :デフォルトの名無しさん:2009/08/24(月) 00:36:02
漏れの親父がパソコン30万だして買ったけど
なんもできんので、機能をごく必要なものに限って、
ブラウザとメーラーとワープロつくってやったよ。

喜んでくれた。別に質問じゃないけど、MFC使って作ったから・・誰かに報告したくてね。

すれ汚しスマソ。

11 :デフォルトの名無しさん:2009/08/24(月) 06:59:10
>>9
afxcontrolbars.h はずせばそんな巨大なサイズにならないんじゃない?

12 :デフォルトの名無しさん:2009/08/24(月) 19:59:49
>>9
3MB超はデバッグビルドだべ?リリースでも1Mぐらいあるけど
まぁ最近の環境だと昔ほど気にする必要がなくてよいかなよいかな

13 :デフォルトの名無しさん:2009/08/24(月) 20:13:41
リボンインターフェース用のリソース入れちゃうからでかくなるんじゃないの?

14 :デフォルトの名無しさん:2009/08/24(月) 20:40:48
button = new CButton[button_num];
button[0].Create(・・・);

こんな感じでボタンを動的に生成して、Viewに配置した時に
ボタンのイベントをViewで受け取るにはどうすれば良いですか?
(ボタンの数は、動的に変化します。)

ド素人の僕にご教授お願い致します。


15 :デフォルトの名無しさん:2009/08/24(月) 21:00:09
>>12
いや気にするよ。新しい機能なにも使ってないようなダイアログベースのちょっとした
アプリで実行ファイルメガ単位って嫌すぎる。まぁ、無駄な機能使わなければ小さくも
出来るからいいんだけど。

>>14
ビューのメッセージマップにON_BN_CLICKEDで出来るんじゃない?

16 :デフォルトの名無しさん:2009/08/24(月) 21:05:22
WM_NOTIFYで通知受け取って捌くしかないんじゃね?
BN_CLICKEDとかボタンから親ウィンドウに通知してくる
ボタンコントロールはWM_NOTIFYじゃなくてWM_COMMANDだったかもしれん

またはCButtonの派生クラス作ってBN_CLICKEDマップして自前で通知送る

17 :デフォルトの名無しさん:2009/08/24(月) 21:18:09
>>14
ボタンの親を当然ながら View にしておいて、View のメッセージマップに
ON_CONTROL_RANGE( BN_CLICKED, 最初のボタンのID, MAXで作成されたときの最後のボタンのID, OnControlRange)
と書く。

Viewのヘッダに下記を追加
afx_msg void OnControlRange(UINT nID);

あとは View で処理。
void CxxxView::OnControlRange(UINT nID)
{
  if ( nID == xxx) ToDO...
}




18 :デフォルトの名無しさん:2009/08/25(火) 01:49:26
エディットボックスから文字列を取得する際、
GetWindowTextを使うと思うんですが、データ型は必ずCStringになってしまうのでしょうか?
ここでCharを使う事って出来ますか?

19 :デフォルトの名無しさん:2009/08/25(火) 02:01:10
>>18
CWnd::GetWindowText には下記の二つがある。前者を使えばいい。
int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount) const;
void GetWindowText( CString& rString) const;

exp.
TCHAR sz[128];
GetWindowText( sz, 128);





20 :デフォルトの名無しさん:2009/08/25(火) 02:10:38
>>19
レスありがとうございます
例でTCHARとなっているところはcharでも問題ないですよね・・?
また、LPTSTRが引数になるということは、エディットボックスの中身がcharポインタに入るってイメージでいいのでしょうか?
すみません勉強不足で変な表現があるかも知れませんが

21 :デフォルトの名無しさん:2009/08/25(火) 02:28:13
>>20
プロジェクトの設定で Unicode 文字セットを使っていないなら char でいい。
「Unicode 文字セットを使用する」にしている場合は char は使えない。

>エディットボックスの中身がcharポインタに入る
まあ、そんな感じのイメージ。難しく言うと、「エディットボックスの中身が、配列 sz の先頭要素のアドレスが示すメモリエリアに入る」

22 :デフォルトの名無しさん:2009/08/26(水) 09:14:48
FormViewにボタンやMSFlexGridを配置しました。
このFormViewを印刷するにはどうしたら良いですか?


23 :デフォルトの名無しさん:2009/08/26(水) 10:59:21
普通のFormViewと同じようにどうぞ。

24 :デフォルトの名無しさん:2009/08/26(水) 21:56:36
>>22です
>>23
ボタンをどう印刷すれば良いのか、全く解りません。
MSFlexGridについては、pDCを使って線とテキストで
あたかもMSFlexGridをそのまま印刷してるような感じに出来る事は解ったのですが・・・
よろしくお願い致します



25 :デフォルトの名無しさん:2009/08/26(水) 22:47:15
>>25
pDCを使って線とテキストで描く。
あるいはそれ用のビットマップリソースを用意して貼り付ける。

26 :25:2009/08/26(水) 22:48:14
って、自分に言ってどーする。^^;
>>25>>24 へのリプライ。

27 :デフォルトの名無しさん:2009/08/28(金) 16:38:44
 

28 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 12:22:49
・・・行ってきた♪

29 :デフォルトの名無しさん:2009/09/04(金) 10:12:20
 

30 :デフォルトの名無しさん:2009/09/07(月) 17:57:10
すいません質問があります.
VC++のダイアログ形式でプログラムしているのですが
下記のプログラムで
myDLG.DoModal()
を行うと最初からあったOKボタンを押してもプログラムが死に切っていないようなのですが
どのようにすればいいのでしょうか.
ググったら無限ループとか永久に待機してるとかっぽかったんですが解決法が良く分かりませんでした.

プログラム開始→OKボタン 普通に終了する
プログラム開始→ボタン8→ファイル選ぶ→OKボタン ダイアログは消えるがプログラムは完全に死んでないみたい

といった状況です.

void CtestDlg::OnBnClickedButton8()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。

//ファイルダイアログを表示してファイル指定する
CFileDialog myDLG(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"AVIファイル(*.AVI)|*.AVI||");
if(myDLG.DoModal() != IDOK)return;
}

31 :デフォルトの名無しさん:2009/09/07(月) 18:42:07
>>30
おそらく問題は、示されたコード以外の場所にある

32 :30:2009/09/07(月) 18:57:41
if(myDLG.DoModal() != IDOK)return;
をコメントアウトすると問題なく動いていたのでここがだめなのかと思っていたのですが…
ダイアログウィンドウがきえてもプログラムが終了しきれてないのはどういったのが考えられるのでしょうか

33 :30:2009/09/07(月) 19:11:50
さすがにそれはエスパーすぎるか…
んーなんなんだろ…
そして何故かボタンをダブクリしても関数つくれなくなった…クラスウィザードとかいうのが立ち上がる…

34 :デフォルトの名無しさん:2009/09/07(月) 19:27:17
>ダイアログウィンドウがきえてもプログラムが終了しきれてない
何を根拠として、こう判断したのかな?

35 :デフォルトの名無しさん:2009/09/07(月) 19:30:39
>>34
画面下部のウォッチと出力のウィンドウが残ったまま
タスクマネージャでみるとtest.exeが起動中
の2点からです.

そして今ダイアログのボタンとか配置する画面で
ボタンをクリックして右のプロパティのところを雷マーククリックして管理イベント開きたいのに
そこが真っ白になってて操作できないという新しい問題が…
作ったボタンダブルクリックしてもMFC クラスウィザードとかいうのが立ち上がるし…

36 :デフォルトの名無しさん:2009/09/07(月) 21:25:48
>>35
プロジェクトのフォルダにある
*.ncb
*.suo
*.user
を一度削除してみろ。

37 :デフォルトの名無しさん:2009/09/07(月) 22:17:51
MFCは良く知らんけど、Win32APIではモーダルダイアログの終了には
return の前に EndDialog を明示的に呼び出す必要がある。
これはモーダルダイアログのウィンドウプロシージャはOSの内部にあるからだ。
(アプリケーションのウィンドウプロシージャがアプリ自身の中にあるのと異なるという意味ネ)

で、MFCにもCDialog::EndDialogがあり、OKとキャンセルではデフォルトで呼ばれるけど
それ以外の場所から終わるときにはこれを呼ぶ必要があるとmsdn様が…

38 :デフォルトの名無しさん:2009/09/07(月) 22:21:55
あと、ちょっと思ったけど、IDOK っていう定数マクロが TNOK って見えちゃうこと、よくあるよね?

39 :デフォルトの名無しさん:2009/09/08(火) 16:33:28
>>36
消したら関数の追加などはできるようになりましたありがとうございます.

>>37
OK キャンセル などのボタンは最初に出来ているものでやってます.
ダイアログの×をクリックしても終わらないみたいです.

40 :デフォルトの名無しさん:2009/09/08(火) 16:44:12
そのtest.exeが残ってるときにデバッグの中断して
スタックトレースみるとどうなってるよ?

41 :デフォルトの名無しさん:2009/09/08(火) 16:59:51
スタックトレースってどうやってみるんでしょうか?
VS.NET 2005ですが…

google-glogとかいうのいれなきゃむりなんかな?

42 :デフォルトの名無しさん:2009/09/08(火) 17:02:00
・・・まさか 『実はそのダイアログはモードレスでした』 なんてオチじゃないだろうなあ。

43 :デフォルトの名無しさん:2009/09/08(火) 17:12:03
特にいじってないはずなのでモーダルだと思います.

2つファイル名取得して画像の合成とかやってるんですが
画像の合成の関数とかは普通に動くんですよね.
ただダイアログのOKボタン押してもexeが終わらないと….

44 :デフォルトの名無しさん:2009/09/08(火) 17:18:44
>2つファイル名取得して画像の合成とかやってるんですが
>画像の合成の関数とかは普通に動くんですよね.

問題なのはこのあたり以降のコトだろうから、>>31 だと言っている。
回答者はエスパーじゃないんだぞ。

45 :デフォルトの名無しさん:2009/09/08(火) 17:47:05
今試しにファイルネームの読み込みを
上にかいたようなものでなく
最初からプログラムにかいておいて上記の関数を呼び出さないでやってみると
処理が終わった後OKボタンをクリックすると無事にexeが終了しました.

ファイルネーム取得関数になんかしらあるとしか思えないのですが…

んでもってファイルネーム取得関数を後半部分コメントアウトして
どの行を行うと終了しないかやってみたところ

if(myDLG.DoModal() != IDOK)return;

を書くと終了しなくなってしまうようでした….

46 :デフォルトの名無しさん:2009/09/08(火) 17:54:57
if(myDLG.DoModal() == IDOK) だった場合はどう処理しているのか?
>>30 にはそのあたりのことが書かれていないんだが。

47 :デフォルトの名無しさん:2009/09/08(火) 17:55:56
void CtesthaloDlg::OnBnClickedButton7()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。

//ファイルダイアログを表示してファイル指定する
CFileDialog myDLG(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"AVIファイル(*.AVI)|*.AVI||");
@
}
void CtesthaloDlg::OnBnClickedButton6()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。

filename1=("C:\\Documents and Settings\\…\\videocamera3.avi");
filename2=("C:\\Documents and Settings\\…\\videocamera4.avi");
       gousei(filename1,filename2);
}
ならOKで@のところにif(myDLG.DoModal() != IDOK)return;をいれると終了しないと言った感じ

なんか複合的に問題が発生してそうでエスパーじゃなきゃむりそうですね…
一回プロジェクト作り直してみて確認してみようかな


48 :デフォルトの名無しさん:2009/09/08(火) 17:58:05
>>30 のコードをそのままコピペして試したけど、ウチでは何の問題もないよ。

49 :デフォルトの名無しさん:2009/09/08(火) 18:02:33
>>46
今はコメントアウトされてます
本来なら画像を取り込んでピクチャーコントロールに表示する感じです.

>>48
やっぱりDoModalの問題じゃなさそうですね…
プロジェクト作り直してやってみます

50 :デフォルトの名無しさん:2009/09/08(火) 18:29:06
もう意味が分からなくなってしまった.

新しいプロジェクトで
>>30作る
終了できた!(ボタン1)
二つ目のボタン作る
こっちでも>>30まではできたので画像読み込みもやる
やっぱ終了しない…
>>30まで戻すが何故か終了せず
いやな予感してボタン1を試してみるとボタン1も終了しなくなってた

なんだろう.なんかデバック情報が変な事になるんだろうか
ボタン1については出来た後いじってないのになぁ
エスパーじゃないと無理そうなのであきらめることにします.

51 :デフォルトの名無しさん:2009/09/08(火) 18:37:15
そうだね。君の言っていることをすべて理解するのはエスパーじゃないと無理そう。

52 :デフォルトの名無しさん:2009/09/08(火) 19:31:39
付き合ってくださった方ありがとうございました.

53 :デフォルトの名無しさん:2009/09/09(水) 12:00:35
スタックトレースはVC++だと呼び出し履歴とかの名前であるだろ

54 :デフォルトの名無しさん:2009/09/09(水) 18:58:50
VC++.net 2002で猫でもわかるに掲載されているサンプルコードをビルドすると
リンクエラーとなるのですがなぜでしょうか?
#include <afxwin.h>
class CMyWindow : public CFrameWnd
{
public:
CMyWindow();
};

CMyWindow::CMyWindow()
{
Create(NULL, "猫でもわかるMFC", WS_OVERLAPPEDWINDOW);
}

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

BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMyWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMyApp MyApp;
エラー
error LNK2019: 未解決の外部シンボル __endthreadex が関数 "void __stdcall AfxEndThread(unsigned int,int)" (?AfxEndThread@@YGXIH@Z) で参照されました。
error LNK2019: 未解決の外部シンボル __beginthreadex が関数 "public: int __thiscall CWinThread::CreateThread(unsigned long,unsigned int,struct _SECURITY_ATTRIBUTES *)" (?CreateThread@CWinThread@@QAEHKIPAU_SECURITY_ATTRIBUTES@@@Z) で参照されました。


55 :デフォルトの名無しさん:2009/09/09(水) 19:19:16
>>54
プロジェクトの設定が間違っている。

56 :54:2009/09/09(水) 21:21:08
>>55
有難うございました

57 :54:2009/09/09(水) 21:38:46
、「ファイル」「新規作成」「プロジェクト」で 「Win32 Application」を選択して
アプリケーションの設定でWindowsアプリケーション、空のプロジェクトで設定しているのですが
どこが間違いなのでしょうか?

58 :デフォルトの名無しさん:2009/09/09(水) 21:45:18
>>57
おまえウザイな。
自分で勉強するこ覚えろよ、屑

59 :デフォルトの名無しさん:2009/09/09(水) 21:48:44
>>57
参考にしている「猫」のページに書いてある。

60 :54:2009/09/09(水) 21:59:11
>>59
見落としてました。有難うございました!

61 :デフォルトの名無しさん:2009/09/09(水) 22:23:41
afxbeginthreadでAとBを生成しました。
AでnewしたデータをBに渡して、Bが使い終わったらBの中でdeleteしています。
そうするとBがdeleteした時にheapエラーで落ちるのですが。
どうしてなのか、全く解りません。
Aの中でdeleteしているような個所やB内で2度deleteを実行しているような所
初歩的なバグはありません。

教えて下さい

62 :デフォルトの名無しさん:2009/09/09(水) 22:45:01
悪い例
A:「作ったよ」
B:「ありがとう。・・・使い終わったから削除するね♪」
A:「・・・私が作ったのに勝手に削除しないでよ!この甲斐性なしっ!」

良い例
A:「作ったよ」
B:「ありがとう。・・・使い終わったよ♪」
A:「ん、じゃ削除するねっ」

63 :デフォルトの名無しさん:2009/09/09(水) 23:08:38
ホントこのAで作ったもんをBで削除するプログラムを書こうって奴の気がしれない
ふつーに特になんの経験もなく気持ち悪いと思わないのか?
センスねぇなマジでw

これ結構経験ある奴でもやるんだよね

manko(new chinko);

みたいにnewで作ったもんしか引数うけつけねーようなクラス書くキチガイ
ポインタで渡すと中で強引にdeleteしようとしやがるのw

なんでこんなもん作るんだマジでw
センス0野郎の書くPGは本当にわからないw

64 :デフォルトの名無しさん:2009/09/09(水) 23:12:50
マウスをドラッグ&ドロップするとき
新しいGDIオブジェクトを生成したとき

…などなど、MFC(というよりWin32APIのせいなんだろうが)は
RAIIの原則をしばしば無視する。
だからその感覚が染み付いている人は
マルチスレッドについても
作る場所と壊す場所が別々で当たり前と感じてしまうのかもしれない。

っていうか、MFCはC++的に見るとキモい使わせ方するライブラリ多いよね。

65 :デフォルトの名無しさん:2009/09/09(水) 23:20:55
>>61
バグがあるんじゃね?

>>62
組み込みでOS使ってたりするとタイミングとか生存期間が非常にしびやな時が多くて
タスク同士の同期をとってたりすると、もうグダグダな〜時が多いから
悪い例の方を使う事が多い

ウィンドウズの場合は、new、deleteする代わりにvectorとかStringとか使って
データの完コピする場合が多いからね〜





66 :デフォルトの名無しさん:2009/09/09(水) 23:32:29
確かに組込みでは、ポインタを渡して相手に全てをほおりなげる場合が多いね。
ウィンドウズも昔はCPU、ソフトが非力だったから相手に後処理を任せて終わりと
昔からの流れが残ってるんだと思ってる。
マルチ・スレッド/タスクで、相手が使い終わったのを待ったりとか
意識しようとすると無駄な時間が多くなる。


67 :デフォルトの名無しさん:2009/09/09(水) 23:47:51
うろ覚えでなんだが、会社の新入りがこんなコードを書いてきた。
--
if (pCombo->getCurSel()) {
pCombo->setCurSel(pCombo->getCurSel() - 1);
pCombo->deleteString(pCombo->getCurSel() + 1);
} else {
pCombo->setCurSel(pCombo->getCurSel() + 1);
pCombo->deleteString(pCombo->getCurSel() - 1);
}
--
私みたいにXlibの時代から書いている人間にとって、値を取得してからセットして
もう一回取得するなんてどう見ても待たされそうな処理はなんとももにょってしまう。
それも然り乍ら、なんとも胡乱な振る舞いをさせようとすることよ。
彼奴の頭の中を覗いてみたくもあり、覗きたくなくもあり。

68 :デフォルトの名無しさん:2009/09/10(木) 00:05:55
63が、特になんの経験もない事はよく解ったwwwwwww

69 :デフォルトの名無しさん:2009/09/10(木) 00:20:59
>>62
まともな経験がある人ならば、どれが良くてどれが悪いとは安易には言えないはず。
どこで誰がどう削除するかはそのシステムに合わせてインターフェースを
きっちり決めとけば良い話。

A:「頼まれていた会議の書類を作成して、印刷しておきました。」
B:「ありがとう」

(B会議終了)

B:「書類返すよ」
A:(てめーで、捨てろや死ね)


70 :デフォルトの名無しさん:2009/09/10(木) 00:32:49
その例は、Bに「まともな経験」がないだけの話。

71 :デフォルトの名無しさん:2009/09/10(木) 00:35:43
62=70


72 :デフォルトの名無しさん:2009/09/10(木) 00:48:48
結局はモジュール間で決めとけば、どうでも良い
俺はくみこみ知らんが、ポインタ投げて終了の仕組みも作る時もある
こっちはもう使わないのに相手の顔色見ながら、返却待ちのタイミングを
伺うなんてアホらしい

以上、終了


73 :デフォルトの名無しさん:2009/09/10(木) 01:03:21
すみません、>>61です
色々とお騒がせして、申し訳ございません

私の考えは、>>72さんと同じ考えでした
それぞれが非同期で動いてる場合、同期をとる仕組みを入れるのが面倒ですし
もう必要ないから、B側で削除してもらっていました

もう少し詳しく言うとスレッドが10個ほどあり、使った奴が削除すると言った仕組みで
動いています
AはBに渡す
Bは使わないならCへ、CはDへと・・・
だからこそ、使った人に削除して貰いたかったのです

それとvectorの話が出ていましたが、vectorとかを使ってデータをコピーしても
構わないと言えば構わないのですが
データサイズが大きい時はそれなりのサイズになってしまうので
データをコピー(newして代入)なんて言う無駄な処理とメモリのフラグメンテーションを
起こすような処理はさせたくなかったのでポインタでやってました


74 :デフォルトの名無しさん:2009/09/10(木) 06:35:29
>>72
>こっちはもう使わないのに
かどうかはわからないよね?
もし、使いたくなっとしても使わないんじゃなくて使えない状態じゃん
しかも、それがわかるのは組んだ自分だけだろ?
下手糞実装ってことは認識して使えよ

75 :デフォルトの名無しさん:2009/09/10(木) 08:56:32
MFCだったらdelete this が常識

76 :デフォルトの名無しさん:2009/09/10(木) 18:36:15
>>53
呼び出し履歴のことでよかったんですか教えてくださってありがとうございます.

ntdll.dll!7c94e514()
[下のフレームは間違っているか、または見つかりません。ntdll.dll に対して読み込まれたシンボルはありません。]
ntdll.dll!7c94df5a()
kernel32.dll!7c8025cb()
kernel32.dll!7c802532()
ole32.dll!769f5532()
ole32.dll!769e3551()
ole32.dll!769e34c1()
ole32.dll!769d4ecc()
msvcr80.dll!78132bd9()
ole32.dll!76984212()
> highgui110.dll!_CRT_INIT(void * hDllHandle=0x10000000, unsigned long dwReason=4038497417, void * lpreserved=0x00000001) 行 412 + 0x9 バイト C
highgui110.dll!__DllMainCRTStartup(void * hDllHandle=0x10000000, unsigned long dwReason=0, void * lpreserved=0x00000000) 行 512 + 0x8 バイト C
highgui110.dll!_DllMainCRTStartup(void * hDllHandle=0x10000000, unsigned long dwReason=0, void * lpreserved=0x00000001) 行 462 + 0x11 バイト C

上から数行だとこんな感じで highfui110〜の3行が黒文字,他灰色文字になってました.
.dllばっかりならんでてよくわからないですが

77 :デフォルトの名無しさん:2009/09/10(木) 19:06:41
>>76
だからなんだよ。
いい加減、ウザイから氏ね

78 :デフォルトの名無しさん:2009/09/10(木) 22:38:32
>>72
音声のRTPパケットだから二度と使わないし、使いたくなる事は100%ありえない
使いたい頃に使ったら、プロトコルに違反するし、音声がめちゃくちゃになる

二度と使えないのは、仕様書にしてあるから、チーム全員知ってる
なんで、そんなに自分の考えが完璧だなんて、ゴリ押しするんだ
お前はどんだけ偉いんだ
どうせ、お前みたいな奴なんて、そこらへんの派遣野郎だろ

79 :デフォルトの名無しさん:2009/09/11(金) 11:00:37
Producer - Consumer Pattern だと、 Producer で new, Consumer で delete するのが素直。

80 :デフォルトの名無しさん:2009/09/13(日) 15:47:55
>>74て、アホだね
生きてて恥ずかしくないの??
早く死ねば良いのに
一番自分が下手くそなのにWWWWWWWWWWWWWWWWWWW

81 :デフォルトの名無しさん:2009/09/13(日) 16:26:24
>>80
(訳:論破されちゃった!くやしい!ビクッビクッ!)


82 :デフォルトの名無しさん:2009/09/15(火) 12:13:25
CScrollViewのOnInitialUpdate()でCToolTipCtrlクラスをm_cToolTipCtrl.Create( this );
ってやると落ちる。。。
これってダメ?

83 :デフォルトの名無しさん:2009/09/15(火) 12:18:51
>>82
OnInitialUpdateが呼ばれるのは一度だけじゃない。
よって、何度も作ろうとするからエラーになる。

84 :デフォルトの名無しさん:2009/09/15(火) 12:26:37
>>83
ありがとう。
なるほどねー…。
久々にMFCやったから気づかなかった。。。

とりあえず
if( !cToolTipCtrl )
{
m_cToolTipCtrl.Create( this );
}
ってしたらいけた!

85 :デフォルトの名無しさん:2009/09/16(水) 17:04:34
Visual Studio 2005 Pro/Visual C++/MFCで開発をしています。

IPアドレスコントロール(CIPAddressCtrl)の背景色を変更したいのですが、
CIPAddressCtrlのサブクラスとしてCMyIPAddrCtrlを作成し、
以下のようにコンストラクタとOnCtlColorをオーバーライドしても、
背景の一部の色しか変更できません(リンク先の画像を参照ください)。

CMyIPAddrCtrl::CMyIPAddrCtrl()
{
m_Brush.CreateSolidBrush(RGB(255, 0, 0)); // m_Brushはヘッダーで「CBrush m_Brush;」と宣言済み
}

BEGIN_MESSAGE_MAP(CMyIPAddrCtrl, CIPAddressCtrl)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()

HBRUSH CMyIPAddrCtrl::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CIPAddressCtrl::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetBkColor(RGB(0, 255, 0));
pDC->SetTextColor(RGB(0, 0, 255)); // 試しにテキスト色も変更しています
return m_Brush;
}

結果:ttp://nukkorosu.80code.com/img/nukkorosu11151.png

上記画像で白色になっている部分の色を変更するにはどうしたらよいでしょうか?

86 :デフォルトの名無しさん:2009/09/16(水) 21:16:40
一寸試してみたけど、結局OnPaintをオーバーライドするしかないっぽい。
まあ、普通のテキストボックスに変えてしまうのが一番だろうね。

87 :デフォルトの名無しさん:2009/09/16(水) 21:26:08
>>85
IP アドレスコントロール は複数のウィンドウからできているので、そのコードでは
子ウィンドウであるエディットコントロールの部分しか変更できない。

白い部分の色を変えるには OnPaint() をオーバーライドして自前で背景を塗りつぶすしかないが、
このときは数値の間にあるドットも自前で描画する必要がある。

>m_Brush.CreateSolidBrush(RGB(255, 0, 0)); // m_Brushはヘッダーで「CBrush m_Brush;」と宣言済み
>pDC->SetBkColor(RGB(0, 255, 0));

・・・背景色と背景ブラシの色が違うなんて。

88 :87:2009/09/16(水) 21:29:43
>>86
すまん、かぶったね。

>普通のテキストボックスに変えてしまうのが一番
そう、それが一番。

89 :デフォルトの名無しさん:2009/09/17(木) 00:48:35
他プロセスのリストコントロールに表示されている数値を監視するプログラムを作ってます。

ぐぐったらVirtualAllocExとLVM_GETITEMTEXTメッセージを組み合わせれば良いとわかったので、以下を繰り返して取得しています。

相手ウィンドウのHWNDからpidを求め、PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITEでOpenProcessする
 ↓
VirtualAllocExで、アドレス指定はNULL、MEM_COMMIT、PAGE_READWRITE、サイズは文字列バッファ(64バイト固定長)+sizeof(LVITEM)ぶんのメモリを確保

ローカル変数でLVITEM変数を宣言、ゼロクリアした後以下を代入
iItem,iSubItem←必要なマス目の座標(いつも同じ場所)
 pszText←上記確保したメモリ+sizeof(LVITEM)
 cchTextMax←64

そのLVITEM変数のポインタから確保した先頭アドレスにWriteProcessMemoryする
 ↓
LVM_GETITEMTEXTをSendMessageする
 ↓
確保したメモリの先頭+sizeof(LVITEM)を64バイトReadProcessMemoryして文字列ゲット
 ↓
確保した先頭アドレスを指定、MEM_RELEASEにてVirtualFreeExする
 ↓
プロセスハンドルをCloseHandleする

実際、おおむねこれで取得できているのですが、数十回ほど取得を繰り返すと相手側が「Visual C++ RunTime Error! Abnormal Program Termination」と表示して落ちてしまいます。取得するたびSleep(100)などしてみましたが駄目でした。どなたか解決策をご存知ないでしょうか?

90 :デフォルトの名無しさん:2009/09/17(木) 01:17:53
>>89
自分の書いた処理内容をよく見て、デバッガで追え。
悪いのはおまえだ。

91 :85:2009/09/17(木) 10:29:06
>>86>>87
ご回答ありがとうございます。
挙動から入力部分のウィンドウの下にもう一個ウィンドウがあるように
見えたのですが、やっぱりそうだったのですね…。

OnPaintのオーバーライドまでするとなるとちょっと手間なので、
おっしゃるとおりテキストボックスで実装してみたいと思います。

> ・・・背景色と背景ブラシの色が違うなんて。
このほうが何を書いたらどこが変わるかわかりやすいかなぁと思ったので(^^;
実際には同じ色で塗りつぶします。

92 :85:2009/09/17(木) 20:25:10
85です。ちょっと気になったのでOnPaint()のオーバーライドに挑戦してみました。
あまり考えずに>>85に下記のコードを追加したら、それっぽいのができました。

BEGIN_MESSAGE_MAP(CMyIPAddrCtrl, CIPAddressCtrl)
ON_WM_CTLCOLOR()
ON_WM_PAINT()
END_MESSAGE_MAP()

void CMyIPAddrCtrl::OnPaint()
{
CPaintDC dc(this);

CRect rect;
GetClientRect(&rect);
dc.FillSolidRect(rect, RGB(255, 255, 0));

int w = rect.Width() / 4;
for (int i = 1; i < 4; i++) {
dc.SetPixel(w * i + 1, 11, RGB(0, 0, 0));
dc.SetPixel(w * i + 1, 12, RGB(0, 0, 0));
}
}

これでなんとか目的の動作を組み込めそうです。本当にありがとうございました!

93 :デフォルトの名無しさん:2009/09/17(木) 21:03:24
そしてディフォルトじゃない色の設定にしている環境で阿呆を見ると。
あーフォントサイズもやばいかなw

94 :デフォルトの名無しさん:2009/09/18(金) 01:16:05
> int w = rect.Width() / 4;
もうちょっと真面目に計算すべしw

>dc.SetPixel(w * i + 1, 11, RGB(0, 0, 0));
>dc.SetPixel(w * i + 1, 12, RGB(0, 0, 0));

RGB( 0,0,0) → ::GetSysColor( COLOR_WINDOWTEXT)

95 :デフォルトの名無しさん:2009/09/25(金) 16:11:36
AfxSetAllocStop の使い方を超知りたいのに、MSDNに載ってないってどういうことよ^^;;;

96 :デフォルトの名無しさん:2009/09/25(金) 16:26:21
>>95
_CrtSetBreakAlloc() を呼んでいるだけだから、使い方はそっちを参照すればよろし。

97 :デフォルトの名無しさん:2009/09/25(金) 16:39:54
>>96
おぉ、すばらしい!載ってました!
サンクスです。^^

98 :デフォルトの名無しさん:2009/09/28(月) 12:34:57
SetTimer()でセットしたタイマを
残り時間を保持したまま一時停止や再開する方法はありますでしょうか。

別のダイアログをDoModal()で出して待っている最中も
WM_TIMERが発生するようなので、その間はタイマを止めておきたいのですが、
いったんKillTimer()で止めてしまうと待ち時間が戻ってしまい、
タイミングによっては延々と発生しない状態になってしまいます。

99 :デフォルトの名無しさん:2009/09/28(月) 13:02:50
>>98
もっとも簡単な方法は、DoModal() する前にある種のフラグをたててタイマー処理を回避し、
制御が戻ってくればタイマー処理を復帰させればいい。

CMyDialog dlg;
m_bDisableTimer = TRUE;
dlg.DoModal();
m_bDisableTimer = FALSE;


CxxWnd::OnTimer( ...)
{
   if ( m_bDisableTimer) return;

   // ToDo...
}


100 :98:2009/09/28(月) 15:15:03
>>99
ありがとうございます。
やっぱりそういう方法になるのですね。

この場合もダイアログ表示のタイミングによっては
ToDoのところまで行かない状態が続いてしまいますが、
タイマでやっている以上は避けられないのかな。

101 :デフォルトの名無しさん:2009/09/28(月) 16:22:33
>この場合もダイアログ表示のタイミングによっては
>ToDoのところまで行かない

ダイアログが表示された時点( WM_INITDIALOG を処理する時点)で、
m_bDisableTimer = TRUE; にする。

102 :デフォルトの名無しさん:2009/09/28(月) 21:21:33
久々に見たが、>>74のアホ具合が際立っててワロタ
>>74は、ハヨー死ね、

103 :デフォルトの名無しさん:2009/09/29(火) 00:43:13
>>100
タイマー+カウンターでやる、という手もある。
例えば5000msなら500ms×10カウントとか。
で、OnTimerはこんな感じで。

if ( (counter += (counter < 10)) < 10 ) return;
if ( m_bDisableTimer ) return;
// なんか色々処理
counter = 0;

WM_TIMER直後かつ500ms以内にダイアログを開きなおす、
とかやらなければ実行されるはず。

104 :98:2009/09/29(火) 09:28:18
>>101
>>103

ありがとうございます。
自腹でカウンタ処理をやれば、一時停止に近いことはできますね。

タイマ自体を一時停止する方法は無さそうですし、
タイマ+モーダルダイアログって、
やってることはモードレスダイアログっぽくなってしまうんですね。

うかつにメッセージボックスも出せないってことだったのか。

105 :デフォルトの名無しさん:2009/09/29(火) 09:36:41
残り時間を保持とか言ってるから根本的に勘違いしてる。

106 :デフォルトの名無しさん:2009/09/29(火) 14:12:42
>>104

↓ 知ってる?

The WM_TIMER message is a low-priority message.
The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue.

107 :デフォルトの名無しさん:2009/10/05(月) 20:56:34
皆様に質問です。

Visual Studio 2008 MFC FeaturePackを調査していますが、
追いきれない箇所があったので投稿します。

MFCのSDIで作成したフレームワークで
CFrameWndのメンバにm_wndMenuBar(CMFCMenuBar型)ってのがあります。

これから、m_wndMenuBar.GetHMenu()でメニューハンドルを取得し
DeleteMenu、EnableMenuItem、ModifyMenuなど
今までどおりCMenuと同等な操作をしても、
表示されているメニューバーに変化が無いのです。

何かやり忘れの処理とかあるんでしょうか?
それとも、そういうものなんでしょうか?

※たとえば、DeleteMenuの実行結果はTRUEを返し、
メニューバー[表示(V)]→[ツールバーとドッキング ウィンドウ(T)]→[カスタマイズ...]の
カスタマイズダイアログのコマンドからは消えていますが、
メニューバーの一覧からは消えないのです・・・

何か、コツがあるんでしょうか?
知っている方、情報を願います・・・

108 :デフォルトの名無しさん:2009/10/05(月) 21:40:23
>>107
CMenuをいじった後で、CMFCMenuBar::CreateFromMenuで戻してやると反映するけど。

109 :107:2009/10/05(月) 23:53:12
たとえば、CMainFrame::OnCreateの最後に
{


HMENU hMenu = m_wndMenuBar.GetHMenu();
if (hMenu){
BOOL bRet = ::DeleteMenu(hMenu, ID_EDIT_CUT, MF_BYCOMMAND);
m_wndMenuBar.CreateFromMenu(hMenu);
}

と入れてみたけど変化なし。
OnCreate時じゃダメなんですかね?

110 :デフォルトの名無しさん:2009/10/06(火) 00:08:43
>>109
ほんと馬鹿は始末に負えないな。
ここまで教えてもらって、なんで自力で解決しようとしないのか。
できない馬鹿だからこそ質問を繰り返すんだろうが、そんな自分は屑だと自覚しろ。

111 :デフォルトの名無しさん:2009/10/06(火) 00:25:45
>>109

>BOOL bRet = ::DeleteMenu(hMenu, ID_EDIT_CUT, MF_BYCOMMAND);

言っておくが、ポップアップメニューの項目を削除したいなら CMFCMenuBar をいじってもダメ。
CMFCPopupMenu::RemoveItem() を使う。

112 :デフォルトの名無しさん:2009/10/06(火) 00:35:19
でもわからんでもないな
ホントMFCって意味不明なとこあるものな
正直、はじめはなんかのサンプルをコピペして作っていくしかないと思うな
んでメッセージの流れとか覚えたらそういうのやっとチョボチョボ手が出せるようになる

1度動くもんとコードを誰かに一致させてもらわない限り
人に聞くしかねぇだろうな
俺もサンプル漁るたびにそう思うわ
自分でヘルプ読みながら研究すると大抵糞くだらないことでも1日作業

このフレームワークだりぃよw
最近、VBでは楽にできるらしいエクセルなんかの機能を組み込め的要求がウゼェ

113 :デフォルトの名無しさん:2009/10/06(火) 02:06:36
>>112
ドキュメントも読めない、サンプルソースもおえないアフォは氏ねば?
ヘルプ読みで1日とか、調べ方もしらないんじゃその方がいいだろ。

114 :デフォルトの名無しさん:2009/10/06(火) 08:00:34
過去そうやって偉そうなこと言ってて
いざやらせてみると時間かかる人ばっかりだったからお前も似たようなもんだと思う(笑)
微妙なところで時間くうだろ?

115 :107:2009/10/08(木) 08:20:16
CWinAppEx::CleanState()を実行したら反映されました。
どうも、メニューカスタマイズ情報とか保持してるようですね・・・

みなさまありがとうございます

116 :デフォルトの名無しさん:2009/10/13(火) 22:10:53
>>112
オートメーション?
であれば、MFC関連ドキュメント探すよりVBAのヘルプ見た方が速いよ

117 :デフォルトの名無しさん:2009/10/14(水) 23:29:27
日本語版MSDN読んでる限りはMFCは躓きの連続だろうね。
英語版と比べると情報省きすぎ。^^;;;;;;;;;;;;;;;;;;;;;オコルゾ

118 :デフォルトの名無しさん:2009/10/15(木) 02:10:21
>>117
英語版読みなさい^^;;;;;;;;;;;;;

119 :デフォルトの名無しさん:2009/10/15(木) 11:30:20
たいていのことはソース読めばわかる

120 :デフォルトの名無しさん:2009/10/15(木) 21:02:37
ドキュメント・ビュー・アーキテクチャを使っている場合で、読み書きする
ファイルの拡張子を設定するには、どのような方法があるでしょうか?


121 :デフォルトの名無しさん:2009/10/15(木) 21:13:36
CDocument は、ドキュメントの新規作成、読み込み、保存のような標準の操作をサポートします。
フレームワークは、CDocument で定義されたインターフェイスを使って、ドキュメントを操作します。

122 :デフォルトの名無しさん:2009/10/15(木) 21:47:49
>>120

CWinApp::OnFileOpen() と CDocument::OnFileSaveAs() を
好きなようにオーバーライドすりゃいい。

123 :デフォルトの名無しさん:2009/10/15(木) 23:11:51
>>120
ワークスペース新規作成時のメニューをよく観察する事

>>122
CDocument::OnFileOpen()と CDocument::OnFileSaveAs()じゃね?


124 :122:2009/10/16(金) 00:11:13
>>123
>CDocument::OnFileOpen()

残念だが、こういうメソッドはない。
CDocManager::OnFileOpen() と書きたかったのかもしれないが、
これとて、ファイルオープンダイアログを表示して得られたファイル名を CWinApp::OpenDocumentFile() に
渡しているだけなので、CWinApp::OnFileOpen() 内でこの操作をすれば、回り道する必要は何もない。

125 :デフォルトの名無しさん:2009/10/16(金) 00:14:34
いつもダイアログベースでドキュメントクラスなんて使ったことねーけど
なんかいいことあるの?

126 :デフォルトの名無しさん:2009/10/16(金) 01:31:36
void PleaseReadExplanation()
{
  『ドキュメント/ビュー アーキテクチャが適さない場合もあります。たとえば、次のような場合です。
  ・C で記述された Windows 対応のアプリケーションを移植していて、アプリケーションにドキュメント/ビューのサポートを
   追加することよりも、移植作業自体を完了することの方が先である場合。
  ・簡単なユーティリティを作成していて、ドキュメント/ビュー アーキテクチャは不要と判断できる場合。
  ・元のコードで既にデータ管理とデータ表示が混在している場合。』
}

MFCのドキュメント・ビュー・アーキテクチャがいい悪いは別にして、
MVC的な手法のほうがコードがごちゃごちゃしなくていい場合も多々。

127 :デフォルトの名無しさん:2009/10/16(金) 06:21:17
CDocTemplate
アプリケーションはサポートするドキュメントの型それぞれに 1 つのドキュメント テンプレートを持ちます。
たとえば、アプリケーションがスプレッドシート (表計算) とテキストのドキュメントをサポートしていれば、
アプリケーションは、2 つのドキュメント テンプレート オブジェクトを持ちます。
それぞれのドキュメント テンプレートは、対応する型のすべてのドキュメントの作成、管理を行います。

ドキュメント テンプレートは、ドキュメントの型とともに使われるリソース
(メニュー、アイコン、アクセラレータ テーブルなど) の ID を保持します。
ドキュメント テンプレートは、またドキュメントの型についての付加情報を持つ文字列も持っています。
これらは、ドキュメントの型の名前 (例 : "Worksheet")、ファイルの拡張子 (例 : ".xls")、そしてオプションで、
ファイル マネージャや OLE などのユーザー インターフェイスで使われる文字列などを含みます。

128 :デフォルトの名無しさん:2009/10/16(金) 06:27:19
そんなアプリねーよーなぁ?w
VCだって設計微妙だしなw
ええーwそこでこの構造使うの〜?w的なw

129 :デフォルトの名無しさん:2009/10/16(金) 14:08:29
CMap<CString, LPCTSTR, CString, LPCTSTR> と CMapStringToString って、
やってることは結局まったく同じですか?
それとも、効率や安全などの面でこっちを使うべきとかありますか?

130 :デフォルトの名無しさん:2009/10/18(日) 17:49:00
MFCは慣れればすんごい便利なんだよな。ウチみたいに組み込み系で
UI付きツール作ってくれってときにね。いろんなC++のSDK使うから
C#とかも使えない。

それよりも困ってるのがリソースかな。特にアイコン。
もっとカッコいいのとか、統一されたデザインとか要求されて困る。
ここはアニメーションさせてくれとか言われると泣きたくなる。

みんなはどうしてる?有料でもいいんでビジネス用途で使える
アイコン集ってものはないかな?ぐぐればいろいろ出てくるけど
どうにも種類が足りなくて。

131 :デフォルトの名無しさん:2009/10/18(日) 18:28:44
>>130

種類は豊富なんだが、商用利用となると・・・。
http://www.iconspedia.com/


132 :デフォルトの名無しさん:2009/10/18(日) 19:40:45
具満タンとかイラ満タンとかなら商利用可能じゃよ。

133 :デフォルトの名無しさん:2009/10/19(月) 01:23:09
>>131
ここは知らなかったな〜。ありがと。

>>132
パッケージは販売終了してるね。絵 単品高すぎる。

ttp://jp.infragistics.com/netadvantage/icons.aspx#Overview

ここのがなんかパッケージでなんかよさげなんだけど、サンプル見ると
同じアイコンにショートカット矢印みたいのが付いたのも含めて数に
カウントしてるみたいなんで、11000種類って書いてあっても実際には
1/10くらいなんだけろうなって感じがする。

134 :デフォルトの名無しさん:2009/10/20(火) 19:53:46
>>125
使い捨てツールを作る場合に便利だな。あんまし余計な事を考えなくて済む。
本体となるとさすがに自作ライブラリを優先するけど。

135 :デフォルトの名無しさん:2009/10/20(火) 22:10:55
2010でスタンダードエディションなくなるってさー。
今までupg15kで便利なMFCが使えてたけど
これからはupg55k必要。ますます絶滅方向だ。

136 :デフォルトの名無しさん:2009/10/23(金) 14:38:26
CClientDC dc(this)でクラスを作り、
デストラクタでリリースされるにもかかわらず、
this->ReleaseDC(&dc);としたらどうなりますか?

逆にリークの原因になったりしますか?

137 :デフォルトの名無しさん:2009/10/23(金) 15:23:09
試せばわかるので質問するよーなことではないと思うが、いちおう応えておく。

答はNO。
デストラクタでの ::ReleaseDC() が失敗するだけ。

138 :デフォルトの名無しさん:2009/10/26(月) 01:39:34
CDialogを親クラスに持つクラスで、OnPaint()以外の場所でdcを取得したいときはどうすればいいんでしょうか?

139 :デフォルトの名無しさん:2009/10/26(月) 02:07:56
GetDC()、ReleaseDC()。
CWnd::GetDC, CWnd::ReleaseDC

140 :デフォルトの名無しさん:2009/10/26(月) 02:23:37
CDC *pDC=CWnd::GetDC();
CWnd::ReleaseDC(pDC);
とするとコンパイルできるのですが、実行するとエラーが出てしまい困ってるんです。

141 :デフォルトの名無しさん:2009/10/26(月) 02:35:00
そのエラーの原因は別のところにある

142 :デフォルトの名無しさん:2009/10/26(月) 10:09:16
CWnd::GetDC()という書き方は・・・
スタティックな関数じゃないんだし、CDialogはCWndの派生クラスだし
そのままGetDC()と書けるだろう

143 :デフォルトの名無しさん:2009/10/26(月) 20:36:50
むすどん読んだ限りではGetDCはvirtualじゃないから
理屈としてはCWnd::GetDC()でも通るんじゃないか?
実験してないけど。w



144 :デフォルトの名無しさん:2009/10/26(月) 21:04:24
>通るんじゃないか?

通るよ。だから、あえてそこは指摘せずに「原因は別にある」と書いた。

145 :デフォルトの名無しさん:2009/10/27(火) 21:40:39
WS_EX_APPWINDOWの属性を持つウィンドウで、
最小化したときに右下では無く、左下にアニメーションさせることって可能?

なんかコツあるんですかね?

146 :デフォルトの名無しさん:2009/10/27(火) 21:58:52
それやってるのMFCなのか?

147 :145:2009/10/27(火) 22:02:06
ごめん逆
左下を右下への間違い

148 :145:2009/10/27(火) 22:11:10
>>146
MFCでいじっています。
MFCのCMainFrame::OnSize(UINT nType, int cx, int cy)にて、
苦戦中。


149 :デフォルトの名無しさん:2009/10/28(水) 08:38:29
SetWindowPlacementでできる

150 :デフォルトの名無しさん:2009/10/28(水) 09:53:22
タスクバーを右にしてるオレの環境だと左下にいかないけど

151 :デフォルトの名無しさん:2009/10/28(水) 09:54:33
そもそもタスクバーにある最小化したアプリの場所にアニメーションするな、Vistaだけど

152 :デフォルトの名無しさん:2009/10/28(水) 11:17:28
CMainFrameの拡張ウィンドウスタイルで
WS_EX_APPWINDOWを外し、WS_EX_TOOLWINDOWを加える

んで、最小化する手前で

// タスクバーのハンドル
HWND hTaskbar = ::FindWindow(_T("Shell_TrayWnd"), NULL);
// タスクトレイのハンドル
HWND hTasktray = ::FindWindowEx(hTaskbar, NULL, _T("TrayNotifyWnd"), NULL);

hTasktrayにGetWindowRect使えば位置がわかる。
※隠れていてもその位置が求まる。

あとはGetWindowPlacementで現在値を取得し、
WINDOWPLACEMENTのptMinPositionを差し替え、
flagsにWPF_SETMINPOSITIONをセット。
SetWindowPlacementで更新って感じ



153 :デフォルトの名無しさん:2009/11/04(水) 23:22:17
質問です、文字列を扱う場合MFC使いの皆さんは、 またはchar* なのでしょうか?
std::string は使わない派ですか?

154 :デフォルトの名無しさん:2009/11/04(水) 23:25:13
訂正です
質問です、文字列を扱う場合MFC使いの皆さんは、CString またはchar* なのでしょうか?
std::string は使わない派ですか?


155 :デフォルトの名無しさん:2009/11/05(木) 10:02:51
CString使う前提で設計されてる

156 :デフォルトの名無しさん:2009/11/05(木) 10:15:00
MFCを使う関数では大抵CStringで済ませるが、文字列処理をする関数ではstd::stringを使う。

157 :デフォルトの名無しさん:2009/11/05(木) 10:42:57
おいらはCStringでstlは使わないに統一 サイズ可変配列もCArray<>とかCTypedPtrArray<>とかで
まぁ個人で作ってるものだからだけど

158 :デフォルトの名無しさん:2009/11/06(金) 19:01:20
>>154です
レスサンクスです
stl を多用したtemplate 非MFCのライブラリがあるのですが
そのライブラリへCString を渡す場合、何か注意すべきところがあれば教えて頂けないでしょうか?

159 :デフォルトの名無しさん:2009/11/06(金) 20:01:16
渡さないほうが良い
stringへのらっぱー書く方が良い

160 :デフォルトの名無しさん:2009/11/06(金) 20:09:24
>>158
そのライブラリがconst char * を受け取るならそのまま渡していいと思う。
そのライブラリがstd::stringを受け取るなら、std::stringのラッバを用意した方がいい。

161 :デフォルトの名無しさん:2009/11/06(金) 21:07:22
>>154 です
ありがとう。

162 :デフォルトの名無しさん:2009/11/07(土) 08:11:44
>>154です。おはようございます、
ラッパークラスを意識して書いたことが無いので、勘違いをしている可能性があるので
駄目出し、及びご指導お願いします。
/**
* @brief  std::stringからCString(MFC)へ変換
* @date  2009/11/7
* @param[in] std::string str
* @return  str.c_str()
*/
class ConvertToCString {
public:
 ConvertToCString() : str_("") {}
 const CString operator()(std::string str) const {return str.c_str();}
private:
 std::string str_;
};
/**
* @brief  CString(MFC)からstd::stringへ変換
* @date  2009/11/7
* @param[in] CString cstr
* @return  static_cast<LPCTSTR>(cstr)
*/
class ConvertTostring {
 ConvertTostring() : cstr_("") {}
 const std::string operator()(CString cstr) const {return static_cast<LPCTSTR>(cstr);}
private:
 CString cstr_;
};

163 :デフォルトの名無しさん:2009/11/07(土) 10:43:16
おかしいな?
std::string str = "CString_convert";
CString cstr = ConvertToCString(str);

cstr = "std;;string_convert";
str = ConvertTostring(cstr);
こうすると
error C2440: '初期化中' : 'ConvertToCString' から 'ATL::CStringT<BaseType,StringTraits>' に変換できません。
何処が悪いのでしょうか?
CString cs("Hello");
std::string s((LPCTSTR)cs);

std::string ss("Hello");
CString ccs(ss.c_str());
これは動くので、簡単にできると思ったんですが・・・・

164 :デフォルトの名無しさん:2009/11/07(土) 15:08:39
>>163
一応、↓で出来るとは思うが、どうせ c_str() の呼び出しか LPCTSTR へのキャストで済むんだから、
わざわざクラスまで作る必要はないと思う。
コードを見た感じだと、Unicode文字セットを使っている訳ではないようだし。

class ConvertToCString {
public:
 ConvertToCString(std::string str) : str_(str) {}
 operator CString() const {return str_.c_str();}
private:
 std::string str_;
};

class ConvertTostring {
public:
 ConvertTostring(CString cstr) : cstr_(cstr) {}
 operator std::string() const {return static_cast<LPCTSTR>(cstr_);}
private:
 CString cstr_;
};

165 :デフォルトの名無しさん:2009/11/07(土) 18:33:27
>>164
ありがとう、やっぱり勘違いしていました^^;
>わざわざクラスまで作る必要はないと思う。
そうですね、自分もそう思います、ただ一点お聞きしたいのですが
ラッパークラスのイメージといいますか、認識はこのような感じでいいのでしょうか?

166 :デフォルトの名無しさん:2009/11/07(土) 23:34:49
お前は物事の一部だけを見て
すべてを分かったつもりになる香具師なのか?

167 :デフォルトの名無しさん:2009/11/07(土) 23:48:47
一を聞いて十を知る、それがわたしです。

168 :デフォルトの名無しさん:2009/11/07(土) 23:59:58
一を聞いて十を知ったつもりになる、の間違いでは?

169 :デフォルトの名無しさん:2009/11/08(日) 00:02:11
おまえは俺の何を知っているのだ。

170 :デフォルトの名無しさん:2009/11/08(日) 23:19:35
CWinAppExでレジストリを使わないようにする方法ある?

171 :デフォルトの名無しさん:2009/11/09(月) 10:14:27
自動生成されるコードの該当部分を消せばいい

172 :デフォルトの名無しさん:2009/11/09(月) 16:13:44
InitInstanceのあの1行さえ消せばIniファイルが使われるようになる

173 :デフォルトの名無しさん:2009/11/09(月) 18:08:05
余談でCWinAppExで追加されたCleanStateメソッドってのがある。
MFC Feature Packの影響で、レジストリ情報との差異による問題とかでてきたら、
コマンドラインとかで呼び出せる様にした方がいいかもね。

(それこそ、InitInstanceのあの1行の次の行あたりで)

174 :デフォルトの名無しさん:2009/11/09(月) 23:46:57
オーナードローでXPやvistaのような外観のボタンにするにはどうしたらいいでしょうか?

175 :デフォルトの名無しさん:2009/11/10(火) 00:24:48
 


176 :デフォルトの名無しさん:2009/11/10(火) 00:27:01
>>174
::OpenThemeData() でテーマハンドルを取得したのち、::DrawThemeBackground() でパーツを描画する。

177 :デフォルトの名無しさん:2009/11/10(火) 15:19:08
VC2005でMFCで画面つくってますが
ボタンを押したときにOnButtonで呼ばれる処理を
ボタン押し続けで連続処理させるいい方法ありませんか?

178 :デフォルトの名無しさん:2009/11/10(火) 15:34:31
ボタン関係のメッセージで可能

179 :デフォルトの名無しさん:2009/11/10(火) 15:55:05
>>178
具体的にどんか感じですか?
ボタン押し続けだと1回しかメッセージきませんよね??
連続にできるってことですか?

180 :デフォルトの名無しさん:2009/11/10(火) 15:58:53
タイマー起動して押してある間、適当なメッセージ送りつづけるとか。

181 :デフォルトの名無しさん:2009/11/10(火) 16:09:22
>ボタン押し続けで連続処理させるいい方法

(1) ボタン押す→WM_LBUTTONDOWNがボタンに飛んでくる。
(2) ボタン放す→WM_LBUTTONUPがボタンに飛んでくる。

→(1) のタイミングでタイマなりを動かして、一定間隔で親にWM_COMMANDを送る。
→(2) のタイミングでタイマを切る。

ボタンを押さえたままウィンドウが非アクティブになるとWM_LBUTTONUPは飛んでこないから
それなりに工夫は必要。




182 :デフォルトの名無しさん:2009/11/10(火) 16:21:20
タイマー等で自分で実装するしかないんですね
もう少しスマートな方法があるといいんですが…

183 :デフォルトの名無しさん:2009/11/10(火) 16:23:31
>>177
ttp://www.codeproject.com/KB/buttons/autorepeat.aspx
評価は微妙だし、非アクティブ対応も甘そうだし、キーボードにも対応していなさそうだけど、
>>181の実装例。

184 :デフォルトの名無しさん:2009/11/10(火) 16:32:43
>>183
見たところ、確かに非アクティブ対応は甘いね。
OnLButtonUp() では、ReleaseCapture() だけ実行すればいい。

その他の処理は WM_CAPTURECHANGED を捕まえて、そこで実行する。

185 :デフォルトの名無しさん:2009/11/10(火) 16:34:46
PeekMessageを使ってWM_LBUTTONDOWNのみNOREMOVEなループの中で処理したらどうだ?
割り当て可能なすべてのアイドル時間がボタンダウンのために処理されるから
ものすごい勢いだぞ^^

186 :デフォルトの名無しさん:2009/11/10(火) 17:14:52
押した時と離した時しかメッセージ発生しないから
タイマー嫌なら離したメッセージが来るまで永遠にループさせるしかないな。


187 :デフォルトの名無しさん:2009/11/10(火) 17:22:44
キーみたいにリピート設定できた気がするんだが忘れ散った

188 :デフォルトの名無しさん:2009/11/10(火) 17:30:10
ゲームマウスでも買って好きなように設定して使え。

189 :デフォルトの名無しさん:2009/11/10(火) 17:47:58
キーボードもハードの方でタイマー使ってるようなもんだしな

190 :デフォルトの名無しさん:2009/11/10(火) 18:33:10
MFCがサポートしてない機能はスレ違い

191 :デフォルトの名無しさん:2009/11/10(火) 23:06:24
Win32APIスレで聞いた方が良いと思う

192 :デフォルトの名無しさん:2009/11/12(木) 16:03:27
CListなどのPOSITION値って、
その値を取ったあとに追加や削除などの操作を行っても
当初の場所を指す値としてずっと有効のままなのでしょうか?

それとも、CWnd::GetDlgItem()などのように
どこかのタイミングで無効になるのでしょうか?

193 :デフォルトの名無しさん:2009/11/12(木) 17:25:25
動かさなければ同じ場所に留まり続けると思うが。GetDlgItem()もまた然り。

194 :デフォルトの名無しさん:2009/11/13(金) 09:34:20
> 動かさなければ同じ場所に留まり続けると思うが。

これはMSDNのどこかに明示されていますでしょうか?

「ブックマークとして使うと、リスト内の位置を保持できます」
という説明はあるのですが、要素を追加したり、
他の要素を削除をしても対象要素のPOSITION値自体は変わらないものなのか、
そのへんの記述を見つけられません。

> GetDlgItem()もまた然り。

CWnd::GetDlgItem()の説明には
「返されるポインタは、一時的なポインタです。
後で使用するために保存しておくことはできません。」
と書いてあり、実際、アイドル時だかどこかで無効になります。
ダイアログクラス内にDDXメンバとして実体があれば常に有効かもしれませんが。


195 :デフォルトの名無しさん:2009/11/13(金) 10:28:18
>POSITION 型の変数はリストのキーとして使います。

だからキーが使えなくなったらキーの意味ないだろ
心配ならソースついてるんだからMFCソース読めよ

196 :デフォルトの名無しさん:2009/11/15(日) 23:32:01
ダイアログベースで、ファイルを指定したフォルダにコピーするソフト
を作っています。(ウォークマンにmp3をランダムに転送するため)

SHFileOperationAを使ってコピーを行っているのですが、
ダイアログにコピー処理を書いているので、コピー中にダイアログの操作ができません。
コピーの時間が30〜60分と長いので、もどかしいです。


コピー中もダイアログの操作ができるようにするにはどうすればいいでしょうか?
(コピー用のスレッドを作って、そこでコピー処理をすればいい?

197 :デフォルトの名無しさん:2009/11/16(月) 00:17:39
yes we can

198 :デフォルトの名無しさん:2009/11/16(月) 12:31:39
これで君もワーカースレッド使いにレベルアップだ

199 :デフォルトの名無しさん:2009/11/16(月) 13:46:35
お茶くみとコピーばかりはもう飽きた!

200 :デフォルトの名無しさん:2009/11/16(月) 13:54:24
ボタンにビットマップを設定し、
ビットマップの白色に部分は透過させて表示したいので
ネットで調べた結果以下のプログラムを描いてみましたが
透過になってくれません
何か間違っていますか?正しい方法を教えてください
環境はXPのVS2005(MFC)です

COLORMAP cm;
cm.from = RGB(255,255,255);
cm.to = GetSysColor(COLOR_3DFACE);
m_bmp.LoadMappedBitmap(IDB_BITMAP, 0, &cm, 1);
m_btn.SetBitmap(m_bmp);


201 :デフォルトの名無しさん:2009/11/16(月) 15:35:40
お頼み申しageます

202 :デフォルトの名無しさん:2009/11/16(月) 17:18:10
自己対応メモ
VS2008でメニューのフォントが変だったので悩んだ。

http://takabosoft.com/20090812235606.html
にて書いている人がいたが、この人の方法だとOnCreateの時点ではフォント情報が取得できず、メニューが化ける。
http://blog.csdn.net/codewarrior/archive/2008/09/11/2911209.aspx
にて書いている方法なら正しく表示された。

MFCがBCGControlBarを使うようになったから、その対応も使えるのだな。


203 :デフォルトの名無しさん:2009/11/16(月) 17:23:33
正しく表示されたコード
m_wndMenuBar.Createのあとで、

LOGFONT logfont = {0};
::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &logfont, 0);
CMFCMenuBar::SetMenuFont(&logfont);


204 :デフォルトの名無しさん:2009/11/16(月) 18:55:37
>201
たまたま見つけたコードを意味もわからずいじって見たけど動きません。
だったら関わるだけ時間の無駄。

205 :デフォルトの名無しさん:2009/11/16(月) 20:18:38
>>200
そのコードは、透過ではなく特定の色をボタン表面の色に変更して載せてるだけ。
透過させたかったらCButton::SetImageListを使え。
これならVista以降の徐々に色の変わるようなボタンでも正しく透過で描画される。

206 :デフォルトの名無しさん:2009/11/17(火) 14:20:07
>>202
>この人の方法だとOnCreateの時点ではフォント情報が取得できず、メニューが化ける。

WINVER >= 0x0600 に設定して、そのプログラムを Vista 以前の環境で実行すると
::SystemParametersInfo( SPI_GETNONCLIENTMETRICS,,,) が失敗するというのは知ってる?

207 :デフォルトの名無しさん:2009/11/17(火) 21:32:59
>>196
そのとおり、コピー用スレッドを作れば良い。

また、一個一個が小さいコピーをたくさんやっているなら、
コピーの合間にメッセージループをはさむ方法もある。

メッセージループの具体形はぐぐれば出てくる。

208 :デフォルトの名無しさん:2009/11/18(水) 17:37:27
スタティックコントロールでCenterImageしてるんですが
その場合は\rつけても改行されてくれません
改行可能なCenterImageって方法ありませんか?
余白を設定できたりも考えましたが見つかりません
オーナードロー以外でなにかいい案ありましたら
お願いします

209 :196:2009/11/18(水) 22:16:48
なんとか、スレッドで処理させることで、コピー中もダイアログを操作できるようにできました。
ありがとうございました。


>>198
裏で処理をさせるのをワーカースレッドっていうんですね。


>>207
コピーの時にOS標準のコピーダイアログを出したかったので
SHFileOperationAを使ってのコピーです。
コピーは全部SHFileOperationAに任せますので、メッセージループは使いませんでした。

210 :デフォルトの名無しさん:2009/11/19(木) 19:13:35
MFCでも.NETアプリ動くようにしてくれればいいのにね。

211 :デフォルトの名無しさん:2009/11/19(木) 19:14:42
C#の方が簡単。どの環境でも動く…

MFCで作るのがいやんなるよ…

212 :デフォルトの名無しさん:2009/11/25(水) 19:14:32
リソースとして埋め込んだリッチテキストファイルをRichEditCtrlに読み込ませようとして苦戦しております
外部ファイルの読み込みに関してはEDITSTREAMのコールバック関数を設定して出来ましたが、リソースからRTF形式で読み込むのは難しいのでしょうか?


213 :デフォルトの名無しさん:2009/11/25(水) 19:33:37
LockResourceしてデータを取り出せば良いんじゃね?

214 :デフォルトの名無しさん:2009/11/25(水) 19:45:46
>>212

HRSRC hResInfo = ::FindResource( AfxGetInstanceHandle(), MAKEINTRESOURCE( IDF_RICHTXT), RT_HTML);
HGLOBAL hResData = ::LoadResource( AfxGetInstanceHandle(), hResInfo);
DWORD dwData = ::SizeofResource( AfxGetInstanceHandle(), hResInfo);

LPVOID lpData = ::LockResource( hResData);
CString strBuf( reinterpret_cast<TCHAR*>( lpData), dwData/sizeof(TCHAR));

m_wndRichEdit.SetWindowText( strBuf);

215 :デフォルトの名無しさん:2009/11/25(水) 20:17:37
エクスプローラでファイルを詳細表示したときにファイル一覧の上に「名前」「サイズ」といった
区切りが表示され、その表示幅を自分で変更できたりしますが、この機能は標準で付いてる
ものなのでしょうか?
使ってるヴァージョンはVisual C++.net Version2003です

やりたい事はテキストファイルの一覧を表示して、その幅を自分で調整したいと考えています。
_____________________
| 名前  |  電話番号  | 住所        |
| 山田   03-xxxx     東京都xxxx

最初から表示されているダイヤログエディタのコントロールを見ても使える様な物が
見つからないので、後から追加できるものなのかそれとも自分で作らなければならない
物なのでしょうか?

216 :デフォルトの名無しさん:2009/11/25(水) 20:54:40
手元にVS2008しかないからそれで説明すると、
そのコントロールは「List Control」という表記なっている。
プロパティでViewを「レポート」に変更すると、そのようなヘッダの付いた表示形式になる。
VS2003でも大体同じような感じだったと思う。
試しに張ってみて、黄・赤・緑とかのアイコンが表示されるならそれでほぼ間違いない。
そういえば、このアイコンはVC4から殆ど変わらないよなあ。

217 :デフォルトの名無しさん:2009/11/25(水) 21:13:19
>>216
List Controlに欲しい機能が付いておりました。
ただ追加した時点では色のアイコンがあるだけで、それらしい機能は
持っていないと思ってしまっていました。
レポートに変更したら上の方に区切りの付いたバーが表示されました。

ありがとうございます。

218 :デフォルトの名無しさん:2009/11/26(木) 19:42:26
>>213
>>214
返答が遅くなりましたが無事読み込ませることが出来ました、ありがとうございます
てっきりリッチテキストそのままだと読み込めないものだと思っていたので意外でした

219 :デフォルトの名無しさん:2009/11/26(木) 21:09:36
>>62
A:「作ったよ」
B:「ありがとう。こっちで作ったのにコピーさせてもらうね」
A:「ん、じゃとりあえずBの仕事が終わるまで待ってるね」

B:「ありがとう。終わったよ〜」
A:「ん、じゃこっちの仕事も終了するねw」
B:「じゃあAの仕事が終わったらこっちで作ったものは削除するね〜」
A:「こっちはもちっと仕事があるから終わったら削除するよ〜」
B:「あれ、いつの間にやらCStringのヒープニオイタモノガコワレテr」

orz



220 :219:2009/11/26(木) 21:10:39
(windows ce用アプリ)

221 :デフォルトの名無しさん:2009/11/26(木) 21:14:43
A:「作ったよ」
B:「ありがとう。こっちで作ったのにコピーさせてもらうね」

A:「・・・ああん、バカ。コピーするならポインタじゃなくて実体をコピーしてよん」

222 :デフォルトの名無しさん:2009/11/29(日) 10:43:51
なにそれ、エロい

223 :デフォルトの名無しさん:2009/11/29(日) 16:28:22
えっ

224 :デフォルトの名無しさん:2009/11/29(日) 18:00:15
えっ

225 :デフォルトの名無しさん:2009/11/29(日) 18:25:59
                    , - , -─ - 、
                   /:::::::::::::::::::::::::::::::::`‐、
                 /::::::::::::::::::::::::::::::::::::::::::::::\
                /::::::::::;:ィ::::::::';:::::::::::`ヽ::::::::::::::ヽ
                ,'::::::;':::/ l:::i::::::ヽ:::\:::::::';:::::::::::::::',
                  i:::l::::i:/  ';:::';:::::::',\::ヽ:::::::::::☆:::
                l::l::;イ__, ヽ、ト、::::ヽ、\:',ヽ〃l::::::
                  ';l l::l      ` ‐-   l:::::l::::::  こ、ここ、これ読んで下さいっ!
                 l::::l == 、    ,.ィ== l:::::l:::::::::
                 l:::::li //////////// l:::::l::::::::::
               , -ーl::::lヽ、  r....::´`ヽ /l:::;'> 、:::::
           , -ー 、'´`ヽl::::l// ` ‐-r‐ァ' ´ ,':/ー、  ';
            /  , ノ `   l::::l   li /ニく /⌒ヽ  \.i
        , └ '´  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ / ノ__  ',  ,イ:
      /     \ (⌒⌒)       ,  └ '´ /   i/
    /            ヽ / ー '       /  /,.イ
   ∠ __                    /  / /
          ̄ ̄ ̄ ̄ ̄─── -------/-‐'´ /

226 :デフォルトの名無しさん:2009/11/29(日) 18:52:05
      ィ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙t,
     彡;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ
     イ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r''ソ~ヾ:;;;;;;゙i,
     t;;;;;;;リ~`゙ヾ、;;;;;;;;;;;;;;;;;;;;ノ    i,;;;;;;!      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ゙i,;;;;t    ヾ-‐''"~´_,,.ィ"゙  ヾ;;f^!   / お嬢ちゃん、ここはMFCの相談室だぜ。
     ト.;;;;;》  =ニー-彡ニ''"~´,,...,,.  レ')l. <   その手紙をMFCで書いて出直しな。
     t゙ヾ;l   __,, .. ,,_   ,.テ:ro=r''"゙ !.f'l.   \_______________
      ヽ.ヽ ー=rtσフ= ;  ('"^'=''′  リノ                          
    ,,.. -‐ゝ.>、 `゙゙゙゙´ ,'  ヽ   . : :! /
 ~´ : : : : : `ヽ:.    ,rf :. . :.: j 、 . : : ト、.、
 : : : : : : : : : : ヽ、  /. .゙ー:、_,.r'゙: :ヽ. : :/ ヽ\、
  :f: r: : : : : : : : !丶  r-、=一=''チ^  ,/   !:: : :`丶、_
  : /: : : : : : : : :! ヽ、  ゙ ''' ''¨´  /   ,i: : : l!: : : : :`ヽ、
 〃: :j: : : : : : : ゙i   `ヽ、..,,__,, :ィ"::   ,ノ:: : : : : : : : : : : :\
 ノ: : : : : : : : : : :丶   : : ::::::::: : : :   /: : : MFC : : : : : : : :\


227 : [―{}@{}@{}-] デフォルトの名無しさん:2009/12/01(火) 08:38:38
CPaneDialog派生させたオブジェクトをドッキングで使ってるんだが、
何故かボタンコントロールだけディスエーブルされるのは、仕様?バグ?
チェックボックスとかは全く問題ないんだが・・・・OnCreate()内でEnaqbleWindowやっても
効果無し。MFCのソース
バックグラウンドの更新も変だ・・・・ダイアログアイテムにちゃんとメッセージがポストされてない気がする。

2008で拡張されたMFCは便利だけど、どうも問題が多いし、肝心な情報が公開されてない
気がする。いい加減にM$は、開発環境ぐらいソースを全公開して欲しいよ。w

228 :デフォルトの名無しさん:2009/12/01(火) 09:02:48
>>227
ダイアログバーのときは、コマンドハンドラやON_UPDATE_COMMAND_UIが無いと
ボタンは無効になってたけど、それとは関係無いですか?

229 : [―{}@{}@{}-] デフォルトの名無しさん:2009/12/01(火) 09:30:00
>>228
それだ!!ありがとうございます。ボタンの件はそれでした。

230 :デフォルトの名無しさん:2009/12/02(水) 14:23:20
ダイアログバーはメッセージマップがMainFrame側に実装される謎仕様とかあったな

231 :デフォルトの名無しさん:2009/12/04(金) 16:51:04
リストコントロールについて質問です。
レポート形式で使用しています。(VC2005)

(1)
リスト行数100で1ページ表示5行で
現在10ページ目の1番目の項目が選択されています。
この状態で一度全ての項目を削除し再入力して
新たに10ページ目の1番目の項目を選択させたいので
SetItemStateなどで選びなおしました。
しかし、10ページ目の1番目が選択されているようですが
表示は1ページ目になっています。
これを10ページ目にしたくてSetScrollPosをしましたが
うまくいかず、表示が変になります
どうやったら10ページ目の表示にできるのでしょうか?

(2)
拡張スタイルにLVS_EX_GRIDLINESを使用していますが
スクロールしたときにグリッドラインの残像が残ってしまいます
この残像を綺麗にけすのはどうしたらいいのでしょうか?


232 :デフォルトの名無しさん:2009/12/04(金) 17:01:29
>どうやったら10ページ目の表示にできるのでしょうか
CListCtrl::EnsureVisible()

>この残像を綺麗にけすのはどうしたらいいのでしょうか
ウチでは残らないけど? 何か変わったコトしてない?

233 :デフォルトの名無しさん:2009/12/04(金) 19:56:54
俺も昔LVS_EX_GRIDLINESで残像が残った記憶があるな。
市販アプリでも普通に残像が残っていたので、環境依存なのかもなあ。
昔なった時は、IE3.x時代のだからMSもまともにサポートする気無いのか、
という程度に思っていたのだけど。.NETだと自前で正しく描画していたし。

234 :デフォルトの名無しさん:2009/12/07(月) 09:06:09
>>231
2はOSのバグの問題と同じかも。

http://support.microsoft.com/kb/813791
昔ブックマークしていた場所で、ページ自体は無くなってるけど、
このアドレスでググると同じ問題の書き込みがいくつか残ってた。

235 :231:2009/12/08(火) 13:26:25
返事がおくれてすみません

1は232で解決しました
2は画面のプロパティのデザインで治りました

236 :231:2009/12/08(火) 14:11:12
来客が来て途中送信してしまいました。
改めて、

返事がおくれてすみません

1は232で解決しました
2は画面のプロパティのデザインの効果の
 次のアニメーション効果をメニューとヒントに使用するのチェックを外すと
 治りました。

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


237 :デフォルトの名無しさん:2009/12/09(水) 15:29:32
CButton でクイックされたらそのまま凹んだまま、押しボタンのように動きにしたいのですが、
(もう一度クリックすると元に戻る) どのようなコードでできるでしょうか?


238 :デフォルトの名無しさん:2009/12/09(水) 15:45:59
>>237
チェックボックスのスタイルをBS_PUSHLIKEにすればいいかも

239 :237:2009/12/09(水) 18:10:21
>>238
ありがとうございます。 ためしてみますm(_ _)m

240 :デフォルトの名無しさん:2009/12/09(水) 22:48:44
エラーで困っているので助けてください。

error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2019: 未解決の外部シンボル "public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ) が
関数"public: virtual int __thiscall CprototypeApp::InitInstance(void)"(?InitInstance@CprototypeApp@@UAEHXZ) で参照されました

とエラーが出ていますが、原因がわからず困っています。

同じソースを別の人の環境で実行すると何もエラーも出ずにコンパイル・リンカーが通ります。
私も昨日までは通っていましたが、コーディングを設定ファイル?とかがおかしくなってしまったのか、
昨日のデータを使ってもリンカーエラーが出て困っています。

環境として、
自分   VisualStadio 2008 VC++(MFC)
別の人  VisualStadio 2008 VC++(MFC)

本当に困っています。何か知っている方がいらっしゃったら力を貸してください。

241 :デフォルトの名無しさん:2009/12/09(水) 23:02:46
出力ファイルを全て消してリビルドしる。
C/C++関係はそれで解決することが良くある。

242 :240:2009/12/10(木) 00:07:23
>>241
出力ファイルとは、Solution内のDebugフォルダ内のことをさすのでしょうか?
昨日から勉強を始めたため、ほんとにわからないことが多くてすみません。

243 :デフォルトの名無しさん:2009/12/10(木) 22:12:26
MFCにライブラリパスが通ってないんだろ。

ライブラリパスはソースではなく、コンパイラの設定だから
PCが変われば設定が違う可能性がある。

ちょっと2008が手元にないんでアレだが2005で見ると
ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ→ライブラリファイル
で設定できる。2008も似たようなもんだろ。

その設定をコンパイルが通るやつに合わせてみろ。


244 :デフォルトの名無しさん:2009/12/10(木) 22:23:09
何だマルチだったのか

245 :デフォルトの名無しさん:2009/12/11(金) 10:27:42
CWnd使ってVSの入力候補みたいな小窓を表示させたいんだけど、
popupで表示して小窓がアクティブ状態になると、メインウィンドウが
非アクティブ状態になってしまいます。小窓がアクティブ状態になっても
メインウィンドウがアクティブ状態を失わないようにするにはどうしたら良いですか?

246 :デフォルトの名無しさん:2009/12/11(金) 12:49:33
WS_EX_PALETTEWINDOW

247 :デフォルトの名無しさん:2009/12/11(金) 16:52:41
>>246
レスありがとう。ただ、WS_EX_PALETTEWINDOW指定しても、メインウィンドウが
非アクティブになってしまいます。何か他の設定が悪いのかも?

ダイアログベースで以下のような感じ

//CtestAppの中でウィンドウ登録
WNDCLASSEX wndclass;
wndclass.lpszClassName = L"TESTWINDOW";
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = DefWindowProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = m_hInstance;
wndclass.hbrBackground = ::CreateSolidBrush(::GetSysColor(COLOR_BTNFACE));
wndclass.lpszMenuName = NULL;
wndclass.hIcon = LoadIcon(IDI_APPLICATION);
wndclass.hCursor = LoadCursor(IDC_ARROW);
wndclass.hIconSm = LoadIcon(IDI_APPLICATION);
RegisterClassEx(&wndclass);

//ボタン押された時にウィンドウ表示
void CtestDlg::OnBnClickedButton1()
{
CRect cr;
GetWindowRect(&cr);
m_cwnd.CreateEx(WS_EX_PALETTEWINDOW, L"TESTWINDOW", L"", WS_VISIBLE | WS_POPUP, cr.left, cr.top, 50, 50, GetSafeHwnd(), NULL, NULL);
}

248 :デフォルトの名無しさん:2009/12/11(金) 19:16:14
戻してやればいいだけの気がするけど
MFCなんだからドッキングツールバーのソースでも読んで勉強すればいいよ

249 :デフォルトの名無しさん:2009/12/12(土) 01:15:06
ツールウィンドウで作るんじゃなかったっけ?

250 :デフォルトの名無しさん:2009/12/12(土) 01:42:47
#define WS_EX_PALETTEWINDOW   (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)

251 :245:2009/12/12(土) 09:54:12
とりあえずソース読んで勉強してみます。レスしてくれた人たちありがとう。

252 :デフォルトの名無しさん:2009/12/12(土) 10:12:06
メインウィンドウは非アクティブでいいんじゃね?
手持ちのアプリの動作でいうと
VC6はアクティブがどうであろうとメインもツールウィンドウもアクティブになりっぱなしでおかしい
VC2008はアクティブによってメインもツールウィンドウもちゃんと切り替わる
ってなってる

俺もツールウィンドウ作ったときにメッセージのやり取りがおかしくなったときに
VC6みたいにアクティブになりっぱなしになったことあるから
VC6ってバグりっぱで放置してあるだけだと思う

253 :245:2009/12/12(土) 12:39:18
>>252
確かにVS2008だとアクティブ状態が移動しますね。ただ、作りたいのがツールウィンドウではなく、
VS2008で例えると、入力候補ウィンドウみたいなヤツなんです。これポップアップで出ますが、
フォーカスが移っても、親ウィンドウのアクティブ状態は変化ないですよね。

248さんが言ってた”戻せばいい”というのをヒントに、親ウィンドウの
WM_NCACTIVATEとWM_ACTIVATEAPPで細工したら希望通りの動作になりました。

254 :デフォルトの名無しさん:2009/12/12(土) 13:11:45
WS_EX_NOACTIVATEは使えないか?

255 :デフォルトの名無しさん:2009/12/15(火) 15:00:48
どなたかXPでマルチモニタ環境のあるかたに試していただきたいのですが、

VS2005やVS2008でダイアログベースのプロジェクトを作り、
標準で用意される2つのダイアログ(メインとバージョン情報)に
「サイズ変更枠」と「最大化ボタン」のプロパティをセットしてビルド。

デバッグ開始し、メインダイアログを最大化。

特に問題無い。

そのままバージョン情報ダイアログを出してこっちも最大化。

セカンダリモニタにほんのちょっとウィンドウ枠がはみ出る。

という現象が発生するのですが、
他のかたの環境でも発生しますでしょうか。

256 :デフォルトの名無しさん:2009/12/15(火) 19:46:45
特に問題無い

257 :デフォルトの名無しさん:2009/12/15(火) 20:26:08
>>256
あれ、発生しませんか。
社内ではXPマシンすべてで発生するんです。
同じモニタだから、ハードウェア的な問題なんだろうか。
ありがとうございます。

258 :デフォルトの名無しさん:2009/12/16(水) 18:28:00
画面端同士で同じ場所参照してそうな仕様だな
それだと他のウィンドウでも同じ現象が出るか

259 :ぷれ:2009/12/16(水) 23:51:16
はじめまして、画像ビューアを作ろうと思っているのですが
CWinthreadにCScrollView派生クラスのハンドルを渡してスレッド側から、
CScrollViewのOnPrepareDC(&dc)をコールすると以下でエラーが発生します。

CWnd::AssertValid()
 CHandleMap* pMap = afxMapHWND();
 ASSERT(pMap != NULL);//<--ここでエラー

どうすれば問題解決するでしょうか。
よろしくお願いします。(関連するソースは以下)

CThreadxxx ::CThead(HWND hwnd)
{
m_pMainWnd = AfxGetMainWnd();
m_pView = (CScrollViewxxx*)CWnd::FromHandle(hwnd);
}

int CThreadxxx ::Run()
{
 while (WaitForSingleObject(m_hEventKill, 0) == WAIT_TIMEOUT){
  if(m_hWndView){
   CClientDC dc(m_pView);
   m_pView->OnPrepareDC(&dc);
   m_pView->Render(&dc);//計算描画処理(重い)
  }
 }
}

260 :デフォルトの名無しさん:2009/12/17(木) 08:52:31
MFCのドキュメント・ビューアーキテクチャ関数はワーカースレッドから呼ぶとエラーになるものあるんだよね
ワーカースレッドからはユーザーメッセージ定義してメッセージハンドラで凌いでた
SendMessage()で渡せばメインスレッドで処理されて帰ってくる

261 :ぷれ:2009/12/17(木) 09:20:35
>>269回答ありがとうございます。
メッセージで処理してみましたが遅くなってしまいました。
早くする方法はありますでしょうか?ソースは↓みたいな感じです。
int CThreadxxx ::Run()
{
 if(m_hWndView)
 {
  PostMessage(m_hWndView,WM_USER_START_RENDER, 0, 0);
  if(WaitForSingleObject(m_hEventEndRender,10000) == WAIT_TIMEOUT));
  {
   return ;
 }
}

BOOL CScrollViewxxx::PreTranslateMessage(MSG* pMsg)
{
 CDC *pDC = NULL ;
 CClientDC dc(this);
 switch (pMsg->message){
  case WM_USER_START_RENDER:
  OnPrepareDC(&dc);
  SetOrigin(&dc);
  Render(&dc);
  //m_pThreadRender:スレッド
  SetEvent(m_pThreadRender->m_hEventEndRender);
  break;
 }
}




262 :デフォルトの名無しさん:2009/12/17(木) 10:25:02
Render()はワーカースレッドに置いたままでいいんじゃないのか?
こんなイメージ

int CThreadxxx::Run()
{
while(WaitForSingleObject(m_hEventEndRender,10000) == WAIT_TIMEOUT)){
if(m_hWndView){
CClientDC dc(m_pView);
m_pView->SendMessage(WM_USER_START_RENDER, 0, (LPARAM)(CDC*)&dc)) //制御待たせるためにSendMessage
  m_pView->Render(&dc);
}
}
}

LRESULT CScrollViewxxx::WindowProc(UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch (pMsg->message){
  case WM_USER_START_RENDER:
{
ASSERT_KINDOF(CDC, lParam);
CDC* pDC((CDC*)lParam);
if(pDC->GetSafeHdc() != NULL) {
OnPrepareDC(pDC);
SetOrigin(pDC);
}

return 0;
}

return CView::WindowProc(msg, wParam, lParam);
}

263 :ぷれ:2009/12/17(木) 11:33:51
>>262ありがとうございます。
早速試してみます。

264 :ぷれ:2009/12/17(木) 12:58:42
>>262 試してみましたがまだ遅いです。メッセージ処理を改良すべきだとは思うのですが何か案はございますでしょうか?
試したソースはこんな感じです。
int CThreadxxx::Run()
{
if(m_hWndView)
{
CClientDC dc(m_pView);
m_pView->SendMessage(WM_USER_START_RENDER, 0, (LPARAM)(CDC*)&dc);
CRenderInfo renderInfo;
m_pView->Render(&dc);
SetEvent(m_hEventStop);
}
}

LRESULT CGdsView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
CDC* pDC = (CDC*)lParam;
switch (message)
{
case WM_USER_START_RENDER:
ASSERT_KINDOF(CDC, pDC);
if(pDC->GetSafeHdc() != NULL)
{
OnPrepareDC(pDC);
SetOrigin(pDC);
}
return 0;
default:
break;
}
return CScrollView::WindowProc(message, wParam, lParam);
}

265 :ぷれ:2009/12/17(木) 13:01:47
↓見たいな処理をどこかに入れ込めばいいと思うのですがどのタイミングに埋め込むべきか
判断に迷ってます。
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if(msg.message == WM_USER_START_RENDER)
{
CDC* pDC = (CDC*)lParam;
ASSERT_KINDOF(CDC, pDC);
if(pDC->GetSafeHdc() != NULL)
{
OnPrepareDC(pDC);
SetOrigin(pDC);
}

}else{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}

266 :デフォルトの名無しさん:2009/12/17(木) 20:12:13
ワーカースレッドでDIBを作らせれば済む話じゃないの?
何か無駄に話を難しくしているように見えるぞ。

267 :デフォルトの名無しさん:2009/12/19(土) 11:16:15

クラス A
CListBox m_listA

クラス B
CListBox m_listB

クラス C
fnCommon()


クラスA、クラスBの処理が共通なので、
クラスCの関数を共通処理関数としようと思っています・

クラスCの関数に、クラスAのm_listAなどのメンバを引数に渡せなくて
困っています。どうやればいいでしょうか?


クラスAの処理
{
クラスC: :fnCommon( m_listA );
}

クラスCの処理
クラスC::fnCommon( ClistBox a)
{
a.set・・・();
}

ではうまくいきませんでした、どうすれば別のクラスのメンバを引数として渡せるのでしょうか?
最近はじめたばかりでググっても解決策が見つかりません。
よろしくお願いします。

268 :デフォルトの名無しさん:2009/12/19(土) 12:11:08
>>267
ポインタを渡す、もしくは、CListBoxの派生クラスを作ってそこで処理する。
ClassC::fnCommon(&m_listA);
クラスC::fnCommon(CListBox* a)
{
a->set・・・();
}

CMyListBoxクラス内にfnCommon関数を宣言・定義
クラスAの処理
CMyListBox m_listA;
m_listA.fnCommon();


269 : [―{}@{}@{}-] デフォルトの名無しさん:2009/12/19(土) 21:52:40
Windowsのコントロールって複数のウィンドウで同時に共用できないんでしたっけ?
具体的にはCPropertySheetで作成したコントロールを複数のCPropertyPageに貼りつけて
共用するとか。これができると、CListCtrlやCTreeCtrlやカスタムコントロールで便利なもんで・・・・
試しにやってみたら1枚目には貼れるのですが、2枚目以降は駄目でした。(表示されない。エラー
は無し。)

270 :デフォルトの名無しさん:2009/12/19(土) 22:05:05
コントロールはただのウインドウだからどこにでも張り付くし、後から移動することも可能。

271 :デフォルトの名無しさん:2009/12/19(土) 22:20:50
左側のツリーで右側のプロパティページを切り替えるのはよくあるな

272 : [―{}@{}@{}-] デフォルトの名無しさん:2009/12/20(日) 04:50:40
>>270 >>271
サンクス。OnSetActive()の段階でコントロールにSetParent()したらイベントが行く様に
なったんだけど、開始ページ以外のCTreeCtrlの文字が表示されない。(マウスクリックすると
表示される。)コントロールにUpdateWindow()などしても更新されないから、更新イベントが
CTreeCtrl内のコントロールに行き渡ってないみたいだ・・・・

273 :268:2009/12/21(月) 00:01:39
>>267
親切にありがとうございました。
無事解決しました。

274 :デフォルトの名無しさん:2009/12/23(水) 00:06:53
MFC SDI のプログラムで、このように取得したドキュメントの文字を、CString 型の変数に取得し、
配列へ格納したいのですがどうしたらできますでしょうか
CxxxDoc *pDoc = (CxxxDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();

275 :デフォルトの名無しさん:2009/12/23(水) 00:52:33
>このように取得したドキュメントの文字を

どのように取得したって?
取得できてないじゃん。

276 :デフォルトの名無しさん:2009/12/23(水) 01:06:20
>>257
>>254です、
一応これでエディットビュー のドキュメント(テキスト)が
取得できるようになったのですが、このままでは256 文字がべたで配列に代入されてしまいます
一行づつ取得して、配列へ格納するにはどうしたらいいでしょうか?
CxxxDoc *pDoc = (CxxxDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
void* P = m_viewList.GetHead();
char buf[_MAX_PATH];
CEdit* pE;
pE = (CEdit*) P;
pE->GetWindowTextA((LPTSTR)buf,_MAX_PATH);

277 :デフォルトの名無しさん:2009/12/23(水) 05:42:00
一行づつ切り分けて取得して、配列へ格納する。Enterの文字列で切り分ければ良い。


278 :デフォルトの名無しさん:2009/12/23(水) 08:41:46
1行の読み込みを、
pE->GetLine(i, (LPTSTR)buf);
として、得ることにしたのですが、当然のことながら、改行コード以降にゴミが入っています
sizeof(buf); とかstrlen(buf); でサイズを得たいのですが上手く行きません
目的のデータ(文字列+改行コード)を得るコードを教えてもらえませんか?

279 :デフォルトの名無しさん:2009/12/23(水) 09:11:09
CEditのメンバ一覧に目を通す時間すらないとは大変ですね。
あと、CEdit::GetLine(nIndex, lpszBuffer)は
lpszBufferの中身の先頭WORDにバッファ長が入っていることが前提だ。

280 :デフォルトの名無しさん:2009/12/23(水) 09:55:09
CEditはCString と相性いいから簡単に扱えたはずだけど
わざわざ手間がかかるやり方でやってないか?
行数がとてつもなく多いとか、効率考えて普通と違う方法でやろうとしてるならいいけど

281 :デフォルトの名無しさん:2009/12/23(水) 10:43:27
どうもみなさん、thxですこんな感じでできましたが、もう一息です、pE->ReplaceSel(result.c_str());で置換をしているのですが
置換後の文字列を置換前の文字列の位置に上書きしたいのですが、今のままだと、置換前、置換後の文字列両方表示されています、どこがおかしいでしょうか?
>>280
CString を使いたいのですが、<boost/regex.hpp> が使いたいので、文字列は*char かstd::string の方がベターなのです

char szBuf[256];
const int nRow = pE->GetLineCount();
for(int nIdx = 0; nIdx < nRow; ++nIdx) {
// テキストデータ取得。
const int iSize = pE->GetLine(nIdx, szBuf, sizeof(szBuf) - 1);
szBuf[iSize] = '\0';
reg_ex = "<.*?>";
result = re.RegularTagReplace(szBuf, reg_ex);// <boost/regex.hpp> でHTML タグを削除している
const int end = pE->GetWindowTextLength();
pE->SetSel(end, end); // 一番最後に持ってくる
result += "\r\n";
pE->ReplaceSel(result.c_str());
}

282 :デフォルトの名無しさん:2009/12/23(水) 12:22:33
いちいち質問しないと解決しない問題とは思えないが

283 :デフォルトの名無しさん:2009/12/23(水) 14:09:55
pE->SetSel(0, 0);
とかやってみるができないorz

284 :デフォルトの名無しさん:2009/12/23(水) 15:18:25
全然関係ないけど、行単位でTAGを取り除く意味あるのか?
HTMLは特別な場合を除いて改行を無視するから
TAGのカッコの途中で改行が入ったりしてる場合もあるわけだが

285 :デフォルトの名無しさん:2009/12/23(水) 16:37:33
>>284
行単位でタグを取り除くのには、他に目的があります、改行の必要な部分は、あとで
<br> をつけます、しかし上手くいかんな・・・


286 :デフォルトの名無しさん:2009/12/23(水) 18:47:25
>>281です
他で聞いてみます。

287 :デフォルトの名無しさん:2009/12/27(日) 23:43:33
質問です。

いろんなファイル形式の画像ファイル(特に48bitカラー)を読み込んで、データストリーム
(ピクセルごとのRGB情報)を取得したいと思ってます。

いまはGDI+のImageクラスで画像ファイルを開いて、Image.SaveでIStreamにデータ
ストリームをコピーした後、IStream.Writeでunsigned char[]にコピーするというコードを
試しているんですが、IStreamからunsigned char[]へのコピーがうまくいきません。
Writeの返り値はOkになってるし、コピーされたバイト数も正しいのに、配列は全て
0が入っているという状態です。

考えられる原因は何でしょうか?
あるいはもっと確実な方法があれば、お教えいただけると助かります。

288 :デフォルトの名無しさん:2009/12/28(月) 00:31:42
>>287
IStream::Writeは、IStreamに書き出す、という意味だぞ。
取り出すならIStream::Read。引数の型で気付かなかったのか?

289 :デフォルトの名無しさん:2009/12/28(月) 01:01:41
>>288
ありがとうございます。
明日試してみます。

290 :デフォルトの名無しさん:2009/12/30(水) 01:43:31
VisualStudio2010のMFCってもう仕様変わらなそうかな。
主力は.netだろうしRCやRTMに向けてはそっちの調整だろうな。
リボンアプリの案件が来てて困ってる。2010はデザイナが付いてるし、
βで作っても問題なさそうな気がする。そう思いたいだけなんだけどね。
納期は5月だからβで作ったのを引き継げればいいのだが・・・。

291 :デフォルトの名無しさん:2009/12/30(水) 01:47:52
>リボンアプリの案件

需要あんのか

292 :デフォルトの名無しさん:2009/12/30(水) 02:02:55
OfficeはOffice2007、2010で始めて触りましたって人や
Win7が始めて使ったWindows(ペイントなんかがリボンアプリ)ですって人が大勢を占めるようになったら
需要としては結構出てきそう。
市販アプリでもPerfectDiskなんかは既にリボンUI採用してるね。

293 :デフォルトの名無しさん:2009/12/30(水) 02:10:15
見た目の問題っぽい。客先は来年末までにWindows7にするみたいだし、
Officeも2010にもするらしいから、見た目を同じにしたいらしい。
個人的には今までのツールバーみたいに、他の処理と無関係なアイコンが
並ばなくていいという点だけは評価できる。ツールバー消したりとか
しなくていいし。機能別にタブみたいなグループでまとめちゃえばいいし。
ただ無駄に高さを取るのがどうしても馴染めない。

294 :デフォルトの名無しさん:2010/01/02(土) 20:34:39
馬鹿は使うな!

以上!


295 :デフォルトの名無しさん:2010/01/05(火) 08:20:54
VC6から2008に以降したら文字列でえらい苦労した。
出来上がったソフトを他のPCで動かそうとしたら起動せず、
イベントログでSideBySideエラーになっていた。
他の人に送ったらマニフェストがどうたらこうたらとか・・・
わけわかんないのでもう一台のPCでコンパイルしようとしたらエラーが出る。
そうか、ExpressにはMFCが入っていないんだね。

最近、自分が浦島太郎に思えることが多いですよ・・・

296 :デフォルトの名無しさん:2010/01/05(火) 11:41:56
MFC付きの有料のを買えばいいだけですよ。

297 :デフォルトの名無しさん:2010/01/05(火) 19:12:30
VC6のランタイムはXP以降ならOS標準で入っているからな。
まあ2008の場合はWinSxSへのコピーのみでマニフェストでアクセス、
という今までと違う変則的な方法だから解り難くてもしようがない。
不評だったのか、2010ではシステムフォルダにもコピーされる仕様に戻るらしい。

298 :デフォルトの名無しさん:2010/01/06(水) 09:16:31
VC2008でMFCダイアログベースなどのプロジェクトを作ると、
メッセージマップのところに
//}}AFX_MSG_MAP
というものが入っているのですが(閉じるほうのみ)、
これってVC6などでClassWizardのために入っていたものですよね?
VC2008でもなにか意味のあるものなのでしょうか?
それともテンプレートの残骸?

299 :デフォルトの名無しさん:2010/01/06(水) 10:02:34
ISAPIフィルタでレスポンスの内容を編集したく
OnSendRawData()ではレスポンスを返さないようにするために
pRawData->cbInData = (DWORD)0;
pRawData->cbInBuffer = (DWORD)0;
として
OnEndOfRequest()で
pfc->WriteClient()
で編集した内容を返そうとしています。
しかし、OnSendRawData()で
pRawData->cbInData = (DWORD)0;
pRawData->cbInBuffer = (DWORD)0;
を入れるとOnEndOfRequest()でWriteClient()をしてもレスポンスが
返されません。
なぜこのような結果になるのでしょうか?


300 :299:2010/01/06(水) 10:11:46
わかりました。
WriteClient()を呼ぶとOnSendRawData()が発生するんですね。

301 :デフォルトの名無しさん:2010/01/25(月) 14:38:28
CInternetSessionのメンバの
GetFtpConnectionとかでタイムアウトを設定できないでしょうか?



302 :デフォルトの名無しさん:2010/01/25(月) 23:15:39
試したことないから知らんけど設定自体はあるね

303 :デフォルトの名無しさん:2010/02/03(水) 01:38:21
ミューテックスオブジェクトについて、質問です。
環境は、VC6でMFCダイアログベースです。

2つのアプリケーションAとBを作っているのですが、
以下の処理をそれぞれ追加します。
A:ボタン押下でBをミューテックスオブジェクトを使って排他的に呼出す。
B:ミューテックスオブジェクトを保持。

@Aにあるボタン押下でBだけは呼出せたのですが、ミューテックスオブジェクトを
使って排他的な呼出し方にする方法が分かりません。
ABでミューテックスオブジェクトを保持する方法が分かりません。

自アプリケーション の2重起動禁止の場合、CreateMutexを使っていたのですが、
上記の場合、AとBをどのようにすればいいでしょうか?どなたか宜しくお願いします。

304 :デフォルトの名無しさん:2010/02/03(水) 08:01:24
>>303
Aからボタン押下でBを起動、
ただし以前Aから起動した事のあるBが残っている場合は
新たに起動はしない、ってことでOK?
そういうのだったら、B起動時にそのプロセスハンドルを残しておいて、
次のボタン押下時にGetExitCodeProcessで以前起動したプロセスが終了したか確認、とか。
手動でならBを複数起動できる、という必要性がないならBの二重起動禁止で十分だけど。

305 :デフォルトの名無しさん:2010/02/03(水) 10:08:47
CStringArrayのシリアライズ化で、ファイル保存はできたのですが、
これを読み込んでCStringArrayに再格納できませんでした。どのようにすればいいのでしょうか?


//シリアライズ
CStringArray aBuf;

aBuf.Add( _T("aaa") );
aBuf.Add( _T("bbb") );
aBuf.Add( _T("ccc") );

CFile f;
BOOL bRet = f.Open( _T("hoge.txt"), CFile::modeCreate | CFile::modeWrite );
if( bRet == FALSE) {
return true;
}
// アーカイブを作成
CArchive ar( &f, CArchive::store );
TRY {
aBuf.Serialize( ar );
}
CATCH_ALL(e) {
ar.Close();
f.Close();
return 0;
}

306 :デフォルトの名無しさん:2010/02/03(水) 11:52:32
>>305
読み込むほうのソースを出さないと誰もわからない。

307 :305:2010/02/03(水) 15:41:45
>>306

失礼しました。
サンプルをみて書いたのですが、以下のコードになります。


try{
CStringArray m_saMyArray;
CFile in(_T("hoge.txt"), CFile::modeRead);
CArchive ar(&in, CArchive::load);
CString buffer;
m_saMyArray.SetSize(0);
for(int i = 0; ar.ReadString(buffer); i++) {
m_saMyArray.Add(buffer);
}
ar.Close();
in.Close();
} catch(CFileException e)
{
AfxMessageBox(_T("Read Error !!"));
}

ar.ReadString(buffer)で bufferにすべてのデータが格納されました。
根本的に、読込み方法が間違っているのでしょうか?
ご教授おねがいしますm(_ _)m

308 :デフォルトの名無しさん:2010/02/03(水) 16:25:07
>>307
CStringArray::Serialize()で保存したものは
CStringArray::Serialize()で読み込まないとダメ。

> CString buffer;
> m_saMyArray.SetSize(0);
> for(int i = 0; ar.ReadString(buffer); i++) {
> m_saMyArray.Add(buffer);
> }

m_saMyArray.Serialize(ar);

309 :305:2010/02/03(水) 18:14:02
>> 308

ありがとうございます(><
ためしてみます。。

310 :303:2010/02/05(金) 21:42:09
>>304
GetExitCodeProcessを使ってやってみます。
ありがとうございました。

311 :デフォルトの名無しさん:2010/02/06(土) 13:24:05
CToolBarのボタンのイメージはリソースからしか設定できないみたいなんですが、
iconファイル(拡張子ico)を読み込んでイメージを設定する方法ってありますか?
サイトアイコン(favicon.ico)をダウンロードして、動的にツールバーボタンにイメージ登録するようなことがやりたいのです。

312 :デフォルトの名無しさん:2010/02/06(土) 14:06:52
>>311の件の自己レスです。
icoファイルから読み込む方法は下記のようにできることが分かりました。

HICON hIcon;
ICONINFO iconinfo;
ExtractIconEx(_T("favicon.ico"), 0, NULL, &hIcon, 1);
GetIconInfo(hIcon, &iconinfo);
m_toolbar.SetBitmap(iconinfo.hbmColor);
DestroyIcon(hIcon);

しかしこれでは1種類のアイコンイメージしか使えません。
複数のイメージを使いたい場合は、横方向に連結した1個のbitmapを作る必要があるようです。
どうやって連結するかはまだ分かりませんが、ものすごい不便ですね。

313 :デフォルトの名無しさん:2010/02/06(土) 15:36:47
コントロールは汎用的に作られてるから
気に入らなかったら自作すればいい。

314 :デフォルトの名無しさん:2010/02/06(土) 15:45:38
TBBUTTON配列受け取るAddButtons()とかなかったっけ?CToolBarCtrlだったか?

315 :デフォルトの名無しさん:2010/02/06(土) 18:02:15
>>314
CToolBarCtrlというのがあったんですか。
これだとAddBitmap()で1個ずつ追加できそうですね。
ありがとうございました。

316 :デフォルトの名無しさん:2010/02/08(月) 16:28:36
C#のsplitContainerなどに相当するコンテナクラスはC++(MFC)にありますでしょうか?

317 :デフォルトの名無しさん:2010/02/08(月) 16:54:48
ウインドウが表示されてるかどうかわかる方法ありますか?
IsShowみたいなのが欲しいです
CWndには無いようです

318 :デフォルトの名無しさん:2010/02/08(月) 16:59:38
>>317
CWnd::IsWindowVisible

319 :316:2010/02/08(月) 17:05:26
自己解決しました
WTLにありますね

320 :317:2010/02/09(火) 09:49:26
>>318
ありとがう
できました

321 :デフォルトの名無しさん:2010/02/12(金) 05:57:29
MFCで、
CWnd;;OnSysKeyDonwではAltのみのキーも拾うのに
CWnd::OnSysKeyUpでは拾わないのはなぜなんだぜ・・・

AltのみのUPイベントを拾うにはどうすればいいですか、
教えてエロい人

322 :デフォルトの名無しさん:2010/02/12(金) 09:31:03
あーPreTranslateMessageか・・・

323 : [―{}@{}@{}-] デフォルトの名無しさん:2010/02/13(土) 22:09:59
いきなりの質問ですが・・・
Visual Studio 2008の拡張MFCで、CDockablePaneのタブ付きウィンドウ内に
上下分割ウィンドウ(VisualStudioのClass Viewみたいな)って作れます
か?タブウィンドウにする前にドッキング出来ちゃえば簡単に作れそうな
気はするのですが、DockToWindow使ってみても駄目でした。

結局ドキュメントの更新無し=不備なままで2010が出そうですね。
何だかいい加減だなぁ。


324 :デフォルトの名無しさん:2010/02/14(日) 12:00:38
>上下分割ウィンドウ(VisualStudioのClass Viewみたいな)って作れますか?

作れる。ただし自前。

325 :デフォルトの名無しさん:2010/02/18(木) 22:35:50
google-perftoolsをMFCから利用できる方法はないだろうか。
new、deleteが早くなって便利そうなんだけど。
ttp://d.hatena.ne.jp/kiwamaru/20090127/1233044005
を参考にreleaseでは機能するみたいだけど、debugでは
#define new DEBUG_NEW
を外してもダメみたい。

326 :デフォルトの名無しさん:2010/02/20(土) 12:17:01
ダイアログベース、オーナードローでボタン描画してるんですが
構成プロパティ - 文字セットが「Unicode文字セット〜」
だとOnDrawItem関数でlpDrawItemStruct->itemActionが
ODA_SELECTを返してこない理由わかる人いますか?

OS:Xp,Vista,Windows7
環境:vs2008
.Net FrameWork:2.0〜3.5
以上の環境で再現できました。


327 :デフォルトの名無しさん:2010/02/20(土) 13:27:36
>>326
Comctl32の6.0以降とそれ以前で挙動が違う、というのが正解。
stdafx.hを見てみればそのからくりが分かる。

328 :326:2010/02/20(土) 16:50:43
>>327
stdafx.h見てみました。
そういうことだったのですね。
ありがとうございました。

329 :デフォルトの名無しさん:2010/02/24(水) 11:31:37
関数ではなくクラスをエクスポートするMFC標準DLLを作る場合、
AFX_MANAGE_STATE(AfxGetStaticModuleState())は
エクスポートされたクラスのすべてのメンバ関数に入れることになるのでしょうか?
メンバ関数の中でダイアログなどのリソースを使う箇所があります。

クラス自体はMFCのクラスを派生させたものではないので、
拡張DLLではなく標準DLLを選びました。

330 :デフォルトの名無しさん:2010/02/25(木) 19:13:15
すみません。
CWndを継承して新しく定義したウインドウをCDialogの子ウインドウとして作成しましたが、
ウインドウに対するキー入力メッセージが正常に送られません。
このウインドウをクリックしてから矢印キーを押すと、
親のCDialogに一緒に貼り付けたリストボックスにフォーカスが移って選択が上下してしまいます。
新しいウインドウのイベント関数を色々オーバーライドして調べると、矢印キーを押すと同時に何故かKillFocusが呼ばれていました。
何が原因でしょうか。

331 :330:2010/02/25(木) 20:40:07
試行錯誤の結果、OnGetDlgCode()でSetFocus()を呼び出すことで解決できました。
なんかよくわかりませんが、解決しました。
失礼しました。

332 :デフォルトの名無しさん:2010/02/25(木) 21:01:32
>>331
OnGetDlgCode()まで調べたのなら、そこでSetFocus()なんて強引なことをせずに、
DLGC_WANTARROWS や DLGC_WANTCHARS を設定すればよいと思う。

333 :デフォルトの名無しさん:2010/02/25(木) 21:34:55
>>332
クリック時に何が呼び出されるか手当たり次第に関数をオーバーライドして試してたので、
OnGetDlgCodeがそのものズバリの関数だったとは気づきませんでした。
DLGC_WANTARROWSで正常に出来ました。ありがとうございました。

334 :デフォルトの名無しさん:2010/03/06(土) 15:21:17
FeaturePackの解説本ってさすがに出ないかねぇ。

335 :デフォルトの名無しさん:2010/03/09(火) 11:24:04
MFC解説VisualStudio2010対応ってタイトルにした本のほうが売れそうだ。
問題はMFCという言葉で買う人がどれくらいいるかだw

336 :デフォルトの名無しさん:2010/03/09(火) 11:39:06
Visual C++ 2005でMFCアプリを開発してます。

Macのアプリケーションにあるようなドロワーを
Windowsでやるにはどういう形がやりやすいでしょうか?
こんな感じのダイアログから出たり入ったりするGUIです。
http://images.google.co.jp/images?q=Mac%20%E3%83%89%E3%83%AD%E3%83%AF%E3%83%BC

モードレスダイアログやフローティングダイアログバーを試しましたが、
サブウィンドウのような外見がいやなのと、位置制御などが面倒です。
モードレスダイアログの場合はフォーカスがそっちに移るのも困りもの。

見た目、挙動ともによい方法があったら教えてください。

337 :デフォルトの名無しさん:2010/03/09(火) 12:47:57
MFCで提供されていない機能がほしかったらMFC以外で探すか自作するしかない。
要するにスレ違い

338 :デフォルトの名無しさん:2010/03/10(水) 11:01:35
>>337
確かにそのとおりですね。ご指摘ありがとうございました。

339 :デフォルトの名無しさん:2010/03/15(月) 10:00:07
MFCを使用したプログラムで
CoInitializeEx()を使うとエラーが出てしまいます…

普通のWin32コンソールプログラムだと以下でなんの問題もないのですが

#define _WIN32_DCOM

CoInitializeEx(0, COINIT_MULTITHREADED);

MFCプログラムだと、以下の定義エラーが出てしまいます…

error C2065: 'CoInitializeEx' : 定義されていない識別子です。
error C2065: 'COINIT_MULTITHREADED' : 定義されていない識別子です。

どうぞご教授下さいm(__)m

340 :デフォルトの名無しさん:2010/03/15(月) 10:03:16
include し忘れだろ

341 :デフォルトの名無しさん:2010/03/15(月) 10:12:34
>>340
ちょっと書き方が悪かったですね…

コンソールプログラムだと、以下でOKなんですが
#define _WIN32_DCOM
#include <comdef.h>

CoInitializeEx(0, COINIT_MULTITHREADED);

MFCアプリだと、この上述のコードではエラーになるんです…
何故なんでしょうか?

342 :デフォルトの名無しさん:2010/03/15(月) 10:39:15
include し忘れだろ

343 :デフォルトの名無しさん:2010/03/15(月) 10:44:23
>>342
すみません… 具体的に何か教えていただけませんか?
よろしくお願いしますm(__)m

344 :デフォルトの名無しさん:2010/03/15(月) 10:45:22
>>341
_WIN32_DCOMをプロジェクト設定に書くかstdafx.hの上のほうに持って行く

345 :デフォルトの名無しさん:2010/03/15(月) 10:58:23
>>344
stdafx.hの上ではダメでしたが、
プロジェクト設定に書いたら見事OKでした!
ありがとうございます!助かりました!

本当にいい人だ。 うぅ (/Д`)・゜・。

346 :デフォルトの名無しさん:2010/03/15(月) 11:18:59
stdafx.hの中という手はあるがな

347 :デフォルトの名無しさん:2010/03/15(月) 11:22:28
>>345
上ってどこに書きました?
#include <stdafx.h>より上の行ではなく、stdafx.h内の上のほうですよ。
自分の環境では、afx〜.hのインクルードより上に書けば大丈夫でしたが。

348 :345:2010/03/15(月) 13:18:45
>>347
ああ、なるほど、そうでしたか。
それは勘違いしてました。ご指摘ありがとうございます。

349 :デフォルトの名無しさん:2010/03/15(月) 13:54:37
AfxOleInit()の説明だとmfcプロジェクトはマルチで初期化は無理ってあったが裏技があったのか

350 :デフォルトの名無しさん:2010/03/15(月) 17:40:12
MFCで作るMDIアプリのメニューの有効/無効の切替を教えてくださいな

ドキュメントなしのとき→IDR_MAINFRAMEのメニュー
ドキュメントが開かれているとき→IDR_MYFILE(仮)のメニュー

このIDR_MYFILEに含まれるメニューの有効/無効を切り替えたいんだけど、
GetMenu()->EnableMenuItem( ID_MENU_IN_IDR_MYFILE(仮), MF_GRAYED )
みたいなことしても反映されません。なぜ??

351 :デフォルトの名無しさん:2010/03/15(月) 17:48:55
>>350
ON_UPDATE_COMMAND_UIに任せるべきかと。

352 :デフォルトの名無しさん:2010/03/15(月) 17:56:00
>>350
サンクス
とりあえずそれでググってくる

353 :デフォルトの名無しさん:2010/03/15(月) 20:18:54
ツールバーのボタンとかメニューの項目は、
暇な時(OnIdle)に項目の状態を更新できるコールバックを呼び出してくれるからな。
外側から明示的に状態を更新することはあまり無い。

354 :デフォルトの名無しさん:2010/03/15(月) 20:49:58
Editコントロールを0文字にしたときに出る
"整数を入力してください"ってーのがクソうざいんだけど

355 :デフォルトの名無しさん:2010/03/15(月) 21:57:00
EM_LIMITTEXTが0文字を受け付けない仕様だから諦めろ。

356 :デフォルトの名無しさん:2010/03/16(火) 09:04:49
>>354
エディットボックスにintを関連付けなければよい。

357 :デフォルトの名無しさん:2010/03/16(火) 11:10:58
CButton でボタンをスイッチのように、クイックすると凹んだ状態、もう一度クイックすると元に戻るように
したいのですが、どうすればよいでしょうか?

358 :デフォルトの名無しさん:2010/03/16(火) 11:20:08
クリックだろ
チェックボックスにしてPushLikeにするのがいいかも

359 :デフォルトの名無しさん:2010/03/16(火) 21:04:05

猫でもわかるらしいのですが、わたしは分からないので
教えてください。
http://homepage2.nifty.com/c_lang/mfc/mfc_01.htm
のMFCプログラムをVC2008でビルドし、実行するとすぐにVS画面へ戻ってしまいます。

プログラムがすぐ終了している感じです

どうすれば、WINDOWを表示できるのですか?

360 :デフォルトの名無しさん:2010/03/16(火) 21:05:59
>>359
break pointしかけてデバックしてみろや

361 :デフォルトの名無しさん:2010/03/16(火) 21:13:29
煽るだけの奴って、技術的な話からは逃げてるんでしょ?

362 :デフォルトの名無しさん:2010/03/16(火) 21:42:56
こぴぺ乙

363 :デフォルトの名無しさん:2010/03/16(火) 22:18:27
猫でもは時間の無駄にしかならないと思う。

364 :デフォルトの名無しさん:2010/03/16(火) 22:20:58
煽るだけ、答えねぇやつばっかw
かわいそうだから・・・

/D "_WINDOWS"

でOK

365 :デフォルトの名無しさん:2010/03/16(火) 23:11:22
MDIでプログラムしているんですが、各子ウィンドウでメッセージが来ない間、
ウィンドウ別にCWinApp::OnIdleのように処理をするようにしたいのですが、
何か方法なないでしょうか?
単純に思いついた方法はCWinApp::OnIdleで各子ウィンドウを調べて一つずつ
処理させるくらいしか思いつきませんでした。
各子ウィンドウにスレッド処理させる方法も考えたのですが、案件の仕様で
ダメなので使えません。

366 :デフォルトの名無しさん:2010/03/17(水) 09:23:18
>>365
アイドル時の処理というのがどの程度の頻度なのかにもよるけど、
定期的にというものなら、タイマじゃダメ?

367 :デフォルトの名無しさん:2010/03/17(水) 09:34:57
windowが増えたら増えた分だけたくさん仕事ができるんならあれだけど、
ウインドウごとにアイドル調べる意味がわからん。
各子ウィンドウにスレッドじゃないんだから中の人はひとりなんだろ

368 :357:2010/03/17(水) 10:05:09
>>358
ありがとうございます。
CButtonのスタイルをPushLikeにしてみて、それで無理そうならチェックボックスに変更してみます


369 :デフォルトの名無しさん:2010/03/17(水) 10:22:39
>368
MFCならFeature Packも視野に入れるといい。

370 :デフォルトの名無しさん:2010/03/17(水) 10:37:21
へこんだボタンなら大昔から普通にあるけど

371 :256:2010/03/17(水) 13:02:45
>>365 DocView使ってるなら
UINT __cdecl CMyEditApp::OnIdleWT(LPVOID pParam) // ワーカースレッド
{
    POSITION pos(theApp.GetFirstDocTemplatePosition());
    CDocTemplate* pdt(theApp.GetNextDocTemplate(pos));
    CMyDoc* pDoc;

    if(pdt == NULL || (pos = pdt->GetFirstDocPosition()) == NULL)
    {
      ml.Unlock();
      continue;
    }

    while(pos != NULL)
    {
      pDoc = (CMyDoc*)pdt->GetNextDoc(pos);
      pDoc->OnIdleWT();
    } // 改行がおおすぎますだとー!

372 :371:2010/03/17(水) 13:09:06
名前に勝手に数字が・・・256さんごめんよ
ソース結構削ってるから脳内補完してね
theApp::OnIdle()とExitInstance()からSetEventで起きるワーカースレッドでwhile(1)の中をWaitforMulti〜してます


373 :デフォルトの名無しさん:2010/03/17(水) 14:26:59
>>372
>256さんごめんよ

>>256

374 :デフォルトの名無しさん:2010/03/17(水) 20:37:16
ワロタw何たる偶然w

375 :デフォルトの名無しさん:2010/03/17(水) 21:50:48
アプリ起動したときに、タスクバーに表示される物?を右クイックして
表示させたメニュー(CMenu)てどうやって取得しますか?

GetSystemMenu()だと思ってたらとれなかった

376 :デフォルトの名無しさん:2010/03/17(水) 21:55:19
また君か

377 :デフォルトの名無しさん:2010/03/17(水) 22:14:10
CMFCRibbonEditでエディットを作成したんですけど、ReadOnlyになっています。
Enableさせるにはどうしたらいいでしょうか?

378 :365:2010/03/18(木) 00:49:36
なるほど。いろいろ方法がありますね。
DocViewは使ってないんですが、少し実験してみます。
ありがとうございます。

379 :デフォルトの名無しさん:2010/03/18(木) 16:20:40
.netのフォームコントロール(グラフ関係のコントロール)
をMFCダイアログ上に持ってきて使うとか可能ですか?・
VS2008を使ってます
宜しくお願いします

380 :デフォルトの名無しさん:2010/03/18(木) 17:16:35
可能じゃなかったらVCで.netやる意味がないだろ

381 :デフォルトの名無しさん:2010/03/19(金) 08:17:22
具体的にはどうやるんでしょうか?
MFCと.netじゃあ言語が違いますし
DLL?とか使うんでしょうか?

382 :デフォルトの名無しさん:2010/03/19(金) 08:39:23
Windows フォーム コントロールをホストする

383 :デフォルトの名無しさん:2010/03/19(金) 09:06:30
ありがとうございます
Windows フォーム コントロールをホストでぐぐったら
CWinFormsDialogっていうのがあるみたいですね
ただ、これはマネージドC++?ってやつですね
未経験で動くか不安ですがやってみます

384 :デフォルトの名無しさん:2010/03/27(土) 23:08:16
CHtmlViewで更新をかけたときに読み込みのため一瞬白い画面になるのですが、
完全に読み込みが終了したときに再描画をするにはどうすればいいでしょうか?

Visual C++ 2005

385 :デフォルトの名無しさん:2010/03/27(土) 23:32:43
自前でDCに描画すれば?

386 :デフォルトの名無しさん:2010/03/28(日) 03:16:01
CWnd::LockWindowUpdateじゃだめか?

387 :デフォルトの名無しさん:2010/03/28(日) 16:04:29
CListCtrlで選択状態となった、選択状態が変化したってことをしるには
どのメッセージを受け取るの?

388 :デフォルトの名無しさん:2010/03/28(日) 16:21:34
>>387
ON_NOTIFY メッセージで LVN_ITEMCHANGED をキャッチする

389 :デフォルトの名無しさん:2010/03/29(月) 00:22:23
>>386
ありがとうございます!やってみます!

390 :デフォルトの名無しさん:2010/03/29(月) 00:58:25
>>388
ありがとうございます。

391 :デフォルトの名無しさん:2010/03/29(月) 20:14:21
CFormViewにCPropertySheetをCreateし、CPropertyPageをAddPage
してそのPage内にエディット、ボタンなどのコントロールを配置しました。

ボタンが押されたことをCFormViewがで知りたいので、イベントハンドラウィザード
でCFormViewにOnBnClickedButton11を追加しましたが
OnBnClickedButton11が呼ばれません。

お分かりになる方、ご助言願います。

Visual Studio 2008

392 :デフォルトの名無しさん:2010/03/29(月) 20:58:44
子(ボタン)が押されたコトを知ることができるのは親(ボタンのあるページ)だけ。
だから、それを曾祖母さんに知らせるのは親の役目。

393 :デフォルトの名無しさん:2010/03/29(月) 22:46:07
親が曾祖母さんに知らせるのはどうやればいいのですか?
子から曾祖母さんのCWnd*は取得できて、曾祖母さんのメソッドをコールするために
曾祖母さんのヘッダをincludeしたら、循環参照でビルドできないんで、
他に通知する術はありますか?

394 :デフォルトの名無しさん:2010/03/29(月) 22:58:09
>循環参照でビルドできない
前方宣言すりゃよかろ。

>他に通知する術はありますか?
曾祖母さんのCWnd*が取得できてるなら、曾祖母->SendMessage(「押されちゃったよ〜ん」)してもよかろ。
ナニゴトにも会話は大事。
「押されちゃったよ〜ん」は WM_APP+1 でよかろ。

395 :デフォルトの名無しさん:2010/03/31(水) 23:26:06
ワーカースレッドの実装例をネットで調べてると、
ダイアログクラス内のメンバをいじる重い処理をワーカースレッドにする際、
AfxBeginThreadにthisを渡しているものをよく見かけるんだけど、
これって、CWndオブジェクトをスレッドを跨いで使っていることにはならない?

396 :デフォルトの名無しさん:2010/04/01(木) 04:59:16
スレッドを跨いで使っちゃいけないとでも?

397 :デフォルトの名無しさん:2010/04/01(木) 08:06:31
http://msdn.microsoft.com/ja-jp/library/h14y172e(VS.80).aspx
「通常、スレッドは自分自身が作成した MFC オブジェクトしかアクセスできません。」

上のような説明を読む限りは、動かないのではと思うのだけど。

398 :デフォルトの名無しさん:2010/04/01(木) 08:53:50
わざわざ「通常」と断ってるんだから、当然そうでないやり方があるということ

399 :デフォルトの名無しさん:2010/04/01(木) 12:16:01
まぁ、日本語の理解力がこの程度じゃ、PG能力も知れてるわな。
つか、痴れてるかw

400 :デフォルトの名無しさん:2010/04/01(木) 21:53:00
CListCtrlでLVNI_SELECTED もしくは LVNI_FOCUSEDが立ってるItemの検索って
GetNextItem(-1,LVNI_SELECTED|LVNI_FOCUSED);
でいいですか?



401 :デフォルトの名無しさん:2010/04/02(金) 10:44:42
なぜ試さんのか

402 :デフォルトの名無しさん:2010/04/03(土) 03:13:04
VisualC++2008
MDI

リボンにエディットボックスをつけようと思い、
MainFrameのInitializeRibbonでpPanel->Add(new CMFCRibbonEdit(IDC_RIBBON, 200) );
としていますが、実行してみるとエディットはありますが、グレイになっています。
どうすれば、エディットを使用できるようになるのでしょうか?


403 :デフォルトの名無しさん:2010/04/09(金) 16:25:43
vs2010 のVC++ 新機能

・MFC FeaturePack 機能をリソースエディタで使える
・リソースエディタにリボンデザイナーの追加
・インテリセンス機能の大幅改善(1行入力した時点でコンパイルエラーを指摘)
・ClassWizard をVC6 形式で復活
・Find 機能の大幅拡張

これは買いだな



404 :デフォルトの名無しさん:2010/04/09(金) 16:37:28
>・インテリセンス機能の大幅改善(1行入力した時点でコンパイルエラーを指摘)

1行でよかった。もし1字だと使いもんにならん。w

405 :デフォルトの名無しさん:2010/04/09(金) 19:39:18
CMFC〜関係使用時のレジストリ強制使用仕様はどうなったの?
ベータ版ではまだダメだったけど。

406 :デフォルトの名無しさん:2010/04/09(金) 21:26:12
CDC::DrawTextでこの表示横幅とこの文字列で縦何ドット必要になるかって
自分でシコシコ計算するの?なんか便利なメンバある?

407 :デフォルトの名無しさん:2010/04/09(金) 21:27:39
>>403
>・ClassWizard をVC6 形式で復活

Ctrl+W!!

408 :デフォルトの名無しさん:2010/04/09(金) 21:29:53
>>406
DT_CALCRECT

409 :デフォルトの名無しさん:2010/04/09(金) 22:58:58
>>408
即レスありがとー。教えてもらったのでうまく出来ました。

410 :デフォルトの名無しさん:2010/04/10(土) 00:15:47
CComboBoxをオーナードローをやってるんですが、
リソースエディタでのデザイン時より、実行時のほうの高さが高いんですけど
なんでですか?

411 :デフォルトの名無しさん:2010/04/10(土) 00:30:44
仕様です。

412 :デフォルトの名無しさん:2010/04/10(土) 01:24:05
>>410
フォントの違い

413 :デフォルトの名無しさん:2010/04/10(土) 18:53:14
親ダイアログを閉じたときに子ダイアログを全部閉じるにはどうすればいいですか?

414 :デフォルトの名無しさん:2010/04/10(土) 19:15:45
DestroyWindow

415 :デフォルトの名無しさん:2010/04/11(日) 17:24:18
特に何もしなくても親が閉じたら子も閉じるはず

416 :デフォルトの名無しさん:2010/04/12(月) 18:54:22
CWnd派生クラスが、任意のタイミングで、自分自身のスタイルに依存せずに
「いま自分自身にスクロールバーが表示されているか(グレー化も含む)」を
知る方法はありますか?

スクロールバー領域も含めたクライアント領域のサイズが欲しいのですが、
GetClientRect()はスクロールバー領域は含まれないので、
「表示されているときにはGetSystemMetrics(SM_CXVSCROLL)の値を加える」
という処理を付けたいのです。

417 :デフォルトの名無しさん:2010/04/12(月) 19:19:28
>>416
>自分自身のスタイルに依存せず
の意味が不明だが、WS_VSCROLLが付加されているかどうかを調べればよいのでは?

418 :デフォルトの名無しさん:2010/04/12(月) 19:38:29
>>417
これでよかったのですね。
WS_HSCROLLやWS_VSCROLLって、作成時に使うものであって、
SetScrollInfo()でスクロール幅をいじって表示状態が変わったときに
勝手に連動して切り替わってくれるものではないと思ってました。
ありがとうございます。

419 :デフォルトの名無しさん:2010/04/14(水) 02:05:24
Direct2Dに対応したMFCって出る予定ある?
例えばDirectWriteに対応したCEditDWクラスとか。

420 :デフォルトの名無しさん:2010/04/14(水) 13:46:48
ない。

421 :デフォルトの名無しさん:2010/04/15(木) 15:47:33
VS2008でMFCやってます
リストBOXをクリック(又はダブルクリック)したら
小窓を出すようにしたいのですがうまくいきません
リスト項目が存在しててクリックした場所が
項目の上にあれば問題ないのですが
項目が無いところをクリックしても無反応です。
ハンドラは以下のを使ってます。
ON_LBN_DBLCLK
ON_LBN_SELCHANGE

項目が無いところをクリックしても
小窓が出るようにするうまい方法ありませんか?



422 :デフォルトの名無しさん:2010/04/15(木) 15:53:23
>>421
CListBoxを派生してWM_LBUTTONDBLCLKあたりを自分で処理すればよいかと。

423 :デフォルトの名無しさん:2010/04/15(木) 15:55:36
「小窓」などというワケのわからん独自の単語を使わないように。

リストボックスをリストコントロールに変えれば、お望みのことができる。

424 :デフォルトの名無しさん:2010/04/15(木) 16:11:13
親側で処理は不可能ですか;;
ちょっと小窓開くだけの処理で派生とかしたくない;;


425 :デフォルトの名無しさん:2010/04/15(木) 19:31:19
リストコントロール用のLBN_*じゃなくて
コモンコントロール汎用のNM_CLICKとかで対応できるんじゃないか?

426 :デフォルトの名無しさん:2010/04/15(木) 19:32:35
>ちょっと小窓開くだけの処理で派生とかしたくない

。。。

427 :デフォルトの名無しさん:2010/04/17(土) 18:18:50
VS2008でMFCを使用しています。
CMFCPropertyGridCtrl内のプロパティの値が変化したときのメッセージを
受け取ろうと思って以下のコードを入れてみたのですが、
プロパティを変更しても呼ばれないです・・・


メッセージマップ
BEGIN_MESSAGE_MAP(CPropertiesWnd, CDockablePane)
  (中略)
  ON_MESSAGE(AFX_WM_PROPERTY_CHANGED, &CPropertiesWnd::OnChangePropList)
END_MESSAGE_MAP()

int CPropertiesWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
  (中略)
  // CMFCPropertyGridCtrlの作成
  m_wndPropList.Create(WS_VISIBLE | WS_CHILD, rectDummy, this, ID_PROP_LIST)
  (中略)
}

LRESULT CPropertiesWnd::OnChangePropList(WPARAM wParam, LPARAM lParam)
{
  プロパティ変更時の処理
}


428 :427:2010/04/17(土) 18:27:20
途中で投稿してしまいました。 申し訳ないです。
CMFCPropertyGridCtrl内のプロパティ値が変更されたときのメッセージを
受け取る方法は無いのでしょうか?
ご教授お願いします・・・。

429 :デフォルトの名無しさん:2010/04/17(土) 18:40:36
ON_MESSAGE()の2番目の引数って'&'いるんだっけ?

430 :デフォルトの名無しさん:2010/04/17(土) 19:29:36
>>429
2005から自動でこうなる

431 :デフォルトの名無しさん:2010/04/17(土) 22:11:59
>>428
CMFCPropertyGridCtrlを派生させ、
仮想関数ValidateItemData内で
CMFCPropertyGridPropertyのポインタpPropから必要な値を取得し処理をする。


432 :427-428:2010/04/18(日) 01:04:04
>>431
派生先で処理を書いたらできました。
ありがとうございました!

433 :デフォルトの名無しさん:2010/04/18(日) 17:21:50
ダイアログベースで作成したアプリに最小化ボタンを追加したくwwwを探すと
WS_MINIMIZEBOXを設定すればいいらしいのですが、Createされた後に
このフラグをセットするにはどうすればいいのですか?

434 :デフォルトの名無しさん:2010/04/18(日) 17:36:58
なんでCreateされた後なの?
リソースエディタで設定すればいいだけじゃないの?
何かのタイミングで最小化ボタンを追加するの?

435 :デフォルトの名無しさん:2010/04/18(日) 17:53:28
>>434
プロパティウィンドウにありましたね
お手数おかけしました。

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

436 :デフォルトの名無しさん:2010/04/19(月) 22:32:44
SDIウインドウの子にCEditを表示して使っているのですが、
例えばアクセラレータキーで[A]キーを使用していると、Aの文字が打てなくなります。
これでは困るので、一時的にアクセラレータキーを無効にする方法を相談したいです。
わかる方いらっしゃいましたらどうかご教示お願いします。

437 :デフォルトの名無しさん:2010/04/19(月) 22:38:37
>例えばアクセラレータキーで[A]キーを使用していると

これが間違い。Ctrl+A とかにする。

438 :デフォルトの名無しさん:2010/04/19(月) 22:43:46
>>437
ありがとうございます。
一応[A]キーってのは極端な例のつもりだったのですが、
WM_CHARで使うキーは避けるしかないということなんですね。

439 :デフォルトの名無しさん:2010/04/20(火) 17:24:57
使う方だってこれから押すキーがショートカットなのか入力なのか
常に気にしてなきゃいけなくなるだろう

440 :デフォルトの名無しさん:2010/04/20(火) 22:14:21
>>436
メインウィンドウのPreTranslateMessage()で。
CFrameWnd::PreTranslateMessage()のソースを読めば分かる

>>421
ついでに、そちらも派生したくないのであればPreTranslateMessage()でいける。

441 :デフォルトの名無しさん:2010/04/20(火) 22:28:00
PreTranslateMessage?

442 :デフォルトの名無しさん:2010/04/20(火) 22:41:22
>>441
何か疑問でも?

443 :デフォルトの名無しさん:2010/04/21(水) 09:32:25
デフォルト状態ではリターンやエスケープでダイアログが閉じるけど
複数行のedit上にフォーカスある時はリターンで閉じないだったかな
みんなリターンやエスケープで閉じないよう直してるから忘れた。

444 :デフォルトの名無しさん:2010/04/21(水) 15:45:11
ES_WANTRETURNスタイルつけないと複数行でもいくよ

445 :デフォルトの名無しさん:2010/04/22(木) 02:33:24
CStringに円マークが入れれません

CString str(_T("\"));
とするとコンパイルエラーなるから

CString str(_T("\\"));
としたら、本当に2つ入っている・・・

446 :デフォルトの名無しさん:2010/04/22(木) 03:13:55
CString str(_T("\x5c"));


447 :デフォルトの名無しさん:2010/04/22(木) 03:53:41
知ったか乙

448 :デフォルトの名無しさん:2010/04/22(木) 07:58:45
VS2010で試したら、「\\」で一つしか入っていなかったぞ。
確認方法自体が間違っていないか?デバッガで中身を覗いてみろ。

449 :デフォルトの名無しさん:2010/04/22(木) 23:44:43
CFormViewやCPaneDialogに子ダイアログを置いているのですが、
その子ダイアログの中のコントロールにフォーカスがある状態だと、
ALTを押してもメニュー(CMFCMenuBar)に移ってくれません。
さらに、逆にメニュー表示中にそれらのコントロールをクリックすると、
メニューが消えないままフォーカスが移ってしまいます。

CFormViewやCPaneDialog自身に置いてあるコントロールからだと
ちゃんと動くのですが、このへんの仕組みに詳しいかたはいらっしゃいませんか?

450 :デフォルトの名無しさん:2010/04/23(金) 00:32:20
CListCtrlにLVS_EX_DOUBLEBUFFERを設定しようと
SetExtendedStyleを実行してますが、設定されていないようです。
spy++で確認

なぜですか?

451 :デフォルトの名無しさん:2010/04/23(金) 10:35:53
CFormViewだって子ダイアログだろ
というか子ダイアログだとか置くだとかどうにでも取れる表現だな

452 :デフォルトの名無しさん:2010/04/23(金) 21:14:28
>>450
確認方法が間違っているから。
ウィンドウの拡張スタイルとLVS_EX_???とは無関係。

453 :デフォルトの名無しさん:2010/04/23(金) 21:39:44
>>450
これで確認してみては?
CListCtrl::GetExtendedStyle

454 :デフォルトの名無しさん:2010/04/23(金) 21:49:01
>>450
LVS_EX_DOUBLEBUFFERはcomctl32のバージョン6からのものだから
manifestでバージョン6のものが適用されているかどうか確認してみ。

あと、「LVS_EX_DOUBLEBUFFER」がちゃんと設定されていても
spy++のバージョンによっては拡張スタイル欄に出てこないものがある。
VC2008付属のspy++(ver9.00.30729)ではちゃんと出るが、
例えばVC6付属のspy++(ver6.00.8168)では出ない。
VC6のは新しいスタイルができる前のものなんだから当然のこと。

455 :デフォルトの名無しさん:2010/04/24(土) 17:46:10
マルチスレッドのプログラミングで質問です。
プログラムの概要は、社内LANの複数のIPアドレスに対し、
スレッドを複数立てて順番にpingを打ち、対象アドレスの生死を判定するものです。
IPアドレスは概算で3000件以上で、それを50個ほどのスレッドを立てて
順番に処理していく事を想定しています。
pingを打つ処理はクラス化してあり、クラス構築時にDLLのハンドルを渡し、
pingを打つ関数は、アドレスを文字列で渡し、結果をintで返します。
このクラスオブジェクトをスレッドに持たせて実行したいと考えてます。

スレッドの挙動としては、起動したらICMPの初期化をし、一覧からIPアドレスを引き取り、
pingを打って結果を格納し、また次のアドレスへと進んでいきます。
そして、全てが終わったら自殺するものを想定しています。
また呼び出し側では、処理状況をダイアログのブログレスバーに表示し、
全てのスレッドが終了したら開始前の状態に戻ります。
中止ボタンを押せば、その時点で全てのスレッドを終了させます。

このようなスレッドの実装方法を教えてください。
環境はVC6です。

なお、セキュリティ管理の都合上、Vector等で探してきた既存ツールの使用は禁止です。

456 :デフォルトの名無しさん:2010/04/24(土) 17:59:17
pingはよろしくない
arpにしよう

457 :デフォルトの名無しさん:2010/04/24(土) 18:07:38
一つのIPアドレスにpingを打つ処理を一つのタスクと考えて、
pingを打つ処理を担当する50個のスレッドを生成。
スレッド側は新しいタスクの取得しては応答を戻し、
新しいタスクが無い時は終了する。
コントローラ側は全スレッドが完了したら作業終了と判断する。
こんな感じ?

458 :299:2010/04/24(土) 18:58:26
C#で作ればいいのに

459 :デフォルトの名無しさん:2010/04/24(土) 19:00:52
そんな素人が思いつきで作った方法で突っ走る前に
既存のまともなネットワーク管理ツールがどうやってるかぐらい調べた方がいい。

460 :デフォルトの名無しさん:2010/04/24(土) 19:29:15
社内LANならそういうやり方はあり得ないよな
本気でそういう方法がよけりゃスパムメール送るツールでも参考にすればいい。

461 :デフォルトの名無しさん:2010/04/25(日) 03:02:27
遅かれ早かれ本物の管理者から苦情が来て禁止される

462 :デフォルトの名無しさん:2010/05/16(日) 07:33:09
VS2010からまたMFCが面白いことになりそうだね
今は前より選択肢が増えてるから最盛期には及ばないかな?
ツールはMFC派な俺には楽しみな限り
資料とかいっぱい出てくれると最高なんだが

463 :デフォルトの名無しさん:2010/05/16(日) 08:12:44
MFCがバージョンアップするなら.netを駆逐できるか

464 :デフォルトの名無しさん:2010/05/16(日) 15:52:03
.netなんかのマネージドコードとは別の方向へ特化して進化するみたいだからどうだろう?
Vistaや7なんかの新世代OS向けの
最新機能を備えたネイティブアプリを開発する上では強力なツールにはなりそうだ

465 :デフォルトの名無しさん:2010/05/16(日) 23:53:57
CEditViewベースでドキュメントビューMDIアプリを作成してます
標準で作成される
ウィンドウメニューの「新しいウィンドウを開く」の挙動を
VisualStudioと同じように現在のビューと同じ内容のウィンドウを開くにしたいのですが
とりあえず泥臭い方法ですが
void CMainFrame::On*******()
{
// 現在アクティブなドキュメントとヴューを取得
CMDIChildWnd* pActiveChild = MDIGetActive();
CDocument* pDocument = pActiveChild->GetActiveDocument() ;
CView* pView = pActiveChild->GetActiveView() ;

// 現在のビューのテキストを取得
int ndx = pView->GetWindowTextLength()+1;
wchar_t *buff = new wchar_t[ndx] ;
pView->GetWindowText(buff, ndx) ;

// ドキュメントに新しいビューを追加し有効にする
CDocTemplate* pTemplate = pDocument->GetDocTemplate();
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
pTemplate->InitialUpdateFrame(pFrame, pDocument);

// 新しく開かれたビューにテキストを書き込む
pView = pFrame->GetActiveView() ;
pView->SetWindowText ( buff ) ;
pView->UpdateData() ;
delete [] buff ;
}
と実装したのですが
もう少しスマートな方法ないですか?
標準で用意されててもいいような気もするのですが・・・

466 :デフォルトの名無しさん:2010/05/17(月) 12:59:10
わざわざコピーペしてるぐらいだから片方を編集したらもう一方も更新するんだろ
チュートリアルにスプリッタでそういう仕様のサンプルがあった

467 :デフォルトの名無しさん:2010/05/17(月) 23:05:45
// 現在のビューのテキストを取得
>int ndx = pView->GetWindowTextLength()+1;
>wchar_t *buff = new wchar_t[ndx] ;
>pView->GetWindowText(buff, ndx) ;

CEdit::GetHandle()を使えば、バッファを用意しなくてすむ・・・程度かな。

468 :デフォルトの名無しさん:2010/05/22(土) 17:01:06
CCtrlView* pView = (CCtrlView*)GetActiveView() ;
みたいなダウンキャストをしてもちゃんと動いてるっぽいんですが
MFCではそれが安全なように設計されてると考えてOKですか?
それとも危険な場合がありますか?

469 :デフォルトの名無しさん:2010/05/22(土) 17:17:26
曰く、

MFC がサポートする CObject の実行時型指定機構では、マクロ DECLARE_DYNAMIC、IMPLEMENT_DYNAMIC、
DECLARE_DYNCREATE、IMPLEMENT_DYNCREATE、DECLARE_SERIAL、IMPLEMENT_SERIAL を使います。
これらのマクロは、実行時の型チェックによって安全なダウンキャストを保証します。

470 :デフォルトの名無しさん:2010/05/26(水) 15:30:04
Visual Studio .NET 2003を使ってリストコントロールを操作してるのですが、
以下の関数がビルド時にエラーになって使えないのですが、原因がなにかわからないでしょうか?

: error C2039: 'SetSelectedColumn' : 'CListCtrl' のメンバではありません。

GetItemCount()などは問題なく使えているんですが、SetSelectedColumnやSetViewが
上のエラーが出てしまいます。

自分のマウスによる操作以外でアイテムを選択状態にしたいのですが、
上の関数以外を使って実現することってできるのでしょうか?

471 :デフォルトの名無しさん:2010/05/26(水) 15:39:52
>>470

#define _WIN32_WINNT 0x0501

472 :デフォルトの名無しさん:2010/05/26(水) 16:02:15
>>471
ビルドは_WIN32_WINNTの変更だけでは更にエラーがでたので、
stdafx.hにある4つを書き換えることでエラーは消えたのですが、SetSelectedColumnを
つかっても選択状態になることはありませんでした。
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
#define _WIN32_WINDOWS 0x0501
#define _WIN32_IE 0x0501

べつのキーワードでググったら使える関数(SetItemState)が見つかったので、問題は
解決しました。ありがとうございました。


473 :デフォルトの名無しさん:2010/06/01(火) 16:24:24
MFCのCIpAddressCtrlのGetAddressが返す値と
inet_addrが返す値がちがうんですけどどういうことですか?
どのように使用してますか?

例えば”127.0.0.1”の場合
GetAddressは0x7f000001
inet_addrは0x0100007f
を返します

474 :デフォルトの名無しさん:2010/06/01(火) 17:02:03
>>473
inet_addrはビッグエンディアンで返すから。
ntohlとかで変換する。

475 :デフォルトの名無しさん:2010/06/01(火) 17:05:04
というか、socket系はその関数群で完結したらそのまま使えるよ
他のライブラリと行ったり来たりするから変換が必要になる

476 :デフォルトの名無しさん:2010/06/02(水) 07:09:37
初歩的な質問でもうしわけありません。
CFileDialogを使用中にカレントディレクトリが変わらないようにする方法ってありますか?
OFN_NOCHANGEDIRを指定した場合、ファイル選択後に元に戻るのは確認しましたが
選択中はどうしても選択しているフォルダにかわってしまいました。




477 :デフォルトの名無しさん:2010/06/02(水) 08:06:19
もう少し分かり易い日本語で頼む

478 :デフォルトの名無しさん:2010/06/02(水) 08:24:53
MFCのみで起きる問題ならCFileDialogのソース見て対策考えるか
CFileDialogやめて直にapi呼べばいい。

479 :デフォルトの名無しさん:2010/06/02(水) 08:30:28
api側のGetOpenFileNameが変更してるのか
ならMFC関係ないな

480 :デフォルトの名無しさん:2010/06/02(水) 10:57:52
カレントディレクトリに頼る実装に問題が・・・

481 :デフォルトの名無しさん:2010/06/02(水) 12:57:24
>>480
ヴァカは氏ねば? コモンダイアログ使ったことないだろ、雑魚PGが。

>>476
呼ぶ前にGetCurrentDirectory、呼んだ後にSetCurrentDirectory。

482 :デフォルトの名無しさん:2010/06/02(水) 13:03:44
・・・。

483 :デフォルトの名無しさん:2010/06/02(水) 13:35:12
>481
質問者が
OFN_NOCHANGEDIRを指定した場合、ファイル選択後に元に戻る
と言ってるからそんなことしても意味ないだろ

484 :デフォルトの名無しさん:2010/06/02(水) 14:05:15
>>481
質問者がOFN_NOCHANGEDIRも出してるのに
それすらも知らないとはw
それとも3行以上の文章は読めないとか

485 :デフォルトの名無しさん:2010/06/02(水) 14:08:13
>>476
>CFileDialogを使用中にカレントディレクトリが変わらないようにする

具体例を示せ。
どういう状況のとき、どうしたいのか。

486 :デフォルトの名無しさん:2010/06/02(水) 18:45:50
Qtとどっちが使いやすいですか?

487 :デフォルトの名無しさん:2010/06/02(水) 20:09:53
慣れている方。

488 :デフォルトの名無しさん:2010/06/02(水) 23:31:05
MFCのソースって今公開されてるの?
VC6の時はついてたけど。今はどこにあるのかな?

489 :デフォルトの名無しさん:2010/06/03(木) 00:00:20
HDDの中

490 :デフォルトの名無しさん:2010/06/03(木) 00:15:55
VS2010でもきちんとインストールされているぜ。
というか入っていなかった日には非難轟轟だな。

491 :デフォルトの名無しさん:2010/06/03(木) 00:28:58
ChtmlViewを使っているのですが、URLを指定して表示させたものに対して、
LineToなどで線を引いいたりするにはどうすればいいでしょうか?

492 :491:2010/06/03(木) 00:29:39
すみません、書き忘れました
VC++2005です

493 :デフォルトの名無しさん:2010/06/03(木) 14:48:26
         し!     _  -── ‐-   、  , -─-、 -‐─_ノ  M
  小 M     // ̄> ´  ̄    ̄  `ヽ  Y  ,  ´     )  F え
  学 F     L_ /                /        ヽ  C  |
  生 C     / '                '           i    マ
  ま が    /                 /           く !? ジ
  で 許    l           ,ィ/!    /    /l/!,l     /厶,
  だ さ   i   ,.lrH‐|'|     /‐!-Lハ_  l    /-!'|/l   /`'メ、_iヽ
  よ れ   l  | |_|_|_|/|    / /__!__ |/!トi   i/-- 、 レ!/   / ,-- レ、⌒Y⌒ヽ
  ね る   _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ      ,イ ̄`ヾ,ノ!
   l の  「  l ′ 「1       /てヽ′| | |  「L!     ' i'ひ}   リ
    は   ヽ  | ヽ__U,      、ヽ シノ ノ! ! |ヽ_、ソ,      ヾシ _ノ _ノ
-┐    ,√   !            ̄   リ l   !  ̄        ̄   7/
  レ'⌒ヽ/ !    |   〈       _人__人ノ_  i  く            //!
人_,、ノL_,iノ!  /! ヽ   r─‐- 、   「      L_ヽ   r─‐- 、   u  ノ/
      /  / lト、 \ ヽ, -‐┤  ノ  キ    了\  ヽ, -‐┤     //
ハ キ  {  /   ヽ,ト、ヽ/!`hノ  )  モ    |/! 「ヽ, `ー /)   _ ‐'
ハ ャ   ヽ/   r-、‐' // / |-‐ く    |     > / / `'//-‐、    /
ハ ハ    > /\\// / /ヽ_  !   イ    (  / / //  / `ァ-‐ '
ハ ハ   / /!   ヽ    レ'/ ノ        >  ' ∠  -‐  ̄ノヽ   /
       {  i l    !    /  フ       /     -‐ / ̄/〉 〈 \ /!

494 :デフォルトの名無しさん:2010/06/03(木) 19:14:07
あ〜普通にMFCのソースインストールされてるね。
気がつかなかった。

495 :デフォルトの名無しさん:2010/06/05(土) 16:31:59
リストコントロールで例えば10個ほどアイテムがあり、5番目を上から2番目に
移動させたい場合に用意されている関数で実現する方法ってないでしょうか?

ググってもソートはあるのですがアイテム単体での移動をしてる例題が
ありませんでした。

左の表示を右のように並べ替えたい。
0001 テストデータ1 サンプル1  0001 テストデータ1 サンプル1
0002 テストデータ2 サンプル2  0005 テストデータ5 サンプル5
0003 テストデータ3 サンプル3  0002 テストデータ2 サンプル2
0004 テストデータ4 サンプル4  0003 テストデータ3 サンプル3
0005 テストデータ5 サンプル5  0004 テストデータ4 サンプル4


itemMove(5,2)みたいに出来ればいいのですが・・・

ごり押しで書き換えれば実現できそうですが、内容のコピーの処理時間が無駄に
成りそうなので挿入1回で済む方法があればと思いまして。

496 :デフォルトの名無しさん:2010/06/05(土) 16:38:18
リストビューコントロールならいちいち移動しなくても可能

497 :デフォルトの名無しさん:2010/06/06(日) 01:49:17
>>495
ググりかたが悪いんだろ。いや、悪いのは頭か。
ドラッグで順番入れ替えるサンプルとか見たことないのか、この低脳。

498 :デフォルトの名無しさん:2010/06/06(日) 03:31:46
オーナーデータで処理すればコピーは発生しないよ。
コントロールに全部任すのは楽だけど、いろいろ拡張したいときに
不便になるからオーナーデータがお勧め。

499 :デフォルトの名無しさん:2010/06/06(日) 11:15:08
MFC、VS無償版で使えないからキライ

500 :495:2010/06/06(日) 17:20:35
なんか難しく考えすぎてました・・・
挿入はInsertItemのアイテムのインデックス値を指定してやれば可能でした。

最初のリストを作ったときはアイテム数をインデクス値にして最後に追加する処理をしていたので、
思い込みでリストの最後にしか追加されないと思って、この関数は全くチェックしていませんでした。

501 :デフォルトの名無しさん:2010/06/06(日) 19:14:34
>>500
難しいとかじゃなくて、センスのなさだろ。
ふつうに考えて、どこに挿入するかなんて、指定できて当然。
そういうことに頭の回らない、ヴァカさ加減を自覚しろ。

502 :デフォルトの名無しさん:2010/06/07(月) 01:05:09
>>500
質問してみてから自分なりの回答に気がつくパターンだな。
まぁ慣れだ。いろいろ試してみるといい。

503 :デフォルトの名無しさん:2010/06/15(火) 20:33:12
イベントハンドラを追加しようとすると
表示がグレーになって追加できません。

他のプロジェクトはできるのですが、、、
プロジェクトファイルが壊れちゃったんでしょうか?

504 :デフォルトの名無しさん:2010/06/15(火) 20:34:04
そのイベントを受け取らないんだろ

505 :デフォルトの名無しさん:2010/06/15(火) 20:39:08
すみません自己解決しました
ncbファイル消したら治りました。。。クソVSめ。。。



506 :デフォルトの名無しさん:2010/06/16(水) 12:00:05
CStringとかでGetLengthで文字数をかえしますが
これをバイト数で返す方法ありますか?
大文字小文字混在文字列だと単純に×2にもできませんよね??

507 :デフォルトの名無しさん:2010/06/16(水) 12:28:53
GetLength() * sizeof (TCHAR)
でどう?
UNICODEの時は単純に文字数×2だし
マルチバイトの時はGetLength==バイト数だし

508 :デフォルトの名無しさん:2010/06/17(木) 07:32:58
リストコントロール.SetView(LV_VIEW_DETAILS)
ってやってもレポートビューになりません。


509 :デフォルトの名無しさん:2010/06/17(木) 08:51:15
リソースエディタをいじったらOKでした

510 :デフォルトの名無しさん:2010/06/20(日) 19:06:49
VC6でテキストの文字をコピーしたバッファを操作したいのですが
どのような関数を使用するのか教えてください。

511 :デフォルトの名無しさん:2010/06/20(日) 19:25:17
>>510
クリップボードの内容を弄りたい、って事でOK?
MFCに拘るなら、
COleDataObject::AttachClipboardでデータを持って来たり、
COleDataSource::SetClipboardでデータをセットしたりとか、
そんな感じかと。

512 :デフォルトの名無しさん:2010/06/20(日) 20:00:44
>>511 ありがとうございました。

513 :デフォルトの名無しさん:2010/06/23(水) 23:18:48
CString

http://tsushima.2ch.net/test/read.cgi/news/1277208679/

514 :デフォルトの名無しさん:2010/06/23(水) 23:48:00
>>506
BOOL bDefault=FALSE;
size_t nSize = WideCharToMultiByte(CP_ACP, 0, szData/*データ*/, -1, NULL, 0, NULL, &bDefault);
でどう?


515 :名無しさん@そうだ選挙に行こう:2010/07/11(日) 17:09:28
タブコントロールでタブをクリックしたときに、
そのタブが前に来ないようにするのってどうやんの?

516 :名無しさん@そうだ選挙に行こう:2010/07/11(日) 20:16:52
まるちんこ

517 :名無しさん@そうだ選挙に行こう:2010/07/11(日) 23:12:41
300x300pxのピクチャコントロールについて、
・→――


というデフォルトの座標系を


・→――


このように変換したいと考えています。
(原点を左上隅から、(左隅、コントロール中央)に移動し、Y軸を反転させる)
pDC->SetViewportExt(300, -300);
pDC->SetViewportOrg(0, 300/2);
とやってみましたが、Y軸は反転せず、ピクチャコントロールの
上半分も描画されない状態です。どなたか解決方法ご教示お願いします。

518 :デフォルトの名無しさん:2010/07/12(月) 02:59:11
日本語でおk

519 :デフォルトの名無しさん:2010/07/12(月) 03:41:23
WM_TIMERを使って、参考URLにあるタイマーをつくろうと思っているのですが、
WM_TIMERがどうしても見つかりません。どこにあるのでしょうか?
よろしくお願いします。

環境:VC++ 2008, MFC

参考URL:http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/program/C/DialogBase/control/timer/index.htm

520 :デフォルトの名無しさん:2010/07/12(月) 19:43:33
リストビューのアイテムにツリーを使うことってどうすればできますか?
ググってみるとVisual Studioのウォッチウィンドウ云々と出てくるのですが、
まさにそういったことがしたいのです。
ヒントでもよいので、教えていただけると嬉しいです。


>>519
VC++ならクラスビューで、クラスを選択してプロパティ。
プロパティビューの中でメッセージボタンをクリックするとWM_TIMERがあるはずです。

521 :デフォルトの名無しさん:2010/07/12(月) 20:05:52
>>520
こんなの?
http://www.codeguru.com/cpp/controls/treeview/classes/article.php/c13167/Tree-List-Control.htm


522 :デフォルトの名無しさん:2010/07/12(月) 20:12:17
そうです。
色んなサイト見てみたのですけど、
「自前で」と書かれてるものばかりで困ってしまったもので。

523 :デフォルトの名無しさん:2010/07/12(月) 20:14:51
おお。ソースファイルがあるのですね。失礼しました。
読んでみます。
ありがとうございます。

524 :デフォルトの名無しさん:2010/07/16(金) 15:46:11
IPアドレスの変更をアプリで無理でしょうか?

525 :デフォルトの名無しさん:2010/07/16(金) 16:55:40
>>524
おまえの脳みそじゃ無理だな

526 :デフォルトの名無しさん:2010/07/16(金) 18:53:59
address transfer か

527 :デフォルトの名無しさん:2010/07/16(金) 20:44:24
netsh

528 :デフォルトの名無しさん:2010/07/21(水) 08:15:40
>>525
わからないならレスすんなよ

529 :デフォルトの名無しさん:2010/07/21(水) 13:30:54
そう書けば教えてもらえると思ったら甘いよ

530 :デフォルトの名無しさん:2010/07/21(水) 13:34:26
どっかのスレでソース貼ってあったのを見覚えがある

531 :デフォルトの名無しさん:2010/07/21(水) 13:38:58
ip helper apiでググレばおk

532 :デフォルトの名無しさん:2010/07/21(水) 13:47:46
MFCじゃないし

533 :デフォルトの名無しさん:2010/07/23(金) 16:23:27
Windows7 でシャットダウンや再起動を中止させる方法を教えてください。
OnQueryEndSession で FALSE を返しても画面が暗くなり、
終了しないプログラム一覧が表示されてしまいますが、これを回避したいです。

534 :デフォルトの名無しさん:2010/07/23(金) 16:32:45
>>533
MFC関係ないし。
なんとなく文面もムカつくから、スレチとだけ言っておく。


535 :デフォルトの名無しさん:2010/07/23(金) 16:35:45
何がお前をむかつかせるのか

536 :デフォルトの名無しさん:2010/07/23(金) 16:41:36
この暑さのせいだな。

537 :sage:2010/07/28(水) 07:20:24
キーボードアクセラレーターのTranslateAcceleratorが生成した
WM_COMMAND内で、どのアクセラレーターが押されたのか
判別する方法ってない?
もしくは、アクセラレーターに付属のパラメーターをつけて、
WM_COMMANDで取得する方法。

ユーザーが動的に追加していくコマンドとして
一つのCOMMANDを複数のアクセラレーターで共有しているので、
それぞれを判別したい。


538 :デフォルトの名無しさん:2010/07/28(水) 13:29:56
wParamのhighをまだ使ってないならそれで
使ってるなら、lParamでアクセスできるようにして入れるとか?

539 :537:2010/07/28(水) 14:22:33
アクセラレーターの場合、wParamの上位ワードは1で固定らしい。
lParamは0だった。

156 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)