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

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

■MFC相談室 mfc16d.dll■

1 :デフォルトの名無しさん:2006/04/27(木) 15:04:53
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc15d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1131958904/

2 :デフォルトの名無しさん:2006/04/27(木) 15:41:30
マイクロソフト フレームワーク コンポーネント

だと?
舐めるなよゴミ野郎!

3 :デフォルトの名無しさん:2006/04/27(木) 15:48:09
マイクロソフト ファンクション クラスタ
だ、良く見ろボケ

4 :デフォルトの名無しさん:2006/04/27(木) 16:14:46 ?
マイクロソフト フォーミュラ チャンピオンシップ

5 :デフォルトの名無しさん:2006/04/27(木) 16:58:58
麻雀ファイターちあき

6 :デフォルトの名無しさん:2006/04/28(金) 21:06:54
マイクロソフト ファンデーション コンパクト

7 :デフォルトの名無しさん:2006/04/28(金) 21:57:27
MFCでも慣れたら拘束にプログラミングできる?

8 :デフォルトの名無しさん:2006/04/29(土) 00:55:37
ヴィジュアルプログラミング環境なら慣れなくても高速にできるよ!

9 :デフォルトの名無しさん:2006/04/29(土) 13:47:58
VC++6.0のMFCと最近のMFC7.0や7.1はどこが違いますか?
6.0の知識はほとんどそのまま流用できますか?

10 :デフォルトの名無しさん:2006/04/29(土) 13:52:27
MSDNLibrary→開発ツールと言語→Visual Studio .NET→製品ドキュメント→Visual C++→概要→新機能→ライブラリ


11 :デフォルトの名無しさん:2006/04/29(土) 22:39:07
COM開発はもうMFCなしではできない体になってるよ。

12 :9:2006/04/30(日) 02:47:20
>>10
ありがとう
読んでみたけど、6.0と7.0にはそれほど大きな違いなないみたい

13 :デフォルトの名無しさん:2006/04/30(日) 08:34:23
>>12
CString周りがそこそこ違う。
実装レベルで見るとかなり違う。

14 :デフォルトの名無しさん:2006/04/30(日) 18:22:38
マンコ フェラ クリトリス

15 :デフォルトの名無しさん:2006/05/01(月) 17:23:28
>>12
7.0以降、ATL/MFCが統合されて、atlmfcになったって感じなのかな。
正直、単一プロジェクトでMFCとATLをミックスして使う気にはなれんが…。

16 :デフォルトの名無しさん:2006/05/01(月) 17:42:58
全てが統合されたわけじゃなく、CStringとか一部クラスが統合じゃなかったっけ?

17 :デフォルトの名無しさん:2006/05/02(火) 22:57:50
あの、MFCでActiveXコントロールを作ってたら
http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146577850180.jpg
のエラーが出るんですが、

ダイアログに「ActiveXコントロールの挿入」をした際に出ます。

なぜでしょうか?

18 :デフォルトの名無しさん:2006/05/02(火) 23:00:47
マルチ氏ね馬鹿

19 :デフォルトの名無しさん:2006/05/04(木) 20:39:03
CDC::DrawFrameControlでコントロールを描画すると2000スタイルで描画されます。
XPスタイルで描画するにはどうすればいいのでしょうか?

20 :デフォルトの名無しさん:2006/05/05(金) 20:50:15
MFCでActiveXコントロールを作っています。
ListViewのカスタマイズなんですが、
ListViewに表示されるスクロールバー(CScrollBar)のオブジェクトを得るにはどうすればいいのでしょうか?

メッセージマップでOnHScrollやOnVScrollにイベントは着ますが、その引数CScrollBar* pScrollはNULLのままです。

21 :デフォルトの名無しさん:2006/05/06(土) 22:35:17
LPCSTR lpsz;
CString cstr;

cstr = "12345";

lpsz = (LPCSTR)(LPCTSTR)cstr;

ここで、ブレークポイントを入れてlpszの中を見てみると
'1'だけしかありません。
どうして"12345"とすべて表示されないのでしょうか。



22 :デフォルトの名無しさん:2006/05/06(土) 22:52:43
とんでもないことになっちゃうから

23 :デフォルトの名無しさん:2006/05/06(土) 23:03:12
別に問題ないよ

24 :デフォルトの名無しさん:2006/05/06(土) 23:12:41
リソースエジタでIDD_DIALOG1というダイアログボックスを作成して、
プログラムでCDialog d1, d2と定義し、
d1.Create( IDD_DIALOG1 );
d2.Create( IDD_DIALOG1 );
とすることで生じる問題はないのでしょうか?
とりあえず表示はできたのですが。
目的は同じダイアログを複数作成したいということなのですが。



25 :デフォルトの名無しさん:2006/05/06(土) 23:15:39
>>19 テーマ

26 :デフォルトの名無しさん:2006/05/06(土) 23:18:12
>>24
問題ない

27 :24:2006/05/06(土) 23:20:01
>>26
安心しました。IDとタイトルは後から変えることにします。

28 :デフォルトの名無しさん:2006/05/06(土) 23:22:40
他の人が作ったプロジェクトがあるんですが、

szName = (const char *) inputDlg.m_edit;

のキャストでもエラーやメッセージが出ずにビルドがOKになります。
どうしてなのでしょうか?

29 :28:2006/05/06(土) 23:25:04
ちなみに、m_editはCStringです。

30 :デフォルトの名無しさん:2006/05/06(土) 23:31:43
CStringはただのポインタ
うそだと思うなら中みてみろ

31 :デフォルトの名無しさん:2006/05/06(土) 23:37:32
そりゃ演算子さ

32 :28:2006/05/06(土) 23:40:29
でも、私が作ったプロジェクト内だと、

szName = (const char *) inputDlg.m_edit;

はエラーになるのです。

error C2440: '型キャスト' : 'CString' から 'const char *' に変換できません。
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。

33 :デフォルトの名無しさん:2006/05/06(土) 23:46:46
だから環境に合わせてくれるように
LPCTSTRというマクロがある。

34 :デフォルトの名無しさん:2006/05/06(土) 23:50:18
別の人のプロジェクトだと

cstr = "12345";
lpsz = (LPCSTR)(LPCTSTR)cstr;
はlpsz "12345"

となるのですが、

私のプロジェクトだと

cstr = "12345";
lpsz = (LPCSTR)(LPCTSTR)cstr;
はlpsz "1"

となるのです。
なぜなのかがわかりません。


35 :28:2006/05/06(土) 23:59:28
画像で説明しますと、

http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146927530603.jpg

ことです。

36 :28:2006/05/07(日) 00:01:18
文字列を"yyy"で渡したのに、内部で"y"だけとなってしまうので、
違った文字列が設定されてしまうのです。

37 :28:2006/05/07(日) 00:05:50
で、別の人のプロジェクト内で同じ処理をさせると

http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146927892987.jpg

うまく"yyy"として処理されるのです。

なぜ、私のプロジェクトだと、"yyy"が"y"だけとなるのでしょうか?

38 :デフォルトの名無しさん:2006/05/07(日) 00:06:47
おまい、それATLか

39 :28:2006/05/07(日) 00:12:22
そうみたいです。

違う型みたいなんですが
http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146928274145.jpg

定義としては同じ「CString」なんですよ。

40 :28:2006/05/07(日) 00:24:54
処理の形を変えても、
やはり、"y"となります。

http://f42.aaa.livedoor.jp/~imawaka/imgboardphp/src/1146929050374.jpg

41 :28:2006/05/07(日) 00:27:52
どう処理しても、GetBufferを使っても
文字列は"y"としか返さないんですよ。

どうすればよいのでしょうか?

42 :デフォルトの名無しさん:2006/05/07(日) 00:30:57
TCHAR

43 :28:2006/05/07(日) 00:35:12
>>42
TCHARでうまくいきました。
ご迷惑をおかけいたしまして申し訳ございませんでした。

44 :デフォルトの名無しさん:2006/05/07(日) 01:00:08
UNICODEなら CString cstr = "12345"; ここで既にエラーになるんじゃねーのか?
終わった話だけど、ちょっと気になった。

45 :デフォルトの名無しさん:2006/05/07(日) 01:05:17
VS2005はUnicodeを前提としてるのか。

46 :デフォルトの名無しさん:2006/05/07(日) 01:14:07
詳しくは知らんがVS2003まではマルチバイトベースだったはず、
おそらくVS2005はユニコードベースになったんだろ。

47 :デフォルトの名無しさん:2006/05/07(日) 10:04:32
>>44
UNICODE、マルチバイト間を互いに変換するコンストラクタがあるから大丈夫

48 :デフォルトの名無しさん:2006/05/07(日) 10:09:12
>>34
>cstr = "12345";
>lpsz = (LPCSTR)(LPCTSTR)cstr;
>はlpsz "1"

まず最初の (LPCTSTR)cstr は CString::operator LPCTSTR() が呼ばれて文字列の先頭アドレスが返される。
多分UNICODEビルドになっていてLPCTSTRはLPCWSTR、UNICODE文字列なのだろう。
これをLPCSTRにキャストしても内容は変化しない。UNICODE文字列をマルチバイト文字列として解釈することになる。
UNICODEの"1234"はメモリ上では
0x31 0x00 0x32 0x00 0x33 0x00 0x34 0x00 0x00 0x00
となっている。
コレをマルチバイト文字列として解釈すると、2番目の0x00がヌル文字として機能してしまいそれ以降が見えなくなる。
よって
0x31→'1' 0x00→'\0'

"1"
と見えるわけだ。

49 :28:2006/05/07(日) 11:48:27
>>48
なるほど!
納得しました。

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

50 :デフォルトの名無しさん:2006/05/07(日) 16:40:37
ふむふむ

51 :デフォルトの名無しさん:2006/05/08(月) 21:19:18
MFCにて、CButtonクラスを派生して画像ボタンを作成しましたが、
マニフェストを適用していますが、オーナー描画しているボタンだけ
丸みのある表現となりません。

何かスタイルでも設定が必要なのでしょうか?


52 :デフォルトの名無しさん:2006/05/08(月) 21:50:37
丸だろうが三角だろうが四角だろうが好きにすればいい

53 :デフォルトの名無しさん:2006/05/08(月) 22:03:52
>>51
やっぱそこも自分でやらないとだめなんだ。
まったく同じようにするにはどうすればいいんでしょう?

54 :デフォルトの名無しさん:2006/05/08(月) 22:45:03
CString::Format() 関数で、書式制御文字列の部分と可変個の引数を設定
ファイルなどで定義できるようにして、可変個引数の数も任意の数を渡せる
ようにしたいと考えています。
 イメージとしては

LPCTSTR calcStr[2] = {_T("%d + %d + %d + %d"),
               _T("%d + %d + %d + %d + %d")};

CString csTmp;
for(int i = 0; i < 2; i++){
  csTmp.Format(calcStr[i], ????????????);
  TRACE(_T("%s\n", csTmp);
}

 のような感じです。
 このとき、Format()関数で可変個の引数を渡す部分(上記????????????の部分)を
どのようにすればよいか、色々探してみたのですが手段が分かりませんでした。
 どなたかご存知の方いらっしゃいましたらご教授願えませんでしょうか。


55 :デフォルトの名無しさん:2006/05/08(月) 22:55:31
実行時に引数の個数やらが変わるとなると、アセンブラでガリガリ書くしかないんじゃないかな?

56 :デフォルトの名無しさん:2006/05/08(月) 22:57:26
数が多い分には問題ないよ
書式で指定した分しか使わないから

57 :デフォルトの名無しさん:2006/05/09(火) 03:43:54
char *calcStr = "@A + @B" ;
int A = 1 ;
int B = 2 ;

CString csTmp;
int i = 0 ;
while(i < strlen(calcStr)){
 if(calcStr[i] == '@'){
  i++ ;
  CString s ;
  switch(calcStr[i]){
   case 'A' :
    s.Format("%d", A) ;
    csTmp += s ;
    break ;
   case 'B' :
    s.Format("%d", B) ;
    csTmp += s ;
    break ;
  }
  i++ ;
 }else{
  csTmp += calcStr[i] ;
  i++ ;
 }
}
テキトー

58 :54:2006/05/09(火) 23:33:05
 いろいろアドバイスありがとうございます。
>56 氏の方法で試してみることにします。


59 :デフォルトの名無しさん:2006/05/14(日) 22:00:18
APIの勉強をせずにMFCの勉強をはじめたんですが
やはりAPIの勉強をしてからのほうがいいでしょうか?

そのうちデータベースと組み合わせていきたいんですが
いい書籍あったら教えてください

60 :デフォルトの名無しさん:2006/05/14(日) 22:14:18
>>59
大丈夫、MFCを使いこなせるようになる頃には、いやでも大概のAPIの知識は身につく。
書籍に関しては書籍スレへ。

61 :デフォルトの名無しさん:2006/05/15(月) 00:08:50
>59
APIの勉強というより、Windowsの動作の仕組みを勉強しておけば
MFCでもAPIでもわかりやすくなると思う。

62 :デフォルトの名無しさん:2006/05/15(月) 15:18:10
リストボックスに文字列ではなく変数を表示させる方法を教えてください

63 :デフォルトの名無しさん:2006/05/15(月) 15:21:40
>>62
CString

64 :デフォルトの名無しさん:2006/05/15(月) 15:22:01
イヤです

65 :デフォルトの名無しさん:2006/05/15(月) 15:31:11
俺のシックスセンスが、>>62 の「変数」は「数値」の事だと告げている。

66 :デフォルトの名無しさん:2006/05/15(月) 15:35:01
うーん書式がどんな感じですかね

ボタンをクリックしたら
変数をリストボックスに追加していきたいんですが

初心者ですいません a=5だとしたら5をリストに追加したいです

67 :デフォルトの名無しさん:2006/05/15(月) 15:37:02
え、そんなレベルの人がMFC使えるんだ
ちょっとびっくり

68 :デフォルトの名無しさん:2006/05/15(月) 15:40:00
すいません…
Cやってから最近MFCやりはじめたんですが…

printf関数の使い方とはもちろん違いますよね…

69 :デフォルトの名無しさん:2006/05/15(月) 15:41:01
でもそれがMFCなんだよね

70 :デフォルトの名無しさん:2006/05/15(月) 15:43:03
リストに文字を追加ならできるんですが数値はわからないんです

71 :デフォルトの名無しさん:2006/05/15(月) 15:44:49
だからCString使えって言ってるじゃん

CString ss;
int a = 5;
ss.format("%d", a);
xxx.AddString(ss);

72 :デフォルトの名無しさん:2006/05/15(月) 15:47:03
ありがとうございます
ss.formatをしないといけないんですね
勉強になりました

73 :デフォルトの名無しさん:2006/05/15(月) 16:05:44
CString慣れなかったらwsprintfでもいいけど

74 :デフォルトの名無しさん:2006/05/15(月) 19:46:14
C言語どのくらいできればいいですか?

75 :デフォルトの名無しさん:2006/05/15(月) 20:00:21
自分で全て解決できるくらい

76 :デフォルトの名無しさん:2006/05/16(火) 00:25:18
MFCの使い方を覚えればC言語は気にしなくていいぞ
このスレ的には

77 :デフォルトの名無しさん:2006/05/16(火) 23:23:18
UNICODE環境下でプログラムしてるんですが.
CString -> std::string


std::string CStringToString(CString *str){
LPTSTR lpt;
lpt = str->GetBuffer();

std::string Restr;
Restr.erase();

for(int a=0; a<str->GetLength(); a++){
Restr.append((char*)lpt);
lpt++;
}

Restr.append("\0");
str->ReleaseBuffer();
return Restr;
}
これで出来ったぽいんですが.
逆のstd::string->CStringってどうやるんですか?

mbstowcs
とかいろいろ調べてますが,うまくいかない...

78 :デフォルトの名無しさん:2006/05/16(火) 23:39:36
>>77
ちゃんとoperator = () が定義されるはずだから
代入だけでMB <-> UNICODEは勝手にやってくれると思うよ。

79 :デフォルトの名無しさん:2006/05/16(火) 23:48:55
>>78
CString cstr;
std::string str = "test";

cstr = str;

ですか?

error C2679: 二項演算子 '=' : 型 'std::allocator<_Ty>::value_type' の右オペランドを扱う演算子が見つかりません (または変換できません)。
with
[
_Ty=std::string
]

という風に返ってきます.

後検証した結果,上で書いたやつも全角文字を使った瞬間正常動作しなくなりました...

全角文字に対応した
CString <--> std::String
の方法どなたかおしえていただけないでしょうか・・・

80 :デフォルトの名無しさん:2006/05/16(火) 23:53:04
>>79
すまそ。適当にやった。operator =()が定義されてるのは
Cスタイルの文字列配列だった。正しくはこうだ。
CString cstr;
std::string str;
cstr = str.c_str();
str = CStringA(cstr);

81 :デフォルトの名無しさん:2006/05/17(水) 00:02:54
>>80

動きました...
一日悩んでたことが数行で解決したのですっごい脱力です...

本当にありがとうございました

82 :デフォルトの名無しさん:2006/05/23(火) 16:47:55
CListCtrlを継承した
SDIアプリケーションで
カラム作るのに最適(一回しか通らない)な
イベント、オーバーライド
って何ですか?

83 :デフォルトの名無しさん:2006/05/23(火) 16:51:10
CListCtrlを継承?
CListViewじゃないの?

84 :デフォルトの名無しさん:2006/05/23(火) 16:52:12
そうでした


85 :デフォルトの名無しさん:2006/05/23(火) 17:00:53
OnCreateでいいじゃん

86 :デフォルトの名無しさん:2006/05/23(火) 17:17:09
普通、OnInitialUpdateではあるまいか

87 :デフォルトの名無しさん:2006/05/23(火) 17:20:10
OnInitialUpdateって、新規作成ごとに呼ばれるPO

88 :デフォルトの名無しさん:2006/05/23(火) 17:25:13
OnCreateじゃ実体が存在しないのでは?

89 :デフォルトの名無しさん:2006/05/23(火) 17:28:05
とりあえず
OnInitializeUpdateで初期化フラグつけて作ることにしました。
引き続き、いい方法あったら教えてください。

90 :デフォルトの名無しさん:2006/05/23(火) 18:54:08
OnCreate ウィンドウが作成された後
OnInitialUpdate ドキュメント関連付け後

どっちも新規作成ごとに呼ばれる

91 :デフォルトの名無しさん:2006/05/24(水) 13:03:49
SDI(CEditview)を使っているんですが
行がいっぱいになったら自動でスクロールバーがでるのはいいのですが
位置も最下段にしたいばあいはどうしたらよかとですか?

int nMinPos;
int nMaxPos;
this->GetScrollRange( SB_VERT, &nMinPos, &nMaxPos );
this->SetScrollPos( SB_VERT, nMaxPos );

こうやってかいたけど、だめだーた・・・

92 :デフォルトの名無しさん:2006/05/24(水) 13:59:16
SB_BOTTOM

93 :デフォルトの名無しさん:2006/05/24(水) 14:02:55
>>91
//参考までに。EditViewは使ったことないから知らない
void scrollToBottom(CEdit & edit)
{
edit.SetRedraw(false);
edit.LineScroll(edit.GetLineCount());//最後までスクロール
edit.LineScroll(-1);//改行で終わると最後が空行なので戻す
edit.SetRedraw();
}

94 :デフォルトの名無しさん:2006/05/25(木) 03:12:57
ここでいいのかな?

プログラミング Microsoft Visual C++ .NET Vol.1 基礎編、Vol.2 活用編
vol1は難なく読めたんだがvol2が最初からわからん・・・
一番最初のCOMシュミレーションの所だけは理解したつもりだけど
COMのところがさっぱりわからん。ウイザードをどう使えばインターフェースが作れるんだろう?

あのCOMシュミレーションのMETHOD_PROLOGUEってhas-aの継承に対するdynamic_castみたいな事を
やってるんだよなぁ、多分。DYNAMIC_DOWNCASTかな?うまく言えないけど。よくわからん

95 :91:2006/05/25(木) 11:52:17
>>93

参考にさせていただいてなんとか思い通りの動きになりました!
ありがとうございました。

96 :デフォルトの名無しさん:2006/05/25(木) 13:32:16
質問です。

チェックボックスがフォーカスを受けると、フォーカス枠はCaption文字列を囲むのが
通常の動作のようですが、ボックス全体を囲むフォーカス枠を表示したりする方法を
ご存知でしたら教えてください。

Captionの文字列を無しにしたらフォーカス枠自体が描画されなくなってしまって
困ってしまいました。

よろしくお願いします。

97 :デフォルトの名無しさん:2006/05/25(木) 14:50:15
DrawFocusRectとか

98 :96:2006/05/25(木) 16:59:49
なるほど。
やぱーり自分で描いてあげるんですね。
ありがとうございました。


99 :デフォルトの名無しさん:2006/05/26(金) 11:24:34
ViewでDocumentを見たいときにはGetDocument()すればいいのですが、
同じようにDocからFrameを見たいいときにはどうすればよいのでしょう?
Frameのメソッド呼び出したり、Frameのコントロールにアクセスしたいのです。

100 :デフォルトの名無しさん:2006/05/26(金) 11:31:57
AfxGetMainWnd()

101 :デフォルトの名無しさん:2006/05/26(金) 11:36:37
それをCMainFrame* にキャストすればいいってことですか?

102 :99:2006/05/26(金) 11:41:14
やったらできました、ありがとございますー

103 :デフォルトの名無しさん:2006/05/26(金) 15:31:19
スレ違いだったら誘導してもらえると助かります。

VC6でMailSlotを使おうとしているのですが、非同期読み込み
をさせたくて、以下のようなコードを書きました。

---
ReadFileEx(m_hSlot, Buf, 4096, &overlapped, NULL);
Rsts = WaitForSingleObjectEx(m_hSlot, nWait, FALSE);
---

が、タイムアウト時間を十分大きく取った上で、Wait中にデータ
を投げてもWaitが解除されません。(結局タイムアウトで抜ける)

ループで回してやると、次の回ではWaitForSingleObjectExはすぐ
抜けてくれます。

MailSlotではこういう使い方は出来ないんでしょうか…。

104 :デフォルトの名無しさん:2006/05/27(土) 23:39:27
OCX内の関数Aから、DLL内の関数Bを呼び出し、その関数BからDLL内の関数Cを呼び出すと、
OCXの登録ができなくなりますが、

それはなぜでしょうか?

OCX
void FuncA()
{
FuncB();
}

DLL
void FuncB()
{
FuncC();
}

DLL
void FuncC()
{

}

105 :デフォルトの名無しさん:2006/05/29(月) 16:57:39
VC6で印刷をしたいのですが、
StartDoc()EndDoc()など行って、印刷をできるようにはなったのですが、
TextOut()のX座標Y座標の計算の仕方がわかりません。
論理フォントのlfHeightの分だけプリンタのY座標を増やしたいのですが…


106 :デフォルトの名無しさん:2006/05/29(月) 17:35:48
lfHeightの分だけY座標を足してください。


107 :105:2006/05/29(月) 18:26:53
CreateFont()で作ったフォントをプリンタのDCに選択したら、
lfHeightだけ移動すればうまくいくようになりました。
プリンタの既定のフォントを
pPrintDC->GetCurrentFont()->GetLogFont(&logFont);
で取得したのですが、この高さではうまくいきませんでした。

108 :105:2006/05/30(火) 17:29:47
印刷で全角文字と半角文字が混じっていると罫線がずれてしまいます。
全角文字の幅をきっかり半角文字の2倍にするにはどうすればいいでしょうか。
現在、lfFaceNameは

109 :デフォルトの名無しさん:2006/05/30(火) 18:17:01
罫線文字で罫線を引こうとするなよ。

110 :デフォルトの名無しさん:2006/05/30(火) 20:56:00
途中で送るの、流行ってんのかなw

>>108
9ポイントとか12ポイントとか、そういう 3 の倍数じゃないと
ずれるとかいう話を聞いた。
(10.5 でもいいんだっけ?)

111 :デフォルトの名無しさん:2006/05/30(火) 21:34:17
それMFC限定か?

112 :デフォルトの名無しさん:2006/05/30(火) 22:49:31
>>110
間違い。
デバイス単位で「全角文字」の幅が偶数になるようにしなけりゃ
ならんので、そんな単純な話にはならない。

113 :105:2006/05/31(水) 09:29:30
罫線を罫線文字で書きたかったのですが、解決が難しそうなのでLineToで線を引くことにします。
どんどん深みにはまって行くな…。印刷ぐらいメモ帳でしてほしい。

114 :デフォルトの名無しさん:2006/05/31(水) 11:10:10
Windowのメモ帳に印刷機能ついてるはず。
印刷で全角文字と半角文字が混じっていても
罫線がずれないようにしたいという質問なら
PC初心者板で聞けば回答が得られるかも

115 :デフォルトの名無しさん:2006/05/31(水) 11:30:59
>>105
文字情報にできているのなら、一旦テキストファイルに落としてから印刷要求つきでメモ帳を起動すればできなくもない。

116 :デフォルトの名無しさん:2006/05/31(水) 11:38:09
それにしても、メモ帳が使うフォントをコントロールできなきゃ
問題解決にはならんだろ。

117 :デフォルトの名無しさん:2006/05/31(水) 15:11:47
ちゃんとずれないで印刷できた。
でもプログラミングと関係ない。

118 :デフォルトの名無しさん:2006/05/31(水) 21:41:34
初心者ですみません。

新しいウインドウを生成するにはどうしたらいいのでしょうか?
子ウインドウってやつですかね?

119 :デフォルトの名無しさん:2006/05/31(水) 21:45:45
スレ違い

120 :デフォルトの名無しさん:2006/06/03(土) 01:02:46
visual studio .netみたいなドッキングウィンドウのコントロールって
どこで配布してるの?

lunascapeでも似たようなドッキングウィンドウを使ってるみたいなんだけど?

121 :デフォルトの名無しさん:2006/06/03(土) 01:18:55
昔、codeguruでみたな、ほかにもあったと思うけど。

122 :121:2006/06/03(土) 01:44:49
>visual studio .netみたいな
自動的に隠れたりするってこと? なら知らない

123 :デフォルトの名無しさん:2006/06/03(土) 10:06:34
auto hideとタブ化できるのってMSにしかないんでは?
さっさと標準コントロールにしてほしい

124 :デフォルトの名無しさん:2006/06/03(土) 10:12:05
Visual Studio .net 2005 でもMFCを使ったネイティブプログラムを作れますか?

125 :デフォルトの名無しさん:2006/06/03(土) 10:12:42
予算次第

126 :デフォルトの名無しさん:2006/06/04(日) 17:18:30
DirectXを使ってWindowsゲームを開発する場合でもMFCを利用するのが一般的ですか?

127 :デフォルトの名無しさん:2006/06/04(日) 18:42:38
>>126
MFCでってのが一般的とは言えない、作りたいものによるだろうが

128 :デフォルトの名無しさん:2006/06/05(月) 00:53:35
MFCを勉強することは無意味ですか?

129 :デフォルトの名無しさん:2006/06/05(月) 01:18:54
さあ?自分で判断できないようなら何やっても無意味なのでは?

130 :デフォルトの名無しさん:2006/06/06(火) 16:27:27
.NET2002のMFCでデータベースの表示と操作するようにするにはどうすればいいですか?

131 :デフォルトの名無しさん:2006/06/06(火) 17:27:18
>>130
入門書を買ってきて勉強しましょう。

132 :デフォルトの名無しさん:2006/06/06(火) 17:48:23
買ったんですけど書いてないです
SQLサーバーに置いているデーターベースを表示と操作するプログラムを作りたいんですが
ほかの本をみても2003からしか対応してなくて困ってるんです

133 :デフォルトの名無しさん:2006/06/06(火) 20:46:25
MSDNにサンプルいっぱいあるし、
MFCのデーベース用のクラスの名前で検索すれば見つかるだろう。

134 :デフォルトの名無しさん:2006/06/07(水) 07:16:42
URLは?
本読めとかも本の名前言ってないし
ここほんとにMFCできるやついんの?
ただの知ったかの集団か

135 :デフォルトの名無しさん:2006/06/07(水) 09:21:37
自分で検索すらできないレベルじゃな

136 :デフォルトの名無しさん:2006/06/07(水) 09:27:34
検索しても無いからここ来てるんだろ

137 :デフォルトの名無しさん:2006/06/07(水) 09:40:09
たまに検索にひっかかりにくい言葉もあるけど
これは簡単に見つかるな
いったいなにがわからないのか理解不能

138 :デフォルトの名無しさん:2006/06/07(水) 10:14:34
msdnはわかりにくい

139 :デフォルトの名無しさん:2006/06/07(水) 21:26:41
MFCは隠れている部分が多くて分かりにくい
しかし、SDKは面倒くさい

140 :デフォルトの名無しさん:2006/06/07(水) 21:32:39
MFCのSDIのViewの部分でD&Dを実現するにはどうしたら良い?
******Viewクラスのどのイベントを使えばいいのか分からない
やりたいことはViewに描いた図や画像をD&Dで自由に動かせるようにしたいってこと
今、マウス操作の簡単なゲームを作成しているんだが、D&Dの部分で躓いている

141 :デフォルトの名無しさん:2006/06/07(水) 22:25:18
それたぶんD&Dじゃなくてただのドラッグだろ

142 :デフォルトの名無しさん:2006/06/07(水) 23:38:54
普通にキャプチャーするだけだろ

143 :デフォルトの名無しさん:2006/06/08(木) 00:13:42
配列の最大値を取得するにはどうしたら良い?
つまり、

int hoge[100];

って配列だったら 100 って値を取得したいんだ
Java だったら普通に Length で取得できるんだが・・・

144 :143:2006/06/08(木) 00:15:01
何か関数とかがあれば教えて欲しい
なければやり方を教えてください

145 :デフォルトの名無しさん:2006/06/08(木) 00:25:44
sizeof(hoge)/sizeof(*hoge)

146 :デフォルトの名無しさん:2006/06/08(木) 00:29:08
>>145
ありがとう!

147 :デフォルトの名無しさん:2006/06/08(木) 00:40:58
もう一つ、配列のサイズを動的に変更するにはどうしたら良い?
例えば、

int hoge[100];

ってなっているやつに 101 個以上のデータを格納できるようにしたい
メモリ系は苦手なので関数があれば嬉しいんだけどな・・・

148 :デフォルトの名無しさん:2006/06/08(木) 01:10:15
CArrayとかCListはだめなの?

149 :デフォルトの名無しさん:2006/06/08(木) 01:39:14
vector

150 :デフォルトの名無しさん:2006/06/08(木) 09:01:24
>>148
今時そんな屁の足しにもならないもん使うなよ。

151 :デフォルトの名無しさん:2006/06/08(木) 14:16:49
親ウィンドウA→子ウィンドウB→子ウィンドウCという関係で
子ウィンドウCでメッセージが発生したとき、
PreTranslateMessageを使うと
親ウィンドウAのPreTranslateMessage→子ウィンドウBのPreTranslateMessage→子ウィンドウCのPreTranslateMessage
という順序で呼ばれ、途中でTRUEが返されればそこで止まる、
という理解でよろしいのかしらん?

152 :デフォルトの名無しさん:2006/06/09(金) 01:22:30
>>151
逆。子ウィンドウCが最初で、TRUEが返されるまで親を辿っていく。

153 :デフォルトの名無しさん:2006/06/10(土) 18:59:00
あるスレッドから作られたCDocumentの
UpdateAllViews(NULL)を別のスレッドから呼んでやると
実行時エラー?が出るんだがどうしたらいい?


154 :デフォルトの名無しさん:2006/06/10(土) 19:30:38
>>153
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_multithreading.3a_.programming_tips.asp

155 :デフォルトの名無しさん:2006/06/10(土) 19:43:16
>>154
読んでみる。
アリガト

156 :デフォルトの名無しさん:2006/06/10(土) 20:44:24
PostThreadMessageで適切なThreadに
「UpdateAllViewsを呼んでね」
って独自のメッセージを送る

157 :デフォルトの名無しさん:2006/06/10(土) 21:31:04
>>156
おお、そのほうがよさげです。
ども。


158 :デフォルトの名無しさん:2006/06/11(日) 13:59:37
>>152
サンクス

159 :デフォルトの名無しさん:2006/06/12(月) 09:27:04
>>147
delete [] hoge;
hoge = new int[101];

160 :デフォルトの名無しさん:2006/06/12(月) 17:07:14
色々試したのですが分からないので教えてください。

開発環境eVC++4.0でCStaticに表示される文字を
180度回転させた状態で表示したいのですが上手くいきません。
以下、OnInitDialog内での記述です。

  // this->m_Test1はCStatic
  CRect workRect;
CFont* pTest1Font;
LOGFONT logFont;
CString strText = "TODO:This is Test courier New";
memset(&logFont, 0, sizeof(LOGFONT));

this->m_Test1.GetWindowRect(workRect);
this->m_Test1.ScreenToClient(workRect);

pTest1Font = new CFont;
lstrcpy(logFont.lfFaceName, _T("courier New"));
logFont.lfEscapement = 1800;
pTest1Font->CreateFontIndirect(&logFont);
this->m_Test1.SetFont(pTest1Font);
this->m_Test1.SetWindowText(strText);

こうするとCStaticの表示領域外で文字が回転しているらしく
上手く領域内に表示出来ません。
どうすれば宜しいのでしょうか?
お願いします。

161 :デフォルトの名無しさん:2006/06/12(月) 17:29:33
どうにも出来ないよ。

162 :デフォルトの名無しさん:2006/06/12(月) 19:44:33
わざわざ.GetWindowRect ScreenToClientしてるのに
なんでSetWindowTextなんだろうね
なんかのサンプルいじったのかな?

163 :105:2006/06/13(火) 16:40:10
表を印刷する処理を作ったのですが、
違うプリンタで印刷した場合、罫線の位置がずれてしまうそうなのです。
(不思議なことに横線はずれていないのに縦線だけずれています。)
今、SetMapMode()の引数にMM_TEXTを指定しているのですが、
MM_LOMETRICなど試してみましたが、紙に何も印刷されませんでした。
MM_TEXTで印刷した場合のLineToの座標の意味について教えて下さい。

164 :デフォルトの名無しさん:2006/06/13(火) 16:58:16
各マップモードの説明(特にY座標の方向)は読んだか?


165 :105:2006/06/13(火) 17:14:04
>>164
MM_LOMETRIC それぞれの論理単位は、0.1 mm にマップされます。
x 座標の正方向は右、y 座標の正方向は上になります。
MM_TEXT それぞれの論理単位は、1 デバイス ピクセルにマップされます。
x 座標の正方向は右、y 座標の正方向は下になります。

・・・上下逆になるんですね。ありがとうございます。

166 :デフォルトの名無しさん:2006/06/13(火) 17:59:09
FormViewにタブはって、タブ毎にダイアログを張ってます。
で、そのダイアログにリストビューを張ってるんですが、

FormViewに何かのウィンドウが乗っかって
リストビューの部分が隠されると、再描画がされないのか
リストビューが埋まってしまいます。

他のウィンドウがのかってもちゃんとリストビューが埋まらないようにしたいんですが
どうしたらいいでしょ〜か。。。

167 :デフォルトの名無しさん:2006/06/13(火) 18:09:03
>>166
再描画されない原因を突き止めろ

168 :デフォルトの名無しさん:2006/06/13(火) 18:50:01
タブ毎というこは重なってるんだ

169 :デフォルトの名無しさん:2006/06/13(火) 20:31:53
SysListView32 コントロールに対して、
LVS_OWNERDATA および LVS_EX_CHECKBOXESスタイルを
設定した場合にチェックボックスが描画されないという
問題にぶち当たってしまい、Web を検索したところ同様の悩みを
持ってる人はいるようなのですが解決方法がどこにも・・・

ご存知の方いらっしゃいますでしょうか?

[参考URL]
ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200505/05050038.txt
ttp://www.codeguru.com/forum/archive/index.php/t-288682.html
ttp://www.codecomments.com/archive372-2005-4-450031.html


170 :デフォルトの名無しさん:2006/06/14(水) 09:52:58
VC++6でプロジェクト名Ieでダイアログベースでプロジェクト作った

ieDlg.cppに
CIeDlg::~CIeDlg(void)
{
CoUninitialize();
}

と書いてデストラクタを追加しようとしたら、

error C2084: 関数 '__thiscall CIeDlg::~CIeDlg(void)' はすでに実体を持っています。

となる

デストラクタが二重宣言されているんだなと思い
ieDlg.cppをくまなく見てみたが、どこにも他には宣言されていない

何がまずいのでしょうか?

171 :デフォルトの名無しさん:2006/06/14(水) 10:08:55
>>170
まさかとは思うが一応念の為に聞いてみる。
ieDlg.hにあるなんて落ちじゃないよな?

172 :170:2006/06/14(水) 10:23:47
>>171
ieDlg.hでクラス定義がされてるんだね
見てみたんだけどコンストラクタはそこで宣言されているけど
デストラクタは宣言も定義もされていないんだよね

173 :デフォルトの名無しさん:2006/06/14(水) 10:36:03
>>172
んじゃあれだ、宣言なしに関数を定義しようとしただろ。
クラス定義内にデストラクタの宣言は必要だよ。
#で、その程度のデストラクタだったらクラス定義内で定義してしまうのもあり。

174 :172:2006/06/14(水) 10:41:36
>>173
それだ!!
ieDlg.h内でコンストラクタのすぐ下に
~CIeDlg();
と書いたらうまくいきました
本当に、ありがとうございました!!!

175 :デフォルトの名無しさん:2006/06/14(水) 11:04:00
>>172
>デストラクタは宣言も定義もされていないんだよね
ぅおぃ!

176 :172:2006/06/14(水) 13:06:57
すみません。また躓きました。
VC6でダイアログベースで作業してるんですが

AfxConnectionAdviseを使おうとしたら
そんなもん定義されてないといわれます
ヘルプみたのですがAfxConnectionAdviseのページには
どのヘッダをインクルードすればよいか記述されていませんでした
海外のMSDN見てみたのですが同じく書いてありませんでした
なんで〜〜

177 :172:2006/06/14(水) 13:08:48
やはり私のようなスカは.NETFrameworkでもいじって
遊んでるのがちょうどよいようです
失礼しました

178 :デフォルトの名無しさん:2006/06/14(水) 14:05:19
そりゃ.NET Frameworkに失礼だ

eclipseでjavaでもいじった方がいいと思う

179 :172:2006/06/14(水) 16:10:15
AfxConnectionAdvise(
まで入力するとちゃんとヒントツールチップが出るんだけど
引数埋めてビルドすると
AfxConnectionAdvise は定義されていない識別子だと出る
Afx.*はMFCのグローバル関数だそうだけど
VC6じゃ使えないのだろうか?
AfxConnectionAdviseでぐぐってもそんなエラーに関する情報は見つからない


180 :デフォルトの名無しさん:2006/06/14(水) 16:19:48
使ったことないけど確かにVC6に存在する。

181 :デフォルトの名無しさん:2006/06/14(水) 16:51:29
う〜ん
普通のMFC Application(exe)じゃ使えないのかなぁ

182 :デフォルトの名無しさん:2006/06/14(水) 16:56:24
ヘッダの中からAfxConnectionAdviseを検索すればいいだろ。

183 :デフォルトの名無しさん:2006/06/14(水) 17:05:54
だよなぁ…
で探してみたら、afxctl.h に定義されてる。stdafx.h に
  #include <afxctl.h> // MFC の ActiveX コントロール
がないなら入れとけ。

184 :172:2006/06/14(水) 17:16:07
>>183
やったあああ!
それでうまくいきました
ダイアログベースではデフォルトで追加されないんでしょうかね

185 :デフォルトの名無しさん:2006/06/14(水) 17:27:51
普通にActiveX コントロール貼り付ければ通りそうなもんだが

186 :デフォルトの名無しさん:2006/06/14(水) 17:58:54
>>185
新規にダイアログベースのMFCアプリケーションプロジェクト作成して、
ダイアログに適当なActiveXコントロールを、
ダイアログエディタ上でダイアログ上で右クリックして挿入してみたが、
StdAfx.hには#include <afxctl.h>は追加されなかったです

187 :デフォルトの名無しさん:2006/06/15(木) 15:06:44
ハンドルが欲しいんですが、
CMainFrame のファイルでは HWND hWnd = m_hWnd; で取れたんだけど
他のファイルでは m_hWnd は"定義されていない識別子です"とかのコンパイルエラーに
なってしまうのはなぜ?

188 :デフォルトの名無しさん:2006/06/15(木) 15:37:06
m_hWndはあるクラスのメンバ変数

189 :187:2006/06/15(木) 17:15:47
CMainFrameクラス以外では扱えない?

190 :デフォルトの名無しさん:2006/06/15(木) 17:20:16
馬鹿かお前

191 :デフォルトの名無しさん:2006/06/15(木) 17:23:34
>>189
C++のクラスが分かってないのか、MFCを調べる気がないのか知らんけど、
どっちか足りないと思う方を勉強してこい

192 :デフォルトの名無しさん:2006/06/16(金) 01:46:41
>>187
CMainFrameのヘッダファイルで宣言されているm_hWndを
別の、例えばCViewとかから使いたいなら
CView.cppでCMainFrameのヘッダファイルをインクルードして
m_hWndをextern宣言してやればいい、と思うけどどう?

193 :デフォルトの名無しさん:2006/06/16(金) 08:30:42
>>192
妄想するのは勝手だけど

194 :デフォルトの名無しさん:2006/06/16(金) 09:26:29
>>187
スコープが見えてこないからなんとも言えんが…
ヘッダをインクルードして
CMainFrameのポインタ取って来て
そっから適当に搾り出してきたらイイジャナイカ。
てかC++に対して基礎がよくわかってないようですが…

195 :187:2006/06/16(金) 13:19:09
解決しました。
お騒がせしました。

196 :デフォルトの名無しさん:2006/06/18(日) 19:17:43
マルチスレッドをつかってサーバーを組み立ててるんですが
メインスレッドで生成したダイアログのリストボックスにサブスレッドから
InsertStringすると実行時にDebug Assertion Errorが発生してしまいます。
メインスレッドで文字列挿入してみたら上手くいきました
どうすればいいのかさっぱりわかりません・・・どなたかご教授お願いします

環境:VisualStudio.NET2003 VC++ MFCアプリケーション

197 :デフォルトの名無しさん:2006/06/18(日) 19:20:16
>>196 ソースによる

198 :196:2006/06/18(日) 19:37:16
詳しく書くと

((CMainDlg *)AfxGetMainWnd())->AddLog
これでサブスレッド、別クラスから下のAddlogを呼んでます。

void CMainDlg::AddLog( char* format, ... )
{
  static char buf[512];
  vsprintf( buf, format, (char *)(&format+1) );
  lsLog.InsertString( -1, buf ); ←ここでDebugAssertionError
  lsLog.SetCurSel( lsLog.GetCount() - 1 );
}

最近MFCいじり始めたばかりで、根本的何かが間違ってる気がするんですが、おねがいします

199 :デフォルトの名無しさん:2006/06/18(日) 21:10:59
> (char *)(&format+1)
こりゃないだろ。

200 :デフォルトの名無しさん:2006/06/18(日) 21:35:13
IEやFirefoxの履歴バーに表示される×ボタンって、
ツールバーのようにフォーカスを持たないですけど、
あのようなボタンってダイアログ内には置けないんでしょうか?

201 :デフォルトの名無しさん:2006/06/18(日) 21:50:44
おける

202 :デフォルトの名無しさん:2006/06/19(月) 21:20:14
mfcでネットワークを使ったアプリを作っているのですが、スレッドとGUIコントロールとの
やりとりのし方ってどうやるのでしょうか?
今はスレッドからListCtrlやEditCtrlに直接
SetItemやらSetWindowTextやらやっています。このやり方はマズイ?

203 :デフォルトの名無しさん:2006/06/19(月) 21:32:40
スレッドセーフなプログラムをを心がければOK
ヒント:排他処理

204 :デフォルトの名無しさん:2006/06/19(月) 22:16:28
>>202
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_multithreading.3a_.programming_tips.asp
ここ、テストに出るからよく読んどくように。

205 :デフォルトの名無しさん:2006/06/20(火) 05:41:38
ListViewから派生したクラスの OnInitialUpdate() 内でInsertColumn()を
呼び出してexplorerみたいなカラムを追加しようとしました。

HELPにある CListView::GetListCtrl のサンプルコードを、まんまクラス名
だけ変えて実行してみましたが、見た目には何も追加されていません。

デバッガでみると、イベントから呼び出されて問題なく実行しているのですが、
見た目はカラムを追加してないのと同じ状態です。

実際にリストには何も追加していませんが、そのせいなのでしょうか?

206 :デフォルトの名無しさん:2006/06/20(火) 09:42:38
カラムだけでもでるよ

207 :デフォルトの名無しさん:2006/06/20(火) 09:51:10
>>206 レスサンクス。
listviewをスプリットウィンドウに貼り付けてあるのですが、これがまずいのでしょうか?

208 :デフォルトの名無しさん:2006/06/20(火) 09:53:42
たぶんカラムを使わないスタイルになってる

209 :デフォルトの名無しさん:2006/06/20(火) 10:42:33
今、WinXP用アプリケーションの設計中です。
ドキュメント/ビュー アーキテクチャについての質問です。
ドキュメントクラスでSTLコンテナを使用していた場合、Serialize()で>>や<<を使ってのファイル入出力は可能でしょうか?

210 :デフォルトの名無しさん:2006/06/20(火) 10:44:10
>>208 PreCreateWindow()内では、

cs.style |= LVS_LIST;

にしてます。

211 :デフォルトの名無しさん:2006/06/20(火) 11:00:42
>>208 なんやらわかりませんが、サンクス。
cs.style |= LVS_REPORT にしたら表示されました!

HELPみても、説明がループしてたりリンク切れしてて、なんだかよくわかりませんね。


212 :デフォルトの名無しさん:2006/06/21(水) 21:29:52
VC++でつくったアプリケーションを他のPCで実行すると、

mfc??.dllが必要です。

と表示されます。
MFCのライブラリがないパソコンで動かすには
どうしたらいいでしょうか?

213 :デフォルトの名無しさん:2006/06/21(水) 21:35:44
static link

214 :デフォルトの名無しさん:2006/06/21(水) 21:54:28
>>212 ネットで落ちてるから拾って来い


215 :デフォルトの名無しさん:2006/06/21(水) 22:41:35
すたてぃっくりんく

216 :デフォルトの名無しさん:2006/06/21(水) 23:57:28
性的結合

217 :デフォルトの名無しさん:2006/06/22(木) 15:56:57
>212
mfc71dll.lzhでユーザーに探させるか、DLLを同梱して配布する。
ベクターとかにあるはず。

ビルドするときスタティックリンクすることもできるけど、
naf???.libが無いみたいなエラーが出るときはプロフェッショナル版じゃない
環境だろうから、スタティックリンクは無理。
と、丁度調べてたので書いてみる。

218 :212:2006/06/22(木) 16:15:35
ありがとうございます
スタティックリンクのやり方を教えてください

219 :デフォルトの名無しさん:2006/06/22(木) 16:19:32
教えて君五大要素

1.調べない
2.読まない
3.試さない
4.理解力が足りない
5.人を利用することしか頭にない

220 :sage:2006/06/23(金) 03:20:00
申し訳ありませんが知らないなら黙っていてください

221 :デフォルトの名無しさん:2006/06/23(金) 07:42:07
>>219
役立たずの能なしは氏ね

222 :デフォルトの名無しさん:2006/06/23(金) 09:17:05
>>221
一番の役立たず乙

223 :212:2006/06/25(日) 21:23:33
スタテッィクリンクやり方わかりました。
すごく簡単でした。

224 :デフォルトの名無しさん:2006/06/25(日) 22:57:09
報告乙

フライトプラン見ました

225 :デフォルトの名無しさん:2006/06/28(水) 01:22:09
報告乙

仮面ライダーカブト第21話見ました
すごく簡単でした

226 :デフォルトの名無しさん:2006/06/28(水) 20:49:56
ここでいいのかわからんがちょっと相談させてください
どうしてもVC++でプログラムを作らなければならなくなって
MFC7.1でシコシコランチャー程度のものを作ろうとしております



・TransparentをTrueにしてさらに上からビットマップ画像をかぶせているんですが表示が安定しない
 他のウィンドウがかぶさると欠けたりボタンだけ残して消えたりする

・Borderをなしにするとダイアログが移動できない

というので困ってます。
なんとかヒント程度でも教えていただけたらとすがる思いです。

227 :デフォルトの名無しさん:2006/06/29(木) 07:58:36
ヒント:DirectX

228 :デフォルトの名無しさん:2006/06/29(木) 12:56:44
GdiPlus

229 :デフォルトの名無しさん:2006/07/04(火) 11:18:56
MFCでのプログラミングをうまく解説した本は何がありますか?

最近MFCの本自体見ないんですが。

230 :デフォルトの名無しさん:2006/07/04(火) 11:55:19
,NETに移行しようとしてるからじゃない?
MFCは過去の遺産になりつつある感じ。

231 :デフォルトの名無しさん:2006/07/04(火) 12:03:14
MFCてVistaでも使えるん?

232 :デフォルトの名無しさん:2006/07/04(火) 14:53:16
MFCはwin32のラッパ
win32が使えれば使える

233 :デフォルトの名無しさん:2006/07/04(火) 15:16:46
Win32APIてVistaでも使えるん?

234 :デフォルトの名無しさん:2006/07/04(火) 16:26:12
使えなかったら大騒ぎだと思うが

235 :デフォルトの名無しさん:2006/07/04(火) 17:54:21
推薦図書スレッドより
>
> MFCを使うなら
> Visual C++(1)はじめてのWindowsプログラミング 翔泳社
> ↓
> Visual C++(2)はじめてのオブジェクト指向プログラミング 翔泳社
> ↓
> Visual C++(3)はじめてのMFCプログラミング 翔泳社
> ↓
> 標準講座MFC6.0 翔泳社
> ↓
> MFCによるWindowsプログラミング アスキー
> ↓
> プログラミング Microsoft Visual C++ .NET Vol.1 基礎編、Vol.2 活用編 日経BPソフトプレス
> (MFCによるWindowsプログラミングがあればVol.2だけでもよい)
> ↓
> MFCインターナル アジソンウェスレイパブリッシャーズジャパン

オイラ的には
・ 標準講座MFC6.0 翔泳社
・ プログラミング Microsoft Visual C++ .NET Vol.1 基礎編
・ ATL COMプログラミング
・ プログラミング Microsoft Visual C++ .NET Vol.2 活用編
「Microsoft Visual C++ .NET Vol.1」は「標準講座MFC6.0」があれば要らないかもしれないけど
Vol.2だけ買うのも気持ち悪いので一応リストアップしてます

236 :デフォルトの名無しさん:2006/07/05(水) 00:04:53
本当に.NETに移行するの?
俺まだ、踏ん切りが付かない・・・

237 :デフォルトの名無しさん:2006/07/05(水) 12:57:12
リストビューに沢山アイテムを追加した状態でヘッダ幅の自動調整を全カラムにかける
コードを書いたんですが再描画が重いのです。
どこかでMFCに再描画を抑制制御する関数があると
読んだのですが今調べてもなかなか見つかりません。


238 :デフォルトの名無しさん:2006/07/05(水) 12:57:47
SetRedraw

239 :質問です!:2006/07/05(水) 15:17:59
コンボボックスをドロップダウンタイプにしています
オーナードローでドロップダウンのリストを描画させるところまでは
上手くいったのですが、ドロップダウンリストの表示項目数は
どの様に指定すれば良いのでしょうか?

オーナードローでなければ、IDE上でドロップダウンのハンドルをドラッグすれば
指定できるのですが・・・

240 :デフォルトの名無しさん:2006/07/05(水) 16:33:23
構造体の中にCStringArrayなどの配列を要素としていれたいのですができません。
こういう格納のしかたをするにはどんな方法がありますでしょうか?

構造体の要素のなかにlistboxの項目を格納しておきたいのです
(しかも数が決まっていない)

typedef struct{
int No;
int Name;
CStringArray Item;  ←こんな風にしたい
} LISTINFO, *PLISTINFO;


241 :デフォルトの名無しさん:2006/07/05(水) 17:00:52
クラスの中で普通に使えるから構造体でも使えそうな気がするけど

242 :デフォルトの名無しさん:2006/07/05(水) 17:31:23
エラーメッセージが無いからなんとも言えないな。

243 :デフォルトの名無しさん:2006/07/06(木) 02:52:17
普通にコンパイル通るが?

afxcoll.hをインクルードしてない、
afxcoll.hをインクルードする前に#define _AFXDLL をしてない。
windows.hをインクルードしてしまっている。

こんなところか。

244 :デフォルトの名無しさん:2006/07/06(木) 09:29:28
アホな質問で申し訳ないんですが
exeファイルを他のPCに持っていくと
MFC7.1.dllがねーよとエラーがでるんですが
exeの中にこのdll入れるのってどうやるんですか?

245 :デフォルトの名無しさん:2006/07/06(木) 09:46:50
プロジェクトのプロパティ
MFCの使用を「スタティックライブラリでMFCを使用する」

246 :デフォルトの名無しさん:2006/07/06(木) 18:42:45
VS6に付いてくるSpyのようにシステムの全メッセージを取得できる
アプリをVC++で作りたいのですが、DLLでWH_CALLWNDPROCをフック
してもDLLを呼んでいる画面のメッセージしか取れません。
何か良い方法は無いでしょうか?

247 :デフォルトの名無しさん:2006/07/06(木) 18:57:53
MFCには無い

248 :デフォルトの名無しさん:2006/07/06(木) 19:09:38
>>247
ありがとうございます。やっぱりMFCが原因なんですね・・・
Cオンリーで動作するソースを公開してる人が居たので、
DLL部分だけそのままでウィンドウ部分をMFCのSDIアプリに
移植してみたのですが動きませんでした。
できればMFC拡張DLLとして使いたかったのですが原因も判らないし、
素直にCで作るしかないのかな・・・

249 :デフォルトの名無しさん:2006/07/06(木) 19:21:11
MFC使ったらできないということじゃなくて
MFCと関係ないということ

250 :デフォルトの名無しさん:2006/07/06(木) 19:29:28
自分で何度やってもダメで、他人のMFC未使用のソースは
動作したのでMFC絡みかと思ってたのですが・・・
もうちょっと調べてみます。ありがとうございました。

251 :デフォルトの名無しさん:2006/07/06(木) 21:57:43
MFCでプログラム作っているんだけど、
何か変な処理をした覚えもないのに突然落ちることがある
特にファイルを開くダイアログを開いた後が確率高い気がする
とはいえ、開いていなくても落ちる時は落ちる
こういった現象への対処はどうすれば良いですか?

252 :デフォルトの名無しさん:2006/07/06(木) 22:03:24
>>251
覚えがないだけで変なことをしているに1票。

253 :デフォルトの名無しさん:2006/07/06(木) 22:15:01
ウィザードでMFCアプリケーションを生成して、
何も付け足さずにビルドしてみる。
それで落ちなければ何か変なことをしている。

254 :デフォルトの名無しさん:2006/07/06(木) 22:29:23
>>251
多分、コレ
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B909486

AdobeReaderアンインスコするか、PdfShell.dll消すか
プログラムの最初に、CoInitializeすると、落ちなくなるそうな

255 :デフォルトの名無しさん:2006/07/06(木) 22:34:14
>名前のプログラム ファイルにマウス ポインタを移動するのに保存したり、
>またはダイアログ ボックス名前を付けて保存が Windows XP Service Pack 2
>ベースのコンピュータでボックスすると、プログラムが終了します。

凄い訳だな、わけ判らんw

256 :239:2006/07/06(木) 22:36:48
救世主いませんか・・・?

257 :デフォルトの名無しさん:2006/07/06(木) 23:23:33
FLASH(swf)ファイルをプログラム上で再生させる方法を
教えてください。よろしくおねがいします


258 :デフォルトの名無しさん:2006/07/07(金) 00:05:40
適当に予想すればOLEでFLASHを表示するコンポーネントを使えばいいんじゃネーの?

259 :デフォルトの名無しさん:2006/07/07(金) 01:27:39
許可さえあれば、メディアプレイヤーでも再生可能な予感。


260 :257:2006/07/07(金) 08:40:57
>>258
どのOLEを使えばいいのかがわかりません

>>259
まずメディアプレイヤーでもFLASHの再生ができませんでした


261 :デフォルトの名無しさん:2006/07/07(金) 09:49:16
ウィンドを動かすときのビットマップの再描画ってどうされてます?
動かす先の座標を取得してからInvalidateでウィンドごと再描画してるんですが
チラついてしかたないんですが

262 :デフォルトの名無しさん:2006/07/07(金) 09:53:57
風の息づかいを感じていれば、事前に気配があるはず

263 :デフォルトの名無しさん:2006/07/07(金) 10:00:32
>>261
WM_PAINTに正しく応答していれば、動かす先の座標なんか必要無いんだが。

264 :239:2006/07/07(金) 10:55:48
>>261
メモリデバイスコンテキストに描画しそれをウインドウにコピー
(ダブルバッファリング)



で、239もどなたかお願い

265 :デフォルトの名無しさん:2006/07/07(金) 11:23:08
回答がないのは質問の仕方に問題があるとは思わないのかな

266 :質問です!!:2006/07/07(金) 11:34:13
すみませんでした。解りにくい質問の仕方のようでしたね・・・
幾分、解りやすくなりましたかね・・・?

コンボボックスのドロップダウンリストの高さ(低くしたい)を、
コーディングで指定するにはどの様にすれば可能でしょうか?
(このコンボボックスはWM_DRAWITEMのメッセージハンドラ内でオーナードローしています)
MoveWindow()も試みましたが、効果ありませんでした。

267 :デフォルトの名無しさん:2006/07/07(金) 11:52:27
それはMFCの質問じゃ無いとも思わないのかな

268 :デフォルトの名無しさん:2006/07/07(金) 12:39:41
コンボボックスのリストの部分をMoveWindowしたんだろうか?

269 :258:2006/07/07(金) 12:52:33
また適当に答えてみれば、ActiveXコントロールの挿入でShockwaveFlashObjectを
使ってみてはどうだろう?

270 :デフォルトの名無しさん:2006/07/07(金) 12:58:02
>>266
ダイアログエディタで高さ調整できたよ
リスト10件ぐらいで2つぐらいしか出ないようになった。
オーナードローじゃない場合と何も変わらない。

271 :デフォルトの名無しさん:2006/07/07(金) 13:11:04
>>266
MoveWindowでも高さ変わった。

272 :266:2006/07/07(金) 13:24:03
皆様・・・
大変申し上げにくいのですが、
No Integral HeightのプロパティがFalseになってました
Trueにして解決です・・・
ほんと、ごめん(;_;)ゴメンナサイ

273 :デフォルトの名無しさん:2006/07/08(土) 22:47:59
こんばんわ
あのMFCの質問をしたいのですが、

メインのアプリケーションウィンドウ(MyApp)がトップにある状態で、ほかのアプリケーションをトップ(アクティブ)にして、MyAppをバックグラウンドに移します。

その状態で、MyApp側であるDialogクラスをDoModalすると、モーダル表示にはならず、モードレス表示になります。
Spyで調べてみたら、親ウィンドウがNULLになっていましたので、
そのDialogクラスをインスタンス化するさいに、引数にWndクラスポインタを渡したのですが、どうもモードレス表示になります。

なぜ、モーダル表示にならないのでしょうか?

274 :273:2006/07/08(土) 22:56:23
>引数にWndクラスポインタを渡した

は、親のメインウィンドウのポインタです。

275 :デフォルトの名無しさん:2006/07/09(日) 00:10:10
>>273
全く以って状況が伝わってこないな。
>メインのアプリケーションウィンドウ(MyApp)がトップにある状態で、ほかのアプリケーションをトップ(アクティブ)にして、MyAppをバックグラウンドに移します。
これはマウスでやったのか?それとも「メインのアプリケーション」とやらからやったのか?
そもそもメインのアプリケーションウィンドウっていうことはメインじゃないウィンドウもあるのか?

276 :273:2006/07/09(日) 00:13:23
>>275
MyAppがトップにある状態で、マウスクリックで他のアプリケーションをトップにします。
そうすると、MyAppが他のアプリケーションの後ろに隠れますよね。

その状態で、MyAppがあるDialogクラスをDoModalするとモーダル表示ではなくて、モードレス表示になるのです。

277 :デフォルトの名無しさん:2006/07/09(日) 00:24:30
>>273
MyAppが何か時間のかかる処理をしていて、その間に別のアプリを
フォアグラウンドにして操作していたらMyAppの処理完了通知
ダイアログか何かがModalにならないって事?

278 :デフォルトの名無しさん:2006/07/09(日) 00:26:26
ソース晒した方が早いな。

279 :273:2006/07/09(日) 00:29:21
>>277
まあそんなことです。

MyAppがバックグラウンドにある状態でDialogクラスをDoModalすると、モーダルじゃなくて、モードレスになってしまうのです。
これはなぜなのでしょうか?

280 :デフォルトの名無しさん:2006/07/09(日) 00:29:39
アプリケーションモーダルとシステムモーダルが無かったっけ?
システムモーダルにして表示してる?

281 :273:2006/07/09(日) 00:32:34
>>280
いえ、特に意識して表示はしてません。

単に、CDialog::DoModalを呼び出しているだけです。
何か足りない処理があるのでしょうか?

282 :280:2006/07/09(日) 00:56:43
これでいけるかな?

SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);


283 :273:2006/07/09(日) 10:02:40
>>282
たしかに、そのやり方ですと、指定したウインドウを前面に持ってくることができますが、

問題点は、DoModalされたダイアログの”オーナーウィンドウ”と”親ウィンドウ”がNULLだということです。
通常モーダル表示されたダイアログはオーナーと親を持ちますが、
このオーナーと親がないためにモーダル化されないという問題なのです。


あと、お聞きしたいことがありまして、
Windows上にあるメインアプリケーションウィンドウのハンドル(またはウィンドウクラスポインタ)を取得する場合はどうすればよいのでしょうか?

284 :デフォルトの名無しさん:2006/07/09(日) 12:45:48
MyApp自身はウインドウじゃないだろ

285 :デフォルトの名無しさん:2006/07/09(日) 13:04:31
CDialog::DoModalのソースぐらい見よう

286 :273:2006/07/09(日) 15:04:17
Dialogクラスをインスタンス生成するときに、引数に親のウィンドウポインタを渡しますよね、
それを渡せばうまくいきました。

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

287 :デフォルトの名無しさん:2006/07/15(土) 23:37:11
mfc7.1.dllが無いと動かないみたいなんですけど、
mfc7.1.dllってWindowsに最初からあるもんじゃないんですか?

288 :デフォルトの名無しさん:2006/07/15(土) 23:40:28
Windowsにも色々あるからねえ
入ってるかどうか確認すればいい 入ってなきゃ拾ってくればいい

289 :デフォルトの名無しさん:2006/07/15(土) 23:50:17
>>287
ない。
代わりにmfc71.dllはアプリケーションと共に再配布できる。

290 :287:2006/07/15(土) 23:54:57
ありがとうございます
ちなみに、mfc7.1.dllはアプリケーションと同じフォルダに入れとけばいいんですよね?

291 :デフォルトの名無しさん:2006/07/15(土) 23:58:34
>>290
それでいい。
一応書いておくがmfc71.dllだぞ。

292 :287:2006/07/16(日) 00:00:03
了解しました。

293 :デフォルトの名無しさん:2006/07/16(日) 01:48:05
CToolBarのサブクラス中でSetSizes()を行いボタンのサイズを変えたいのですが
ボタンの中に1つでもdisable状態のボタンがあるとサイズ変更ができません。
直前でGetToolBarCtrl().SetState(id,TBSTATE_ENABLED); しても駄目でした。
やる方法があれば教えてください。

ViewとかDocのOnUpdateXXXでCCmdUIに細工しろっていうのは無しでお願いします。
そもそも最初にOnUpdateXXXが呼ばれるより前に処理してるんですけどね...

294 :293:2006/07/16(日) 14:19:44
条件漏れてました。上記+ボタンキャプションありのときです。

295 :デフォルトの名無しさん:2006/07/16(日) 14:49:36
調べればわかるけど、わざわざテスト用のプログラム作ってまで調べたいと思わない。

296 :251:2006/07/17(月) 00:43:00
>>254
ありがとうございます。
リンク先の情報、とても参考になりました。

レス遅くなりまして申し訳ございませんでした。

297 :デフォルトの名無しさん:2006/07/17(月) 19:00:26
VC7でダイアログベースのアプリを作っているのですが

AfxBeginThread関数を使ったスレッドの作成が必要になったため
AfxBeginThread(RUNTIME_CLASS( CGraphThread )) 関数を使ってビルドしたところ
リンカエラーがでるようになりました。*CGraphThreadは自分でオーバーロードしたクラスです。

試しに
CRuntimeClass* prt = RUNTIME_CLASS( CGraphThread );

としてみたところやはり同じエラーだったのでRUNTIME_CLASSを使うときに何かlibが必要とされているような気がしています。
どのようにすると、よいのでしょうか?
ボスケテクダサイ。

<エラーの内容>
error LNK2001: 外部シンボル ""public: static struct CRuntimeClass * __stdcall CGraphThread::GetThisClass(void)"
(?GetThisClass@CGraphThread@@$$FSGPAUCRuntimeClass@@XZ)" は未解決です。






298 :デフォルトの名無しさん:2006/07/17(月) 19:25:11
DECLARE/IMPLEMENT_DYNAMIC


299 :デフォルトの名無しさん:2006/07/17(月) 21:04:49
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_runtime_class.asp
>Only CObject-derived classes declared with DECLARE_DYNAMIC, DECLARE_DYNCREATE, or DECLARE_SERIAL will return pointers to a CRuntimeClass structure.

300 :デフォルトの名無しさん:2006/07/17(月) 23:05:41
>>298-299
ちょっと時間掛かりましたが、ようやく理解できました。
ご指摘のとおり、マクロ定義をやっていませんでした。このようにして使うことになってたのですね。
エスパー度の高い質問にも関わらず、的確な回答でした。

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

301 :デフォルトの名無しさん:2006/07/19(水) 01:50:41
VC7でCDHtmlDialogを使って
リソース?にある画像ファイルを表示する方法がわかりません。

プログラム作成手順は以下のような感じです。

1)アプリケーションウィザードから
"ダイアログベース" & "HTMLダイアログを使用する" をチェックしプロジェクトを作成
→CDHtmlDialog を継承したクラスが作成される

2)リソースビューからBitmapを作成
→bitmap1.bmpというファイルがプロジェクトに追加される。適当に描く。

3)デフォルトで作成されているhtmlファイルに
<img src="bitmap1.bmp"> と追加

4)コンパイルして実行。結果、表示されず。

その表示されてない画像のプロパティを右クリで調べてみたところ
res://c:〜\アプリ名.exe/bitmap1.bmp
のようになってました。

ちなみに3を <img src="http://〜どっかのWebの画像ファイル"> みたいに
やったらその画像はちゃんと表示されました。

CDHtmlDialog ぐぐっても満足する結果が出てこなかったので
何か根本的に間違っているのでしょうか?

以上よろしくお願いします。


302 :デフォルトの名無しさん:2006/07/19(水) 10:51:19
CDHtmlDialog の検索結果 約 867 件

CDHtmlDialog クラス (MFC)ユーザー インターフェイスの実装にダイアログ リソースではなく
HTML を使用する ダイアログ ボックスの作成に使用します。
msdn2.microsoft.com/ja-jp/library/8bed8k60.aspx - 10k - キャッシュ - 関連ページ
[ 他、msdn2.microsoft.com内のページ ]

303 :301:2006/07/19(水) 11:47:55
>>302
回答ありがとうございます。
恐縮なのですが、よろしければもう少しヒントをお願いできないでしょうか?
ベースとなるHTMLファイルはリソースから読めているんですが(ボタンや文字などは表示される)
リンクする画像が読めていないという質問です。
・CDHtmlDialogで使うHTMLにおけるimgタグの書き方(画像リソースを特定できるようなsrc属性の書き方)
・画像リソースをCDHtmlDialogで使うHTMLから読めるようにバンドルする方法
のいずれかあるいは両方に問題があるのかと思いますが・・・


304 :デフォルトの名無しさん:2006/07/19(水) 12:23:54
CDHtmlDialogでぐぐったらサンプル見つかるじゃん

305 :301:2006/07/19(水) 13:27:12
度々すみません・・・
サンプルは質問前に見たことあって
・サンプルのHTMLに <img src="folder.gif"> と書いてみた→表示される
 (HTML右クリでの画像のプロパティをみたら確か res://c:〜\アプリ名.exe/folder.gif のようになっていた)
・自分のプロジェクトを>301の手順で作成し同じように <img src="bitmap1.bmp"> と書いてみた→表示されない
そこで
・>301の手順で作成されたプロジェクトとサンプルプロジェクトとの違いがサンプルのどこを読めばいいのかわからないのと
 (サンプルプロジェクトの作成手順(リソース追加手順など)がわかればよいのですが)
・file: や http: では表示されるので>303のような問題がなにかあるのでは?
と思い>301と>303で質問させていだたいた次第です。
>>304
よろしければ>301と>303において問題点があればご指摘お願いできませんでしょうか?
へたれですみません。

306 :デフォルトの名無しさん:2006/07/19(水) 13:31:52
bitmap1.bmpがカレントにないって落ち?

307 :デフォルトの名無しさん:2006/07/19(水) 14:30:04
MSのサンプルと同じ"2110" なんだろうか?

308 :301:2006/07/19(水) 14:34:48
>>306
多分ものすごく根本的な問題(私がVCでのリソースバンドル手順に詳しくない)だと思います・・・
パス関連はサンプルと見比べて同じようになるようにしたつもりですが多分できてないのでしょうね。
だめならとりあえず自己解決するまで画像は外部に置き file: でやっておこうと思います。
皆さんどうもありがとうございました。


309 :301:2006/07/19(水) 14:43:51
>>307
あー確かにサンプルでは"2110"となっていたような気がします。
でも>301の手順で作成したリソースのフォルダ?は"Bitmap"という名前で作成され
"2110"ではなかったと思います。(参照先のパスはサンプルと同じような構成にはしました)
そこらへんに何か違いがあるのかもしれません。(どのような違いがあるのかわからないのが悲しい・・)
帰ったらもっとその辺いじってみたいと思います。
ありがとうございました。

310 :301:2006/07/19(水) 22:18:35
解決したみたいです。

カスタムタイプを「2110」で新規作成し、プロパティの参照先を対象のbmpファイルにしたらうまくいきました。
なお、参照先をgifファイルにすると破壊される(BMP形式になってしまう)ので
ファイルを再度コピー&上書きしてくる必要があるようでした。

いろいろ試した結果、リソースを res: でアクセスできるようにするためには
リソースタイプが「2110」でなければならないみたいです。
(3000とか1000とか適当なものはだめでした)

あと、リソースビューからインポートするとうまくいかないようなので一応書いておきます(VS.NET 2003)
・bmpファイルはタイプが勝手に「Bitmap」になってしまう。
・gifファイルはタイプを指定するダイアログが出てくるが、2110と指定しても「2110」でなく「"2110"」となってしまう(+ファイル破壊)

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

311 :デフォルトの名無しさん:2006/07/20(木) 22:27:10
MFC を使って開発を行うメリットって何?

312 :デフォルトの名無しさん:2006/07/20(木) 22:37:33
作るのに楽だし、保守しやすい。

313 :仕様書無しさん:2006/07/21(金) 09:35:41
使い込まれて、バグもほとんど枯れてるし。Windowsの環境にほとんど依存
しない。

314 :デフォルトの名無しさん:2006/07/22(土) 10:45:33
CStringを破棄するとメモリリークが起こるんですが、
これを起こらないようにするにはどうしたらよいでしょうか?

デストラクタにReleaseBufferとかおいてみたんですけど、やっぱりメモリリークは起きたままでした。

315 :デフォルトの名無しさん:2006/07/22(土) 10:52:39
メモリリークが起きたと判断した根拠は?

316 :デフォルトの名無しさん:2006/07/22(土) 10:54:23
CStringを破棄するとメモリリークなんて聞いたことがない。

317 :デフォルトの名無しさん:2006/07/22(土) 11:10:01
>>315
プログラムを終了すると、
VCの出力ウィンドウに「メモリリークが起きました」的なメッセージが出てきます。
CStringを使わないようにするとこれが消えます。
使うとまた出てきます。

318 :デフォルトの名無しさん:2006/07/22(土) 11:34:13
普通の人がやらない異常なことをやってるとしか考えられない。

319 :デフォルトの名無しさん:2006/07/22(土) 11:59:37
こうなるああなるって言う前に問題が再現する最小限のソースを出せ。

320 :デフォルトの名無しさん:2006/07/22(土) 14:23:44
あ、なんか、自宅の環境では起こらないみたいです。
ちなみに、自宅のはVC.NETで会社のはVC.NET2006でした。
もうちょっと調べてみます。

321 :デフォルトの名無しさん:2006/07/22(土) 15:02:20
実はexit()するとメモリリークすると判断されるとか?

322 :デフォルトの名無しさん:2006/07/22(土) 15:17:34
いつの間にか2006が出ていたのか

323 :デフォルトの名無しさん:2006/07/23(日) 03:08:34
吊り認定ということですね

324 :デフォルトの名無しさん:2006/07/23(日) 20:47:08
CImageで透過とアルファを同時に掛ける方法ってないでしょうか?

325 :デフォルトの名無しさん:2006/07/24(月) 01:50:30
FillOutsideRectって何するの
MSDNで見たけどわからないのよ

326 :325:2006/07/24(月) 01:57:12
ごめんなさい わかった
ビュー内のいらんとこ塗りつぶすわけね

327 :デフォルトの名無しさん:2006/07/24(月) 07:42:19
>>324
同じく知りたいです。CImageじゃなくても良いから。
DotNetだと数行で出来るのにMFCで出来ないのは悲しすぎる。

328 :デフォルトの名無しさん:2006/07/24(月) 08:40:55
透過は値0のアルファブレンドと同じだと思うんだけど。

329 :デフォルトの名無しさん:2006/07/24(月) 22:02:08
>>314です。
原因がわかりました。
CStringが原因ではありませんでした。
CPtrArrayを使っていて、GetAtで取得したポインタをキャストせずにdeleteしていたため。
デストラクタでdeleteが呼ばれず。
メモリリークしてるというものでした。
お騒がせしてスミマセンでした。

330 :デフォルトの名無しさん:2006/07/24(月) 22:09:41
>>328
そうすると生成時にRGBA(32Bit)のビットマップを生成して、
1ピクセルずつ、RGBとαを描き込んでいくという方針でよろしいでしょうか?

331 :仕様書無しさん:2006/07/25(火) 11:50:53
>330
Direct Xや、GDI+のAPIを使えば、いいんでは? ここいらへん(下の方)
のコードが参考になる?

ttp://park17.wakwak.com/~dragoon/gdiplus5.htm

>328
たぶん、特定の色をマスク色にして、それ以外の色の部分を透過率を指定
して背景イメージと合成させたいのでは?

既存の関数を組み合わせて、自分でそういう機能を実現する関数を作ら
ない限り、同時にはムリと思うな。全ピクセルで透過率が固定とか、左上
から右下方向で透過率変わるとか、要求を全部組み込んでも、さらに
新しい要求が生まれるだけだし。

332 :デフォルトの名無しさん:2006/07/25(火) 12:06:17
まあMFC使ってるからって何でもMFCスレで質問しちゃうのもあれだな

333 :デフォルトの名無しさん:2006/07/25(火) 17:05:06
質問です。

7年以上前にVC++6で、作ったプログラムを開発し直す必要ができました。
それで、プログラムを実行しようとしたところ、

 MSVCRTD.DLL(やMFC42D.DLLなど)が見つからなかったため、
 このアプリケーションを開始できませんでした・・・

というメッセージが表示されました。
Visual Studio 2005は入っているのですが、
これらは利用できないのでしょうか?

このプログラムを最新環境で動作させるには、
VC++6を入手して、プログラムを書き換えるなどした方がいいでしょうか?

334 :333:2006/07/25(火) 17:29:08
このVC++6のプログラムは、
実行時にユーザがグラフィカルエディタでプログラミングして、
それで生成したCソースをコンパイルしてdllを作り、
それを多数組み合わせて計算をするという
コンパイラが含まれているようなシミュレーションプログラムです。
こういうのは、最近のVC++では、どんな風に作るものでしょうか?
dllの代わりに.NETで同様のことをするべきでしょうか?

ちなみに私のこれまでの経験は、Java暦5年のみです。

335 :デフォルトの名無しさん:2006/07/25(火) 17:34:13
プログラムいじる前にひと通り勉強しないと
経験ゼロじゃ話にならんだろ

336 :デフォルトの名無しさん:2006/07/25(火) 17:39:07
>>333
リリースビルドしたやつは無いのか?
とりあえずは、どうにかしてデバッグ版のランタイムを入手すれば動くと思う。

337 :333:2006/07/25(火) 18:08:27
>>335
>>336
そうですね。一通りの理解と、動作環境が必要ですね。。。

とりあえず、開発環境のPC(VC++6等も有り)一式を貸してもらったので、
それで動かして理解してから、今後の修正方法を考えます。
UNIXでも動かしたいとかJavaだと遅いから駄目(?)とか言われてますが。

どうも、お騒がせしました。

338 :デフォルトの名無しさん:2006/07/25(火) 20:21:40
フレームで上下分けてて
上FormView,下EditViewなんだけど

EditViewに表示される文字の色を変えたいんすけど
どうしたらいいんでそ。

ON_CTLCLRないし><


339 :仕様書無しさん:2006/07/25(火) 20:48:51
>358
WM_CTL_COLORメッセージハンドラで、pDC->SetTextColor(RGB(255,0,0));
とかで可能だったような。行単位とか、一部の単語だけとか、部分的に
文字の色を変えたいならEditViewではムリぽ。

340 :デフォルトの名無しさん:2006/07/25(火) 23:32:59
vs.net2003
VC MFC ダイアログベースアプリケーションで

IDC_LIST1 m_list
のリストコントロールの中にいくつかのCString文字例が入っていて
その中に AAA という項目が存在するか調べるにはどうすればいいでしょうか。
これじゃダメみたいですね。

if( -1> m_list.FindItem("AAA",-1))
{
MessageBox("","",MB_OK);
return;
}

341 :デフォルトの名無しさん:2006/07/25(火) 23:54:59
それコンパイル通るか?
ダメじゃなにがダメなのか意味わからんだろ

342 :デフォルトの名無しさん:2006/07/25(火) 23:57:19
>>340
とりあえず方針としては1つ1つ要素を取得してAAAと比べればいいんじゃないだろうか?

343 :デフォルトの名無しさん:2006/07/26(水) 07:46:01
if( -1> m_list.FindItem("AAA",-1))

このif文は絶対FALSEになるんじゃないかな...
見つかれば 0以上、見つからなければ-1、-1より小さくなることはない。

344 :デフォルトの名無しさん:2006/07/30(日) 17:52:23
環境:VC++ 6.0/XP/MFCダイアログ

新規にプロジェクトを作成して、Dlgクラスのクラスウィザードにより
WindowProc()を追加しました。
キー入力イベントを取りたいので、WindowProc()のmessageがWM_KEYDOWNかどうかで
判定したいのですが、そのメッセージが通知されてこないようです。
WM_LBUTTONDOWNなら通知されるのですが、キー入力判定を行うためには
どのようにすればよいか、どなたかご教授願います。

345 :デフォルトの名無しさん:2006/07/30(日) 18:09:06
PreTranslateMessage

346 :デフォルトの名無しさん:2006/07/30(日) 18:57:17
すみません、MFCのダイアログベースで、ディスプレイの解像度を変更する
には、どうすればいいのでしょうか。

ちなみに、VC++のバージョンは.Netの2003です。

347 :デフォルトの名無しさん:2006/07/30(日) 19:02:12
MFCにそういう機能があるとは限らんけどな

348 :デフォルトの名無しさん:2006/07/30(日) 19:07:12
わかりました。あきらめます。

349 :デフォルトの名無しさん:2006/07/30(日) 19:44:55
やっぱりあきらめ切れません


350 :デフォルトの名無しさん:2006/07/30(日) 20:57:16
api呼ぶだけ

351 :デフォルトの名無しさん:2006/07/31(月) 16:06:41
あのう、マウスの座標を指定した場所に飛ばす関数って、
どんなものでしょうか。

352 :デフォルトの名無しさん:2006/07/31(月) 17:19:43
MFCにはなかったと思う

353 :デフォルトの名無しさん:2006/07/31(月) 19:10:29
わかりました。あきらめます。


354 :デフォルトの名無しさん:2006/07/31(月) 21:01:21
CStringはスレッドセーフですか?

355 :デフォルトの名無しさん:2006/07/31(月) 21:59:14
>>354
スレッドセーフってなんですか?

356 :デフォルトの名無しさん:2006/07/31(月) 23:30:19
InsertColumnで複数のコラムを持つ表を作成した際に、
選択できる項目が左のコラムだけに限られてしまいます。
横一行が綺麗に選択できるようになる設定を教えてください。
よろしくお願いします



357 :デフォルトの名無しさん:2006/07/31(月) 23:56:47
>>354
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_multithreading.3a_.programming_tips.asp
>For size and performance reasons, MFC objects are not thread-safe at the object level, only at the class level.

358 :デフォルトの名無しさん:2006/08/01(火) 00:04:47
速度重視は結構だけど
m_ThreadSafe = TRUE;
とかで速度を捨ててスレッドセーフオブジェクトに変身して欲しい。
Mutexとか面倒臭い。

359 :デフォルトの名無しさん:2006/08/01(火) 00:19:23
>>358
何をもってスレッドセーフなの?
PCが落ち無きゃいいなら別にやりようがあるだろうけど、
アプリの整合性まで責任とってくれるようなしろもんじゃないならいらねぇじゃん。
どうせ自分でやらなきゃならねぇことはカワラネェし。
だいたいCStringがもつもんじゃねぇだろw
センス0だなw

360 :デフォルトの名無しさん:2006/08/01(火) 01:29:22
359=355だろ
357でも読んどけwww

361 :354:2006/08/01(火) 01:58:25
ありゃ、やっぱりそうなんですか。

ちなみに、インスタンスが別々でも複数のスレッドで、

CString a = "aaa";
+++++++++++++++++++++++
CString b = "bbb";
とかやろうとしたら、排他しないとまずいんですかね?

なんかグローバルで共有されてるところへアクセスしてそうなんで…。
MFC objects are not thread-safe at the object level, only at the class level.
これがちと理解できません。英語苦手で済みません。

362 :デフォルトの名無しさん:2006/08/01(火) 02:32:42
mfcの入門書(http://www.amazon.co.jp/gp/product/4777510727/503-9699511-4609552?v=glance&n=465392)を読んで
mfcの使い方をある程度覚えたつもりなんだが
いまいちソフトウェアの作り方が把握できてない
将来自作ソフトウェアでも公開したいと思ってる俺に
いい教本を教えてたもれ

363 :デフォルトの名無しさん:2006/08/01(火) 06:09:50
でかい本屋に行って「ゼロからはじめるWindowsプログラミング」的な名前の本を片っ端から読み漁れ。
これなら判ると思った本を買って実際にビルドしてみるといい。
(CD付きかサイトでソース公開してる本にしとけよ)

364 :デフォルトの名無しさん:2006/08/01(火) 06:14:48
あれ?
俺CStringのメンバ持ってるクラスでマルチスレッド作ったけど
問題なく動いてたぞ、まずかったのかコレ・・・

365 :デフォルトの名無しさん:2006/08/01(火) 10:32:29
>>361
> This means that you can have two separate threads manipulating two different CString objects,
> but not two threads manipulating the same CString object.

同一オブジェクトに対しては排他しないとダメ。

366 :354:2006/08/01(火) 10:37:52
>>365
どうも。
それならちと楽になるっす。

>For size

ってあったから、

CString a = "zzz";
CString b = "zzz";

とかやると別のインスタンスでも共通のものをさして
サイズを節約とかしてるのか勝手に思い込んでました。

367 :デフォルトの名無しさん:2006/08/02(水) 19:37:03
formview上のリストコントロールの右クリック
を処理したいのですが、イベントを取得する方法はあるのでしょうか?

368 :デフォルトの名無しさん:2006/08/03(木) 23:17:13
同じくCRectTrackerのWM_LBUTTONUPを処理したいのですが、イベントを取得する方法はあるでしょうか?

369 :デフォルトの名無しさん:2006/08/04(金) 02:58:41
つ フック

370 :デフォルトの名無しさん:2006/08/04(金) 20:48:48
>>369
CRectTrackerの場合はマウスを放した後に、
Trackを抜けてくることがわかりましたw
ので、WM_LBUTTONUPを取る必要はなくなりましたw
お騒がせしました。

後、フックでもやってみて、ちゃんとできることを確認しました。
ありがとうございました。

371 :デフォルトの名無しさん:2006/08/09(水) 18:27:02
VC++6で、ダイアログにグループボックスを貼ると、
他のグループボックスの下に隠れちゃうんです。
上にするにはどうしたら良いですか?

372 :デフォルトの名無しさん:2006/08/09(水) 18:50:38
切り取って、張りなおす。
タブ順序を逆にする。

373 :デフォルトの名無しさん:2006/08/10(木) 00:24:29
VS2003でタブコントロールを使ったダイアログアプリを作っています。
resource.hを見ると

#define IDC_BUTTON1                     1234
#define IDC_STATIC5                      1234
#define IDC_RADIO8                       1234

みたいな感じでIDの値が重複しているものが結構あります。
またこれらはリソースシンボルで見ると全部「使用中」にチェックが点いています。

それぞれ別のダイアログクラス(タブ)で使用しているのですが
こういう場合だと問題ないのでしょうか?
一応問題なく動作はするのですが。

374 :デフォルトの名無しさん:2006/08/10(木) 06:52:15
MFCつかうと一気に実行ファイルサイズが10倍に?!

375 :デフォルトの名無しさん:2006/08/10(木) 07:12:51
>>374
少ないとなんかいいことあるのか?

376 :デフォルトの名無しさん:2006/08/10(木) 07:19:40
>>374
環境によ(ry

377 :デフォルトの名無しさん:2006/08/10(木) 09:13:48
すげえ(ry

378 :デフォルトの名無しさん:2006/08/10(木) 09:48:52
>>373
同じ親を持つ子ウィンドウのIDが重複していなければ問題ない

379 :デフォルトの名無しさん:2006/08/10(木) 23:00:45
>MFCつかうと
オマエにゃ使えないってことだよ

380 :デフォルトの名無しさん:2006/08/10(木) 23:11:30
>>378
昔、タブコンのページがそれぞれ似たような内容で重複前提で
リソースのIDを統一して組んだら偉い目にあったw

381 :デフォルトの名無しさん:2006/08/11(金) 14:05:11
クラスライブラリがリソースIDを隠蔽すれば良いんじゃね?

というか、Winではウィンドウハンドルだし、リソースファイル編集にリソースIDが炒るだけだよね。

382 :デフォルトの名無しさん:2006/08/12(土) 01:44:33
GetDlgItem()したときとか大丈夫なのか?

383 :デフォルトの名無しさん:2006/08/12(土) 06:02:00
>>392
ヒント:GetDlgItem()はCDialogごとに使う。

384 :デフォルトの名無しさん:2006/08/12(土) 20:34:08
CTreeCtrlを使ってチェックボックスのあるツリーを作ったのですが,
ひとつうまくいかないのでお伺いします.
チェックボックスをチェックしたときに特定の動作を埋め込みたいのですが,
そのクリックメッセージが取れません.
クリックやダブルクリックのメッセージを拾ってきても,チェックボックスをクリックしたときはメッセージが投げられていませんでした...

どうすればいいのでしょうか?

385 :デフォルトの名無しさん:2006/08/12(土) 21:05:20
CMainFrameのメンバのm_wndStatusBarに
MDI子Viewからアクセスしたいのですが
コードの実装方法で悩んでいます。
1、毎回(CMainFrame*)AfxGetMainWnd()する
2、m_wndStatusBarのポインタを保持するメンバを追加する
3、m_wndStatusBarのHWNDを保持するメンバを追加する
結構頻繁に呼び出すのですが、、
上記以外の方法でエレガントな手法は無いですか?

386 :デフォルトの名無しさん:2006/08/12(土) 21:06:56
IE7beta3だと、変数の追加ダイアログが真っ白で萎え('A`)

はともかく、WindowsXP SP2/VS2005だと、NM_CLICKはハンドルできてるな。

387 :デフォルトの名無しさん:2006/08/12(土) 21:52:30
>384
検証はしてないけど、こんなのあったよ。
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q261289&

388 :384:2006/08/12(土) 22:23:03
>>387

サマリーざっと読んだだけなんで詳しく理解していませんがそれっぽいですね.

ありがとうございます.

389 :デフォルトの名無しさん:2006/08/13(日) 01:08:38
>385
凄まじい頻度で特定ペインのテキスト変更するだけなら、表示しないダミーのメニュー
作ってCMainFrameのstatic UINT indicators[] ={...}の適当なとこに割り当てて
void CHogeView::OnUpdateHoge(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
pCmdUI->SetText( private_string );
}
という手もある。m_wndStatusBarをぐりぐり弄るなら、ぐりぐり用関数作って
その内部で1かなー

390 :389:2006/08/13(日) 01:11:44
よく見たらprotectedだった。1は無理

391 :デフォルトの名無しさん:2006/08/13(日) 01:35:50
friendにしちゃえば?

392 :デフォルトの名無しさん:2006/08/13(日) 03:59:41
マルチスレッドのMFCDLL内でOLEを使用する方法について
お聞きしたいです。よろしくお願いします。

MFCDLL内でメインスレッドからスレッドAを作り、
そのスレッドA内でダイアログボックスに貼り付けた
OCXを使用したいのですが上手く動作しません。

OLEのイベントをスレッドAで受け取りたい(実行したい)のですが
OLEの初期化(OleInitialize)をDLL使用者であるメインスレッド上で行ってしまうと
OLEのイベントがメインスレッド上で行われてしまいます。

どうやらOleInitialize() を呼び出した最初のスレッドが、
シングルスレッドのインプロセスコンポーネントのオブジェクトへの
すべての呼び出しを処理するクライアントスレッドになってしまうらしいです。(↓参照)
http://www.microsoft.com/japan/developer/library/VBCon98/vbcondesigningthreadsafedlls.htm

そこでOLEの初期化をスレッドA上で実行したのですが
そうすると今度はメインスレッドからOLEにアクセスできなくなってしまいました。

どうすればスレッドAのイベントをスレッドA上で実行させつつ
かつメインスレッドからスレッドAにアクセスすることができますか?

よろしくお願いします。


393 :デフォルトの名無しさん:2006/08/13(日) 04:08:09
MFCって凄いの?

394 :デフォルトの名無しさん:2006/08/13(日) 07:39:02
>>393
俺にはとても書けないくらいすごいライブラリだよ

395 :デフォルトの名無しさん:2006/08/13(日) 07:56:07
MITやハーバード卒が書いてるの?

396 :デフォルトの名無しさん:2006/08/13(日) 08:16:11
一人で書ける分量ではないが、MIT卒が必要かというと必ずしもそうではないかもしれない。

397 :デフォルトの名無しさん:2006/08/13(日) 10:15:16
MFCの実装コード読んで感想は?

398 :デフォルトの名無しさん:2006/08/13(日) 11:04:47
>感想
日本語でおk

399 :デフォルトの名無しさん:2006/08/13(日) 19:09:47
MFCのコードって覗けるんでしょ?
見てみて感想は?

400 :デフォルトの名無しさん:2006/08/13(日) 19:25:39
コードってよりそもそも設計がアレだからなぁw

401 :デフォルトの名無しさん:2006/08/13(日) 20:32:36
Visual C++ 6.0(MFC) と Windows Media Player の ActiveX を使って
ちょっとしたプログラムを作っているのですが、WMV 形式のファイルを
再生させた時に何故か例外が発生します。
その例外は、

wmvcore.dll   0xc0000005   access violation

です。
この例外を無視して良いのか否かで悩んでおります。
無視しても大丈夫なのでしょうか?

402 :デフォルトの名無しさん:2006/08/13(日) 20:40:59
>>399
コード自体はまあ普通。ハンガリアンの好き嫌いはあるだろうけど。
設計は、昔のコンパイラ事情や実行環境でああなったんだろうな。よく知らんけど。
まあここまでよく頑張ったと思うよ。

403 :デフォルトの名無しさん:2006/08/13(日) 21:39:04
>>401
無視していい例外なんてない。

たぶん不正なメモリ書き込みでもしてるんだろ。
ちゃんとデバッグしろ

404 :デフォルトの名無しさん:2006/08/14(月) 00:07:43
Cで作った"なんちゃってオブジェクト指向"のソースみたい>>MFC
#普通、ここまでなる前に実装あきらめるだろ、ってのも付け加えとく

405 :デフォルトの名無しさん:2006/08/14(月) 00:15:37
>>403
レス、ありがとうございます。
例外対応したいのですが、
困ったことに wmvcore.dll の中で
例外が発生している感じなのですよ
なので MS の責任にしてしまえないかなぁと
例外処理って結構大変ですからね

406 :デフォルトの名無しさん:2006/08/14(月) 00:21:06
>>405
そうなるのはまず間違いなく、大抵自分のプログラムに何らかのバグがあるから。
MSのバグなら、Web上を探せば似たような事例が見つかったり、MSのサポート技術情報に載っていたりする。

407 :デフォルトの名無しさん:2006/08/14(月) 00:30:51
もしかして、wmvcore.dll内で完結してる例外?
VirtualAllocを使ってページを予約、
アクセス違反をハンドリングして実際に確保、
という実装があるから、それに反応してるだけじゃね?

408 :デフォルトの名無しさん:2006/08/14(月) 00:45:17
でも、ocxってリソースエディタで貼り付けてみて起動しただけで
赤いアイコンのついた警告画面ってよく出てくるじゃん。
(ダイアログベースのアプリを作って貼りつけると大抵動かない。)
あれって原因ってどうやって探すの?

409 :デフォルトの名無しさん:2006/08/14(月) 00:52:25
>>401
こんな情報が見つかったけど、どう?
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=576307&SiteID=7

410 :デフォルトの名無しさん:2006/08/14(月) 01:06:54
ダイアログベースでコードからコントロールを配置しているんですけど、コントロールのIDは全て0でも問題ないですか?

411 :デフォルトの名無しさん:2006/08/14(月) 10:39:40
IDを使ってコントロールを識別する必要が無ければ別に

412 :デフォルトの名無しさん:2006/08/14(月) 16:48:29
今、猫でもわかるプログラミングを参考にMFCの勉強しているんだけど。
開発環境が猫ではVC++5.0 俺は.NETなんだけど、
猫のサンプルを作っても、コンパイルしても実行できません
この場合環境を合わせるべきでしょうか?
また、MFCの参考になる本、サイトとかあったら教えてください。

413 :デフォルトの名無しさん:2006/08/14(月) 17:52:03
>>412
VC++2005EEを使っているなら、該当スレを読んでみよう。
MFC自体はVC++5時代からそれほど大きく変わってはいないと思う。
#但し、CStringは大きく変わっているしMFCに直接関係ないところで
#色々違いはあるかもしれないが。

414 :デフォルトの名無しさん:2006/08/14(月) 19:14:56
http://www.amazon.co.jp/exec/obidos/ASIN/4822216934/ref=pd_sim_dp_4/503-5043830-7287967

本だけど。

415 :デフォルトの名無しさん:2006/08/15(火) 09:42:53
CEditを継承したクラスを作成しているんですけど、こいつの中にWM_TIMERの
メッセージハンドラをつけるにはどうしたらいいですか?

416 :デフォルトの名無しさん:2006/08/15(火) 11:49:23
クラスビューでそのクラスを選択した後、
プロパティページでメッセージを選択、追加。

417 :デフォルトの名無しさん:2006/08/15(火) 19:34:07
>>416
できました!感動です。ありがとうございます!

418 :デフォルトの名無しさん:2006/08/15(火) 23:40:46
ダイアログの上にダイアログを置いて・・・という感じで
ウィンドウを作ってしまったのですが、
タブキーのフォーカスの移動ってウィンドウ間をまたぐことはできないでしょうか?

419 :デフォルトの名無しさん:2006/08/16(水) 00:23:05
またぐように書けばできる

420 :デフォルトの名無しさん:2006/08/16(水) 00:28:06
>>419
PreTranslateMessageで頑張るということでしょうか?

421 :デフォルトの名無しさん:2006/08/17(木) 22:01:18
>>418です。
とりあえず、ダイアログの上にダイアログをのせて
上にのっけたダイアログにWS_TABSTOPを入れるとタブフォーカスが
一応は移るのですが、一度上のダイアログにタブのフォーカスが移ると
Shift+Tabを押しても下のダイアログへタブが戻りません。
この辺スマートに組む方法はないでしょうか?
それともPreTranslateMessageを拾って地道に組むしかないのでしょうか?

422 :デフォルトの名無しさん:2006/08/17(木) 23:04:05
>>421
ダイアログの上にダイアログをのせてってどういう状態?

423 :デフォルトの名無しさん:2006/08/17(木) 23:09:59
画面上に複数のスクロールバーが配置されていて
任意のフォーカスをセットするにはどうすればよいのでしょうか?
SetFocusでは無理でした

424 :デフォルトの名無しさん:2006/08/17(木) 23:20:12
>>422
タブコントロールにダイアログをのせるみたいなのをイメージしてもらうとそれに近いです。
それと同じようにダイアログの上にダイアログをのせるということをやっています。

425 :デフォルトの名無しさん:2006/08/17(木) 23:39:53
>>418
のせるほうのダイアログ(子ダイアログ)のスタイルに
DS_CONTROLを追加すればできるよ。
(ダイアログエディタ上なら「コントロール」のチェックボックスにチェックを入れる)

426 :デフォルトの名無しさん:2006/08/17(木) 23:45:24
>>425
>のせるほうのダイアログ(子ダイアログ)のスタイルにDS_CONTROLを追加すればできるよ。
おお!そんな設定が!
ありがとうございます。
明日になりますがやってみます。
また、やってみたら結果報告にきます。

427 :デフォルトの名無しさん:2006/08/18(金) 03:51:41
表示している画像をスライドさせたいのですが
新しく描画する部分だけ処理して
残りの、既に表示してあった部分は単にずらす

という事をするにはどう実装すればよいですか?

428 :デフォルトの名無しさん:2006/08/18(金) 07:47:29
>>427

>新しく描画する部分だけ
つ CDC::GetClipBox()

>残りの、既に表示してあった部分は単にずらす
つ CWnd::ScrollWindow()

CScrollViewつかってれば勝手にスクロールするかも

429 :デフォルトの名無しさん:2006/08/18(金) 15:43:37
フォントを白色にして別の色でフチドリなんてできますか?

430 :デフォルトの名無しさん:2006/08/18(金) 16:42:08
>>429
座標ずらして書くのしか知らない

431 :デフォルトの名無しさん:2006/08/18(金) 19:32:15
>>429
以下の流れで。
フォントを作って選択
BeginPath()
TextOut()
EndPath()
縁取り用のペン(&塗りつぶし用のブラシ)を作って選択
StrokePath()/StrokeAndFillPath()
後始末

432 :デフォルトの名無しさん:2006/08/18(金) 19:43:40
>>425
結果報告です。
結果は、なんと、できました。

具体的にはリソースエディタの「Control」と「Control Parent」とかいう設定を「true」にすることで
親から子へ、子から親へタブフォーカスが遷移するようになりました。ありがとうございます。
あ、もちろんダイアログにもその他のコントロールにもWS_TABSTOPのスタイルを付けます。
これでタブフェチのお客さんも満足なはずです。

あ、途中、タブコントロールの上に貼ったリストコントロールがなぜか再描画されないと
いう現象に悩まされましたが、ダイアログを1つはさんでその上にリストコントロールを貼りつけて
リストの下敷きのダイアログにフォーカスが移ったときにInvalidateを実行することで描画されるようになりました。
これにもControlとControl ParentとWS_TABSTOPをつけるとタブフォーカスがちゃんと遷移してくれるようになりました。

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

433 :デフォルトの名無しさん:2006/08/19(土) 12:16:11
メニューボタンのチェックについてお伺いします

シングルウィンドウのアプリをVisualstudio.net2003でつくっているのですが,チェックをうまくきかすことができません.
GetMenu()->CheckMenuItem( ID_XXXX, MF_BYCOMMAND|MF_CHECKED );
いまこういう感じで実装しています.

実装場所はメニューの該当ボタンが押されたときです.
ID_XXXXはVisualStudioで自動に割り振られたIDです.
(メニューエディタでメニューをクリック後プロパティにてIDの項目で表示されるやつ)

どうすればうまくチェックをつけることができるのでしょうか?
どなたかお願いします.

434 :433:2006/08/19(土) 13:16:08
すみません
関係ないかもしれませんが追記です.

シングルドキュメントアプリケーションでプロジェクトを作成しており,
また,プログラムはマネージ拡張されています.

435 :デフォルトの名無しさん:2006/08/19(土) 13:55:23
>>433
メニューにチェックを入れたり、有効・無効を切り替えの処理は、
通常UPDATE_COMMAND_UIハンドラで行う。
追加方法は、コマンドの時とほぼ同じなので省略。
ツールバーのボタンも同じハンドラで処理されて激しく(゚д゚)ウマー

436 :デフォルトの名無しさん:2006/08/19(土) 14:23:56
>>435
イベントハンドラ生成にもうひとつ選択肢があるとは...
見落としていました,ありがとうございます.

437 :デフォルトの名無しさん:2006/08/20(日) 13:05:58
画面上に複数のスクロールバーが配置されていて
任意のフォーカスをセットするにはどうすればよいのでしょうか?
SetFocusでは無理でした

438 :デフォルトの名無しさん:2006/08/20(日) 15:02:49
>>437
普通にできたよ。
タブストップが設定されてないんじゃない?

439 :デフォルトの名無しさん:2006/08/20(日) 15:04:06
いや、タブストップは関係ないか・・・
でも

CWnd* cw = GetDlgItem(ID_SCROLL4);
cw->SetFocus();

でフォーカスが設定できることを確認した。

440 :デフォルトの名無しさん:2006/08/20(日) 21:43:16 ?2BP(0)
質問です。

通常ダイアログを表示したあとにEnterを押すとすぐに閉じる(OKボタン)のに、
以下のような手順でウィンドウを作成・表示すると、Enterを押しても閉じなくなります。

VC++ 2005 MFC WinXP

- メインのアプリから、DLLの関数を呼ぶ
- DLL内で、CDialog::Create を用いてウィンドウを生成し、ShowWindow で表示

原因が分からないので、試しに

- アプリで作成 -> DLLで表示
- DLLで作成 -> アプリで表示
(HWND を受け渡し)

とやってみましたが、前者は正常で、後者はだめでした。

理由が分かる方いらっしゃいませんでしょうか?

441 :デフォルトの名無しさん:2006/08/20(日) 23:53:04
IsDialogMessageが呼ばれてないんだろ

442 :デフォルトの名無しさん:2006/08/21(月) 19:45:26
描画の関係で質問させてください

リサイズ可能なダイアログを作成しています
このとき、表示をちらつかせないために親ダイアログのClip Childrenをtrueに設定しました
ダイアログの中には、ボタンを押すと色が変更されるPicture Controlを配置しています

ところが、Clip ChildrenがtrueになっているためにPicture Controlの描画が行われません

リサイズ時のちらつき防止とPicture Controlの再描画を両立させる方法はありませんか?

443 :デフォルトの名無しさん:2006/08/22(火) 01:48:46
PictureControlにInvalidate

444 :デフォルトの名無しさん:2006/08/23(水) 02:06:41
こんばんわ

CDialogにCButtonが一つ付いてるとします。

そこでCDialogをDoModalした状態でWM_KEYDOWNイベントを取得したいと思い、
自動生成でOnKeyDownを作りました、

さて、KeyDownイベントが取れてるかな?と思ったら取れてません。
どうしてだろ?と思ってSpy+でみてみたら
KeyDownイベントがCButtonのほうへ行っています。

なぜなのでしょうか?

445 :デフォルトの名無しさん:2006/08/23(水) 06:12:19
>>444
日本語めちゃくちゃじゃね?
「そこで」「付いてるとします」「さて」「なぜなのでしょうか?」
の使いどころ微妙じゃね?w

まあ、概要はわかるけどw

>なぜなのでしょうか?
そりゃ「CDialog作った人がそう作ったから」だろ

446 :仕様書無しさん:2006/08/23(水) 08:05:31
>444
だって、ボタンにフォーカスがあるだろ?

447 :デフォルトの名無しさん:2006/08/23(水) 08:12:02
>>なぜなのでしょうか?
>そりゃ「CDialog作った人がそう作ったから」だろ

「Win32APIを作った人がそう作ったから」のほうが正確じゃね?
まぁ、それをそのままCDialogに反映させたんだろうけど

448 :444:2006/08/23(水) 08:49:19
なるほど
ありがとうございました

449 :デフォルトの名無しさん:2006/08/23(水) 09:59:52
>>444
ダイアログの PreTranslateMessage() で、ボタンへ送る前に横取りすりゃいいんじゃね?

450 :デフォルトの名無しさん:2006/08/25(金) 15:43:35
vc++7.0、mfcで、直接にapiを呼び出してなく、「マルチバイト文字セットを使用」でビルドしたら、
WinMEや98SEにも対応すると考えるのは甘いですか?

451 :デフォルトの名無しさん:2006/08/25(金) 15:49:51
>>450
バージョン定義のマクロも大事。
_WIN32_NTを0に定義して、WINVERを適切な値にして、
必要に応じて、WIN32_WINDOWSとWIN32_IEを定義してやる。

これで最低限。
動作確認はしていないけど動くと思うよと言える程度にはなると思う。

452 :デフォルトの名無しさん:2006/08/25(金) 16:23:30
>>451
450です。ありがとう。

453 :デフォルトの名無しさん:2006/08/25(金) 17:01:22
CLabelControlって、文字のフチドリ機能って無いですよね。

文字フチドリが出来るコントロールは無いでしょうか?

454 :デフォルトの名無しさん:2006/08/26(土) 23:56:18
それなんてバード?

455 :デフォルトの名無しさん:2006/08/27(日) 00:19:53
>>453
CDC::GetGlyphOutline
後はなんとかしてみせろ

456 :デフォルトの名無しさん:2006/08/27(日) 17:44:59
CDialog関連で、デバッグモードでは正常で、releaseモードでだけ失敗する部分がある。

CFileDialogを1回domodal→いくつか処理し→別の関数でC〜Dialogをコンストラクトすると、
コンストラクタの始まり部分「{」でハンドルされてない例外となる。

余分なdomodalを追加して、
CFileDialogを1回domodal→直後に同じdomodal→いくつか処理し→別の関数でC〜Dialogをコンストラクトすると、
問題は発生しない。

原因やらヒントあったらください。


あと、releaseモードでデバッグすると、いろんな部分でポインタの値とかウォッチするとずれているんですが、
そういうものですか?
ウォッチではずれていても、処理自体にはこのずれは反映されてなく、正常に処理されます。
例えば、strの値が、000000006869とかでても、strcpy_sとかでは、ちゃんと6869からコピーされている。



457 :デフォルトの名無しさん:2006/08/27(日) 17:46:05
456です
環境は、VC++2005です。

458 :デフォルトの名無しさん:2006/08/27(日) 17:54:17
>>456
デバッグモードとリリースモードの違いはやっぱり初期値じゃね?
デバッグだと配列にcdcdcdcd・・・って入ってるけどリリースだと
完全にめちゃくちゃな値(0かもしれんし別の何かかもしれんし)が入ってる。
その違いなので初期化忘れを念入りに調べるしかないんじゃないの?

それとCFileDialogってところでカレントディレクトリをチェンジされて
ファイルパスの処理がおかしくなってるとかない?

まあ、俺はあんまりそういう場面に遭遇したことないので適当に答えてみたけど。

459 :デフォルトの名無しさん:2006/08/27(日) 23:03:56
>>458
レスありがとう。

いろいろやってみたけど初期値でもカレントディレクトリ関連でもないようだった。

バグだろうか。
CFileDialogがデストラクトされた後、C〜Dialogのコンストラクト時に悪さをしている感じだった。

結局、C〜Dialogを親ウインドウクラスの要素にして、CFileDialogより先にコンストラクトしてそのまま保持にして、
エラーを回避した。

460 :仕様書無しさん:2006/08/28(月) 15:19:31
>459
単にバグが出るタイミングが移動しただけのような気がする。

461 :デフォルトの名無しさん:2006/08/28(月) 16:11:01
VC++7.0でのユーザーインターフェーススレッドのサンプルか解説サイトはないでしょうか?

462 :デフォルトの名無しさん:2006/08/28(月) 17:25:07
>>461
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_Multithreading.3a_.Creating_User.2d.Interface_Threads.asp

463 :デフォルトの名無しさん:2006/08/28(月) 17:26:58
あ、できればmsdn以外でお願いします

464 :デフォルトの名無しさん:2006/08/28(月) 20:07:03 ?2BP(0)
質問です。

PropertySheetを独自実装する場合や、ToolBarに独自のウィンドウを貼り付けたり
する場合、テーマがグラデーションだと、貼り付けられたウィンドウが単一色なので、
見栄えが悪くなります。

WS_EX_TRANSPARENT を適用したり、WM_ERASEBKGND を拾ったり、
OnCtlColor を引っ張ってきたり、思いつく限りやってみたのですが、
どうも上手くいきません。

これは、一般にどういう方法で、単一色になるのを避けているのでしょうか。

465 :デフォルトの名無しさん:2006/08/29(火) 01:02:21
EnableThemeDialogTexture使えばできたと思う。
ただし、一般的な方法かどうかは判らん。

466 :465:2006/08/29(火) 01:38:26 ?2BP(0)
>>465
ありがとうございます。今からためしてみます。

467 :464:2006/08/29(火) 02:11:30 ?2BP(0)
>>465
全く問題なく動作しました。大変助かりました。
しかしツールバーのほうは、タブではないので、同じ関数を叩いてもダメでした。

もしも何かご存じでしたらお教え下さい。

468 :デフォルトの名無しさん:2006/08/29(火) 12:14:19
>>454 自己レスです。
ファイル選択ダイアログで落ちるのは固有のバグだったみたいです。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=26276&forum=7




469 :デフォルトの名無しさん:2006/08/29(火) 12:29:40
MSDN眺めていたら、
「Rebar コントロールでのダイアログ バーの使い方」に
親ウィンドウにWM_ERASEBKGNDを送って
透明にする方法があったんだが、参考にならないか?

470 :デフォルトの名無しさん:2006/08/30(水) 17:08:33
windowsXP、VC++6.0を使って開発しています。

インクルードファイルの読込み時、ファイルがありませんのようなエラーがでます。
以下のエラーです。
 ⇒ fatal error C1083 

フォルダ構成は整っているはずなのですが、、


471 :デフォルトの名無しさん:2006/08/30(水) 17:20:45
何のファイルだ

472 :デフォルトの名無しさん:2006/08/30(水) 17:53:22
>471

470です。

読み込めないのは、自作のヘッダファイルです。

stdafx.hに以下のファイルをインクルードしました。

#include "aa.h"

のような感じで定義しています。



473 :デフォルトの名無しさん:2006/08/30(水) 21:53:39
インクルードファイルの検索パスが通っていないに一票。

474 :デフォルトの名無しさん:2006/08/31(木) 21:26:33
CStringTのoperator=がメモリ不足で失敗した場合、オブジェクトの状態はどうなるんでしょうか?
代入される前の状態を保っている保証はあるのでしょうか?

475 :デフォルトの名無しさん:2006/08/31(木) 22:14:02
ソース嫁…と、
いいたいところだが

新しい文字列確保->現在保持しているのを解放->新しいのをアタッチ
の順なので、保証はされている。

476 :デフォルトの名無しさん:2006/08/31(木) 22:42:27
しかし、現実そんな状態で動かそうとしても
それより先にウィンドウズの赤いマークの警告画面のが先にでそうだw

477 :デフォルトの名無しさん:2006/09/01(金) 17:41:39
CViewを継承してないクラスがUpdateAllViewを受け取るいい方法は
ないでしょうか
CDocument::UpdateAllViewはvirtual宣言されてないし…

478 :デフォルトの名無しさん:2006/09/01(金) 19:35:00
既存のビューに通知してもらうとか。

479 :デフォルトの名無しさん:2006/09/01(金) 22:49:25
なるほど!

480 :仕様書無しさん:2006/09/02(土) 01:37:28
>477
CString派生クラスとか、メッセージループや独自のワーカスレッドを
持たないクラスなら、通知もないと思うが?

というか、ドキュメントやビューのメンバ変数として、データメンバを
定義して、CView::OnUpdate()内で、メンバ変数のメソッドを呼び出せば
済む様な気がする。


481 :デフォルトの名無しさん:2006/09/02(土) 12:13:39
シリアル信号(RS-232C)の送受信を行いたいのですが、
MFC にその為のクラスって存在しますか?

482 :デフォルトの名無しさん:2006/09/02(土) 13:40:54
>>481
comポートを開いて、適当にパラメータをセットして、適宜読むなり書くなりして、閉じるだけだから
APIを呼ぶだけで充分。

483 :デフォルトの名無しさん:2006/09/03(日) 08:55:04
>>482
今後はMFCもSTLもDotNetも使わないでね。
あなたにはAPIだけで充分です。

484 :デフォルトの名無しさん:2006/09/03(日) 10:04:50
何でキレる

485 :デフォルトの名無しさん:2006/09/03(日) 10:12:39
>>483
あなたは、ちょっとしたファイル入出力を行なう関数も自作できないのですか?
MFCやSTLやFrameworkを使ってもそれらは作ってもらえるわけではありませんよ。

486 :481:2006/09/03(日) 19:27:36
レスありがとうございます。
とりあえず、APIを使えばOKってことですね?

487 :デフォルトの名無しさん:2006/09/03(日) 19:32:25
つまりMFC にその為のクラスは、存在しない。
その理由は>>482

488 :・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 :2006/09/04(月) 00:53:26
CommX的なフリーのクラスならどっかにあるんじゃね?多分。

489 :デフォルトの名無しさん:2006/09/04(月) 15:12:09
自分で作成したクラスからエディットボックスに文字を表示させようとすると
コンパイラはエラーをださないのでコンパイルできたのですが

強制的に終了させられてしまいます


やりたいことはダイアログベースで自作クラスから
SetWindowTextを使いたいということです
ダイアログのクラスにSetWindowTextを使う関数を自分で作って
それを外のクラスから呼び出しましたが呼び出すときになんらかのエラーが
起きているようです

私は自作クラスからMFCのクラスの関数を呼び出す方法がわかりません
初歩的なことだと思いますがどうかアドバイスお願いします


490 :デフォルトの名無しさん:2006/09/04(月) 15:20:43
>ダイアログのクラスにSetWindowTextを使う関数を自分で作って
はて?
SetWindowTextメソッドはpublicだから、ふつうに外から呼べるんじゃ・・・


491 :489:2006/09/04(月) 15:31:58
>>490
ですよね?だからコンパイラはエラーを出さないんです
いろいろ試しましたが多分私の記述の仕方に問題があるのかと思われます

外部からSetWindowTextを使う場合はどう記述すればよろしいのでしょうか?

C○○○Dlg::m_ed1.SetWindowText("1");

のような書き方だと失敗したと思います

C○○○Dlgクラスを生成してみてから呼び出しても無理でした


492 :489:2006/09/04(月) 15:42:34
C○○○Dlg::::hyouji(void)
{
CString AA="1";
m_ed1.SetWindowText(AA);
}

C○○○Dlgにこの関数を作り外のクラスからhyouji()を呼び出しても
エラーがでて強制終了になります

外からエディットボックスの操作は無理なのでしょうか
ちなみにm_ed1はエディットボックスのコントロール変数です

493 :デフォルトの名無しさん:2006/09/04(月) 15:50:54
オマイ、そもそもC++分かってないだろ?

自作クラスに、C○○○Dlgのインスタンスを渡して、そっからメソッド呼べ

494 :デフォルトの名無しさん:2006/09/04(月) 16:19:22
ずいぶん汎用性がないクラスに思えるけど
何を目的としたクラスなんだろう?

495 :デフォルトの名無しさん:2006/09/04(月) 16:31:14
C○○○Dlgの中のm_ed1にSetWindowTextするためのクラス

496 :デフォルトの名無しさん:2006/09/04(月) 16:36:19
m_ed2には使えないの?

497 :デフォルトの名無しさん:2006/09/04(月) 16:37:08
使えません

498 :489:2006/09/04(月) 16:41:20
>>493
アドバイスありがとうございます、やってみます

499 :デフォルトの名無しさん:2006/09/04(月) 17:41:24
C○○○Dlgのインスタンスってなんですか?

500 :デフォルトの名無しさん:2006/09/04(月) 18:21:41
VS6を7年くらい使い続けて、VS2005に移行したんですがVS2005のIDEになれなくて大変です
質問ですが
クラスにメッセージハンドラーを追加する場合、
クラスビューで該当クラスを選択してプロパティからメッセージを選択して
対応メッセージを選択してコンボボックスから選ぶやり方をしていますが、
これ以外に方法ありますか?
一つハンドラー関数を作るたびに、関数にフォーカスが移ってしまって必要なハンドラー関数
を一気に生成するのが非常に面倒くさいです。
またコントロール変数を生成するのもテンポ悪すぎるんですが・・・・
VS6のクラスウィザードみたいなのはなくなってしまったのでしょうか?


501 :493:2006/09/04(月) 18:33:33
よく考えたらインスタンスを渡せなくて困っているのでした
UIスレッドだとどうやって渡せばいいんですか?

502 :489:2006/09/04(月) 18:37:52
489でしたすいません

503 :デフォルトの名無しさん:2006/09/04(月) 18:43:05
小出し野郎

504 :デフォルトの名無しさん:2006/09/04(月) 19:38:32
C○○○Dlgのインスタンスってあるの?

505 :デフォルトの名無しさん:2006/09/04(月) 23:37:51
>>500
全く同感ですが、しようがないっぽいです。

ハンドラ作成の度にフォーカスが移ってしまう件については
例えばCMyDocにハンドラを作る場合、ヘッダの
class CMyDoc : public CDocument
の行にブックマークしておけば、フォーカス移動後、F2押下で
CMyDocのプロパティが表示されるので、多少マシになります。
ハンドラ1個追加するのに5秒ぐらい待たされるとウンザリしますね。

506 :デフォルトの名無しさん:2006/09/05(火) 00:25:38
>>500
自分で書く。
コントロール変数位なら、宣言とDDX_Controlで済むから割と簡単。
ハンドラも、同じ種類を複数作るときは、一個だけ作って後はコピペで適当に弄って。

507 :デフォルトの名無しさん:2006/09/05(火) 00:37:17
次世代VCではbase classのvirtual関数は全部プロパティのオーバーライドに出て欲しい。

508 :デフォルトの名無しさん:2006/09/05(火) 10:14:00
>>501
たしかイベントでやりとりするんじゃなかったかな?
俺わかんねーから誰かkwsk説明してやって

509 :デフォルトの名無しさん:2006/09/05(火) 11:17:26
小出し野郎は放置で

510 :500:2006/09/05(火) 11:24:12
>>505-506
返答ありがとうございます

>>505
ブックマークを使うのはいい方法ですね

>>506
ハンドラの場合、メッセージによって引数が変わるのでちょっと面倒くさい気がします
同種のコマンドのばあいは、〜RANGEを使うので、自分で書いていますが・・・

今のところ、ほかの方法は見つからないようなので、
アップデートにて改善してくれることを信じて今は我慢することにします

511 :デフォルトの名無しさん:2006/09/05(火) 11:32:52
>>509
ほんとに放置すんの?

512 :デフォルトの名無しさん:2006/09/05(火) 20:57:48
>>509 お前みたいな教条野郎イラネ。
形式がそんなに大事なら役所にでも勤めてろ。

513 :デフォルトの名無しさん:2006/09/06(水) 00:45:08
いやです

514 :デフォルトの名無しさん:2006/09/06(水) 00:53:38
VS2005のインテリセンスが俺の入力スピードについてこねー。
すぐに左側の式はクラスじゃありませんなんたらとか言いやがる。
何度かやり直すと入力候補が現れる。あほか。

515 :500:2006/09/06(水) 09:02:27
>>514
確かに
昔よりスマートだが、もっさりしてる

516 :デフォルトの名無しさん:2006/09/06(水) 10:18:06
はいはいマグネットコーティング

517 :デフォルトの名無しさん:2006/09/06(水) 14:16:36
VC++使ってますが、デバッグのトレースで、
STRCORE.CPPの240行目CString::CString(LPCTSTR lpsz)の中まで入ってしまいます。

入らない方法教えて下さい。


518 :デフォルトの名無しさん:2006/09/06(水) 14:25:17
ステップ実行してるってことかな・・・?

ステップオーバーしる

519 :517:2006/09/06(水) 14:29:46
それが、引数にCStringが有った場合、
ステップオーバー →メソッド通り越し
ステップイン →上記レス

で、困ってまつ。

520 :デフォルトの名無しさん:2006/09/06(水) 14:34:55
方法 : 特定の関数にステップ インする
http://msdn2.microsoft.com/ja-jp/library/7ad07721.aspx

521 :デフォルトの名無しさん:2006/09/06(水) 14:43:38
特定の関数にステップ インしたいんじゃなくて、
特定の関数のステップインを止めたいんです><

522 :デフォルトの名無しさん:2006/09/06(水) 14:46:19
ステップインしちゃったと思ったらステップアウトすれば

523 :デフォルトの名無しさん:2006/09/06(水) 15:05:27
>>521
関数の引数にCStringがあったら、困るよってことだろ
要は、オマイの関数にステップインすりゃいいってことじゃん?

524 :デフォルトの名無しさん:2006/09/06(水) 15:24:57
自分の関数全行トレースしようと思ったら全部ブレークポイント貼るんでつか?><

525 :デフォルトの名無しさん:2006/09/06(水) 15:30:36
ステップイン、ステップアウト、ステップイン
鼻糞ほじりながらでもできるだろ

526 :デフォルトの名無しさん:2006/09/06(水) 15:32:46
一旦CString::CString(LPCTSTR lpsz)の中に入ると、
抜けるまでキー押し続けでつ。

527 :デフォルトの名無しさん:2006/09/06(水) 15:33:52
ばーか

528 :デフォルトの名無しさん:2006/09/06(水) 15:34:58
使えんやつら。

こんなの設定できないのVC++だけだぞ。

529 :デフォルトの名無しさん:2006/09/06(水) 15:37:21
馬鹿には使えないわけだ

530 :デフォルトの名無しさん:2006/09/06(水) 16:08:12
バカにも使えないだろうが、
ステップインしないソースの設定出来ない血管IDE。

フォームエディタもクソ。


531 :デフォルトの名無しさん:2006/09/06(水) 16:16:18
apiの中にはステップインしないよ

532 :デフォルトの名無しさん:2006/09/06(水) 16:22:19
おま○こにステップイン

533 :デフォルトの名無しさん:2006/09/08(金) 10:35:29
ユーザーインターフェーススレッドからエディットボックスに表示させる方法を教えてください

534 :デフォルトの名無しさん:2006/09/08(金) 10:41:27
>>533
どこかで見たような質問だな

535 :デフォルトの名無しさん:2006/09/08(金) 12:22:49
メッセージを送るんですよね?
SendMessageとGetMessageを使えばいいのでしょうか?
そして自分でメッセージを作ればいいのでしょうか?

ここの人が冷たくて初心者は相談できないことはよくわかったので
合ってるなら合ってるとだけ教えてください

536 :デフォルトの名無しさん:2006/09/08(金) 12:30:12
やりかたはいくらでもあるし
好きなようにやれ

537 :デフォルトの名無しさん:2006/09/08(金) 12:33:13
合ってるか教えてください^^;
相談する相手がいないので相談しにきてるのです

私がスレ違いで初心者迷惑なら二度と来ないので他の場所に誘導してください

538 :デフォルトの名無しさん:2006/09/08(金) 12:53:39
>>489あたりに同じ質問があって、
そいつがキチガイでうんざりしたんだよ・・・

オマエも同類ぽいけどな

539 :デフォルトの名無しさん:2006/09/08(金) 12:58:20
初心者はキチガイなんですか?
私の質問には答えてくれないということでしょうか?
これでは相談スレにならないです
相談できないならスレタイを変えたほうがいいですね

私がスレ違いなんですか?ちゃんと答えてください

540 :デフォルトの名無しさん:2006/09/08(金) 13:29:06
では、言おう
Win32APIの勉強をしろ。そうすればわかる

541 :デフォルトの名無しさん:2006/09/08(金) 13:34:19
>>539
>>489に同じ質問があったって書いてるんだ
それのレス読めよ



542 :デフォルトの名無しさん:2006/09/08(金) 13:54:38
あってるよ。いろんなやり方があるってだけ。

543 :デフォルトの名無しさん:2006/09/08(金) 14:29:41
>>540
答えになってないですよ

>>541
結果でてないでしょあなたがよく読んでからレスしてくださいね

>>542
そうなんですかボタンを押してスレッドを作っているんですが
GetMessage関数はWhileを使うんですよね?
関数なので呼び出したときにしか受け取れないように見えるんですが
スレッドを作ったあとにすぐGetMessage関数を書くんでしょうか?

544 :デフォルトの名無しさん:2006/09/08(金) 14:32:42
ホームラン級の馬鹿

545 :デフォルトの名無しさん:2006/09/08(金) 14:41:34
やったことないんだからわからないんですよ
ここは相談しにくるとこですよね?
初心者相手に>>544みたいな答えしか返せないくせに
偉そうにするのが答えですか?
技術はあっても性格が子供なだけでしょうか

相談相手になる気が無いならこのスレ来ないほうがいいんじゃないですか?
ただでさえわからなくてイライラして困ってるから来てるのに
>>544みたいな人をみるとすごい腹が立ちますね


546 :デフォルトの名無しさん:2006/09/08(金) 14:49:12
ここは馬鹿が来る所じゃないよ

547 :デフォルトの名無しさん:2006/09/08(金) 14:55:07
>>546
人の怒りを逆撫でして面白いですかねこの人は
教えたくないなら消えるのはてめぇのほうだろ
たいしたことも教えれないくせにこのスレ来るなよ

人を馬鹿にするだけなら誰でもできるんだよ
ただの荒らしっすか?馬鹿にするだけなら邪魔なんで消えてくださいよ

548 :デフォルトの名無しさん:2006/09/08(金) 14:59:58
ここは阿呆がくるところじゃないよ


549 :デフォルトの名無しさん:2006/09/08(金) 15:01:45
それではどこに行けばいいんですかね天才さん

550 :デフォルトの名無しさん:2006/09/08(金) 15:08:27
基本的なことがわかってない
答えだけ求めている
これじゃ絶対無理

551 :デフォルトの名無しさん:2006/09/08(金) 15:12:10
基本的なことをわかっていないのは承知のうえです
自分でもそんなことはわかっています
でもやらないといけないんですよ

僕はどうすればいいんですか?死ねとでも言うんですか?

552 :デフォルトの名無しさん:2006/09/08(金) 15:15:24
そうしてくれると助かる

553 :デフォルトの名無しさん:2006/09/08(金) 15:17:28
それでは
このスレは初心者相談しにくるなということでいいんですね?

554 :デフォルトの名無しさん:2006/09/08(金) 15:20:20
常識的な初心者は歓迎よ

555 :デフォルトの名無しさん:2006/09/08(金) 15:21:24
初心者がする質問じゃないし

556 :デフォルトの名無しさん:2006/09/08(金) 15:25:18
相談しにきたのになんの解決もしてないんですが
独学なんで馬鹿にされて当然なんですかね

>>554
人を馬鹿にするだけが常識なんですか

>>555
これは上級者向きなことだったんですか?

557 :デフォルトの名無しさん:2006/09/08(金) 15:40:13
今MFC始めたばっかりのやつがする質問じゃないな

558 :デフォルトの名無しさん:2006/09/08(金) 15:40:29
このスレは困ってる初心者が相談しにきたのをいいことに馬鹿にする釣堀です
神様気分の偉そうにしたい人たちが集まってるだけです
きっとMFCとかなんにも知らないんでしょうね

本気で困ってる人を怒らして楽しむのだけかよ最低ですね

このスレ本気である意味ないし悪質だし消されても不思議じゃないよね

559 :デフォルトの名無しさん:2006/09/08(金) 15:43:18
MFCでちょっと変わったことやろうとすると行き詰まるやつが多い
基本がわかってないと手も足もでないんだよ

MFCに嫌気がさした人の数→
http://pc8.2ch.net/test/read.cgi/tech/1059196520/

560 :デフォルトの名無しさん:2006/09/08(金) 15:45:35
>>559
だからそのための相談室じゃないの?

561 :デフォルトの名無しさん:2006/09/08(金) 15:48:04
基本から教えろというのか

562 :デフォルトの名無しさん:2006/09/08(金) 15:48:37
お願いします先輩
僕には相談相手がいないんです

563 :デフォルトの名無しさん:2006/09/08(金) 15:59:37
ではGetMessage関数はアイドル処理の部分に書くということで
合ってるかどうかだけ答えてください

564 :デフォルトの名無しさん:2006/09/08(金) 16:05:39
50%位の確率で合ってると思う

565 :デフォルトの名無しさん:2006/09/08(金) 16:08:03
ありがとうございます!!

566 :デフォルトの名無しさん:2006/09/08(金) 18:35:51
初心者はおとなしく、入門書でも読んで来いってこった。
それで判らなければ質問でもすればいいだろう。

567 :デフォルトの名無しさん:2006/09/08(金) 19:13:33
本もネットも使ってます僕の成長を見守ってください

わかったことはメッセージの作り方です #define WM_TESU (WM_USER+1)
で作れたかと思われます
そしてスレッドでメッセージを飛ばそうとしました
if(SendMessage(HWND_BROADCAST,WM_TESU,0,0)==0)

しかしエラーが帰ってきてると思われます
後ろ2つの引数がよくわかりません

あと初めて使ったのですがダイアログベースなのでアイドル処理はWindowProcでいいんですよね?
この関数がもうメッセージを受け取っているように見えます
WindowProcのif(message==WM_KICKIDLE)でアイドル処理ができていました
しかしWM_KICKIDLEの中でGetMessageを使いメッセージをさらに取得するんでしょうか?

GetMessageを使うかどうかも教えてください
今日の質問はこれで最後にしますんでお願いします先輩

568 :デフォルトの名無しさん:2006/09/08(金) 19:22:22
どんどんややこしい方向に向かってるな
たぶん普通のやり方なら非常に簡単だと思う

569 :デフォルトの名無しさん:2006/09/08(金) 19:27:42
普通のやりかたっすか探してみます
また明日も来ますんでよろしくお願いします

570 :デフォルトの名無しさん:2006/09/09(土) 00:57:01
探してみたんですけど、やっぱりわからないのでさっさと教えてください、クズども。

571 :デフォルトの名無しさん:2006/09/09(土) 01:40:20
探したらやっぱり見つかったのでいいです、クズども。

572 :デフォルトの名無しさん:2006/09/09(土) 04:06:06
楽しそうだなおまいら…

573 :デフォルトの名無しさん:2006/09/09(土) 04:07:36
なんかうまくいかないんで、やっぱり教えてください、クズども。

574 :デフォルトの名無しさん:2006/09/09(土) 04:57:29
つ アウトプロセス

575 :デフォルトの名無しさん:2006/09/09(土) 05:36:00
>>574
楽に出来そうだけど面白みに欠ける。

576 :569 ◆AnMpDtbPAQ :2006/09/09(土) 09:58:10
>>570-571
悪質ないたずらやめてください

もうわかりやすいように酉つけますよ

>>574
そのキーワードで調べてみますありがとうございます

577 :569(本物):2006/09/09(土) 16:00:29
>>576
勝手にトリップつけてんじゃねえよ!悪質だな。

>>574
キーワード探してもぜんぜん分かりませんでした。バシっと教えなさい、クズども。

578 :デフォルトの名無しさん:2006/09/09(土) 16:03:26
他スレッドを強制的に終了させる方法ってありませんか?
スレッドのハンドル以外分からない状況でです。

579 :デフォルトの名無しさん:2006/09/09(土) 16:13:19
TerminateThread

580 :デフォルトの名無しさん:2006/09/09(土) 16:15:36
>>577
俺、スレッド自体作ったことねぇんだけど、
どんな状況でなにができないって言ってるのかさっぱりわからねぇよ。

581 :デフォルトの名無しさん:2006/09/09(土) 17:21:37
>>579
レスありがとうございます。
その関数について調べてみました。

http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_terminatethread.htm

上のサイトには
「スレッドを無条件に終了させる危険な関数であり、非常に特別な場合にのみ使うべきです」
と書いてありますが、定期的に COM に書き込みを行うようなスレッドを終了させるのに
使用しても大丈夫でしょうか?

582 :デフォルトの名無しさん:2006/09/09(土) 17:23:37
>>581
だめだろ。

583 :デフォルトの名無しさん:2006/09/09(土) 17:24:16
MFC で Windows を安全に(スタートメニューから行うのと同じような感じでってことで)
シャットダウンさせるプログラムを作りたいのですが、何か関数とかはないでしょうか?

584 :569 ◆AnMpDtbPAQ :2006/09/09(土) 17:24:47
>>577
偽がここに来るな

>>580
スレッドを作るとスレッドからMFCのエディットボックスを
さわることができないんです。
スレッドの処理で変数を増やしていっても表示ができないので
表示させる方法を教えてほしいんです

アウトプロセスで探したところATLにいきつきましたが
私のやろうとしていることとは違うように見えました

585 :デフォルトの名無しさん:2006/09/09(土) 17:25:35
ウイルスでも作るつもりだろうかね?

586 :デフォルトの名無しさん:2006/09/09(土) 17:27:17
>>583
「windows シャットダウン API」でググれ

587 :デフォルトの名無しさん:2006/09/09(土) 17:28:37
>>582
レスありがとうございます。
やはりフラグを使って終わらせる方が無難ですかね?
すぐに終わらないのが不安ですが・・・

588 :デフォルトの名無しさん:2006/09/09(土) 17:32:35
>>584
MFCのスレッドのサンプルみたら普通にできるだろ
エディットボックス使ったサンプルじゃなくてもやってることは同じだ

589 :569 ◆AnMpDtbPAQ :2006/09/09(土) 17:37:32
>>588
僕の環境VC++7.0なんですけど
見つけたサンプルが8.0でした 開けないです先輩

590 :569 ◆AnMpDtbPAQ :2006/09/09(土) 17:39:36
あ、待ってください探しますwebじゃなくてVC++の中で探して見ます

591 :569 ◆AnMpDtbPAQ :2006/09/09(土) 17:43:26
>>588
それらしきものがありました!ありがとうございます!!

592 : ◆61F0doHXNs :2006/09/09(土) 17:57:43
てす

593 :デフォルトの名無しさん:2006/09/09(土) 18:17:40
>>592
何をしようとしてるんだ何をw

594 :デフォルトの名無しさん:2006/09/09(土) 18:38:42
>>587
おまえ、仕事中に殺されるのと仕事が一段落したときに「死んでいいよ」ってメモを見つけて死ぬのとどっちがいい?

595 :デフォルトの名無しさん:2006/09/09(土) 23:10:34
訳あって2年ほどC++のプログラムまともに書いてないのだけど
今、Windows系のC++の環境ってどうなってんでしょう?
未だにVC++6.0でMFC使ってるんだがバージョンアップした方が良いのだろうか?
というかMFC自体これからどうなっていくのだろうか?
.NETでCLR環境を見据えてプログラミングした方が良いのだろうか?
誰か助言を頼みます。

596 :デフォルトの名無しさん:2006/09/09(土) 23:45:50
>>595
>未だにVC++6.0でMFC使ってるんだがバージョンアップした方が良いのだろうか?
そのままでいいよ
サービスパックはあてようね

597 :デフォルトの名無しさん:2006/09/09(土) 23:59:57
>>596
レスどうも。
色々怖いのでSPは当ててます。
ところでMS製品で、RAD環境なC++で
ネイティブファイルを生成できる物ってないですよね?
そんなのあったら皆使うか… スレ違いすんません。

598 :デフォルトの名無しさん:2006/09/10(日) 16:18:20
>>595
私も、VS6を使い続けて、最近VS2005を購入したものですが
MFCをメインに考えている方には、ぶっちゃけVS6の方が使いやすいと思います
さすがに7年もたったので、インテリセンスもだいぶバージョンアップしていますが(外部マクロをしっかり反映してくれたり)
頭よくなった分レスポンスが悪く、逆に使えなくなっているように感じます
また、統合環境の影響だと思いますがCWがなくなってハンドラー、コントロール変数の作成も面倒くさいし

599 :デフォルトの名無しさん:2006/09/10(日) 16:44:14
lib作ってる場合ってVC6で作った奴って動かなくなってる場合多くね?
なんかしないとコンパイル通らなかった気がする。

600 :デフォルトの名無しさん:2006/09/10(日) 16:46:03
>>598
そんなこと言ったってVC6を使い続けるわけにはいかないんだから、移るしかないっしょ?
そのうち動作保障もされなくなるだろうし。
後は慣れの問題っしょ。

601 :デフォルトの名無しさん:2006/09/10(日) 16:50:02
秀丸はVC5でやってるとか聞いたことあるな
無意味に新しい機能使うと古いパソコンで動かないし

602 :デフォルトの名無しさん:2006/09/10(日) 17:52:17

VS2005 C++
にてMFCプログラミングを勉強しようと思い、

『Visual C++ 2005』という本を購入したのですが
分かり辛く苦労しています。

一般的なマネージプログラムなら組めるのですが
MFCを使用したプログラムを組む方法がいまいち分かりません。

何か、良い書籍がありましたらお教え下さい。


603 :デフォルトの名無しさん:2006/09/10(日) 19:09:18
>>602
俺はMFCが理解できないのはWin32APIでのプログラミングが
よくわかってないからだと思ってるけど。
じっくり、勉強したいか、最速でとりあえず使えるだけにしたいのかで
アドバイスがちがってくるな。
正直、Win32がわかってない状態で読むMFCの本はどれも糞だと思うんだけどw
書籍もかなり買いまくったけど、いい本はほとんどないかな。
最速でとりあえず、使えるようにしたいなら「林晴比古」さんの本もいいと思うよ。
ただ、読んでもなんもわからんよwあくまで手順をたどってそのとおりできたら喜ぶものw

まず、Win32APIの仕組みをちょっと理解したいなら
「猫でもわかるWindowsプログラミング」
がいいと思う。でもこれだと中々前へ進まないけど地道にやってればあるときパッっと
開眼したときにわかりだしたときにすべてが理解できると思う。まあ、1年ぐらいw

俺が死ぬほど使ってる本は
http://www.amazon.co.jp/exec/obidos/ASIN/4891000503
だけど。これは辞書。

604 :デフォルトの名無しさん:2006/09/10(日) 21:06:52
1年もかかったのかw
http://www.amazon.co.jp/gp/product/4756136001/
これ読めば1日でわかるだろ

605 :デフォルトの名無しさん:2006/09/10(日) 21:51:03
API慣れててもMFCすぐ使えるわけじゃないよ
MFCのクラス設計理解しないといけない

606 :デフォルトの名無しさん:2006/09/11(月) 00:50:33
>>602
お勧めできる本は知らないけど
APIレベルでのWINDOWSアプリの概要を把握した上で、CDocumentとCViewとCMainFrameの役割と流れを把握.すれば、その後の習得スピードは一気に上がると思う。
自分はDoc-View-Frameの理解はに構苦労しました。VC特有の本じゃなくオブジェクト指向の説明(MVCとかObserverとか)が結構役に立った気がする。

>>604
あなたは天才。多分世界一。

607 :デフォルトの名無しさん:2006/09/11(月) 01:25:49
>>605
でも、メッセージの動きとWin32APIを知っていれば後は
「似たようなの」探すだけだと思う。
もちろんそれだけじゃ終わらないけど。
ちなみに俺は1〜2ヶ月でなじんだよ。(Win32→MFC)

608 :デフォルトの名無しさん:2006/09/11(月) 09:43:31
MFCの勉強ってことなら
絶対この本
ttp://www.amazon.co.jp/gp/product/4881357042/
6.0に書かれてるけどMFCだったら問題ない

609 :608:2006/09/11(月) 10:11:06
後、MFCはソースがそのまま付いてるから
Doc/View辺りはソースを読むのが一番の理解だと思うけどね
マクロは一度くらいは定義を見たり、プリプロセス後のソースを見ると良いかも

610 :デフォルトの名無しさん:2006/09/11(月) 16:10:06
MFCでダイアログベースのプログラム作ってて疑問に思ったことがあるので
質問させてください。

ダイアログ上の第1ボタンのクリックイベントハンドラに、先ず、ファイルを書き替えますかとメッセージ出して、
OKなら書き換えるというコードを書いてあるのですが、

第1ボタンをクリックして、ファイルを書き替えますかというメッセージが出ているときに、
間違って、第1ボタンをもう一回クリックしたら、ファイルを書き替えますかというメッセージが二重に出ました。

特にスレッドを作成追加したりしてないのに、こんなマルチスレッドみたいになことが起きたので、ビックリしたのですが、
メッセージ出した後、OK等が押されるまで、プログラムは停止しているものではないんでしょうか。

どうしてこんなことになっているのでしょうか。





611 :デフォルトの名無しさん:2006/09/11(月) 16:17:07
まず第一にそういうのはマルチスレッドとは言わない
単にメッセージがモードレスで出てしまってるだけ

>メッセージ出した後、OK等が押されるまで、
>プログラムは停止しているものではないんでしょうか

いいえ

612 :デフォルトの名無しさん:2006/09/11(月) 16:30:03
>>610
>メッセージ出した後、OK等が押されるまで
イベント処理ループに入ってる。
その間、ダイアログにイベントが発生したら、
またイベントハンドラが呼ばれる。

>どうしてこんなことになっているのでしょうか。
メッセージボックスを「アプリケーションモーダル」にしてないから。

613 :デフォルトの名無しさん:2006/09/11(月) 16:35:44
>>610
モードレスダイアログでメッセージ出してるとか?

614 :デフォルトの名無しさん:2006/09/11(月) 16:47:00
そのメッセージだしてるコードさらせボケ

615 :デフォルトの名無しさん:2006/09/11(月) 16:49:31
>>611-613
レスありがとうございます。

単に、::messagebox()でメッセージをだしているだけなんですが、
親ウィンドウハンドルをNULLにしているせいで、モードレスになっているのでしょうか。

メッセージループの構造について勉強しなおしてきます。m(__)m

616 :デフォルトの名無しさん:2006/09/11(月) 17:02:39
はいはい自己解決

617 :デフォルトの名無しさん:2006/09/11(月) 17:23:48
>>614
レスありがとうございます。書き込み中だったので気付きませでした。

モーダレスといっても、そのメッセージハンドラ内では処理中断になっているので、
その状態で、他のメッセージハンドラに移行できるというメッセージループの構造について正しく理解できていないのですが、

::messageboxでなく、this->messageboxを使えば良いというのが分かりました。



618 :デフォルトの名無しさん:2006/09/11(月) 17:59:13
MessageBoxはどんなときもモーダル。
モーダルは処理が止まってるように見えても、内部ではメッセージループが回ってるから
メッセージが発生すれば処理される。
MessageBoxに指定したオーナーウィンドウと親子関係が無いウィンドウはdisableにならないので操作できる。

619 :デフォルトの名無しさん:2006/09/11(月) 19:01:24
>そのメッセージハンドラ内では処理中断になっているので

ここがおかしい

620 :デフォルトの名無しさん:2006/09/11(月) 19:04:43
たまにあるんだよ
MessageBoxが出たときにそれを左右に移動すると
その下のウィンドウが再描画されずに真っ白になるアプリ
ありゃなんでかな?

621 :デフォルトの名無しさん:2006/09/11(月) 22:28:23
>>619
::messagebox(NULL,〜,〜,〜)と親ウインドウ指定せずにやった場合でも、ちゃんとそのメッセージハンドラのコードでは、
OKかキャンセルか処理を待機しているから、処理中断になっているで、間違いないんでは?

622 :デフォルトの名無しさん:2006/09/12(火) 00:40:30
>>621
間違ってないよね。
>>617
モーダルのときはMessageBox側に大半のメッセージが流れるから
第一ボタンを2回押せないだけで、来たメッセージは処理してる。
例えば親WINDOWの上でMessageBox動かした時の背景の再描画とか。
VSの付属品Spy++でみると分かりやすいよ。

623 :デフォルトの名無しさん:2006/09/12(火) 19:11:49
自分でメッセージを作ってメッセージマップと関数を
追加する方法を教えてください

624 :デフォルトの名無しさん:2006/09/12(火) 19:46:00





625 :デフォルトの名無しさん:2006/09/12(火) 20:51:05
自分でメッセージを作ってメッセージマップと関数を
追加すればいいんじゃない?

626 :デフォルトの名無しさん:2006/09/12(火) 22:14:54
メニューやツールバーにコマンド追加すれば楽

627 :デフォルトの名無しさん:2006/09/12(火) 22:26:27
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_Message_Handling_and_Mapping_Topics.asp
これで理解できなかったら諦めた方がいい

628 :デフォルトの名無しさん:2006/09/13(水) 02:00:56
MSDNをON_MESSAGEで検索しる。

629 :デフォルトの名無しさん:2006/09/13(水) 03:05:19
>>627
それは英語だから駄目だな。
普通にGoogleにぶち込んだほうがナンボか早い。

630 :デフォルトの名無しさん:2006/09/13(水) 10:25:50
二次情報に頼りますか

631 :デフォルトの名無しさん:2006/09/13(水) 18:07:23
マルチタスクで
追加しても反応しませんでした
(〜.h)
afx_msg void aaa();
(〜.cpp)
BEGIN_MESSAGE_MAP(CxxxView, CFormView)
ON_COMMAND(WM_TESU,aaa)
END_MESSAGE_MAP()


スレッドからViewにメッセージを飛ばしたいのですが
Viewクラスからスレッドを起動させています
ウィンドウハンドルを渡しています

UIスレッドクラスから
if(abc=SendMessage(hWnd,WM_TESU,0,0))
で送信していますabcには1が帰ってきていました

hWndには受け取ったハンドルを入れてありますWM_TESUは自作メッセージです

しかしView側で用意したaaa関数に反応しませんでした
どこか間違っているのでしょうか?


632 :デフォルトの名無しさん:2006/09/13(水) 18:30:27
まだやってんのか

633 :デフォルトの名無しさん:2006/09/13(水) 18:45:03
ツールバーにドロップダウンボタンを設定しようと思って
ttp://www24.cds.ne.jp/~neg/pro/piyo1/bar/drop.html
ここを参考にして書いたのですが、そもそもドロップダウンボタンが押せなくて困っています。
何かイベントを関連づけなければいけないんでしょうか?

634 :デフォルトの名無しさん:2006/09/13(水) 18:56:00
そのサンプルだとポップアップメニュー出してるようだけど

635 :デフォルトの名無しさん:2006/09/13(水) 19:00:56
あとサンプルでボタンを押した時のメッセージも処理してる

636 :デフォルトの名無しさん:2006/09/13(水) 20:15:09
>>631
ON_COMMANDになってるけど
ON_MESSAGEじゃない?


637 :デフォルトの名無しさん:2006/09/13(水) 20:30:45
>>633
ぱっと見た感じサンプルのコードがおかしいとは思えないので、
原因としてありそうなのは
ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR,OnToolbarDropDown)
の行をちゃんと書いてないとか。


638 :633:2006/09/13(水) 22:08:37
>>637さんのおっしゃるとおり
その部分の第2引数を勝手に換えていたのが原因でした。
そのまま利用したらきちんと動作するようになりました(ただOnToolbarDropDownの第一引数は
そのままでは通らなかったので変更)。
ありがとうございました。

639 :デフォルトの名無しさん:2006/09/14(木) 07:58:45
リソースエディタで使用するStatic Textなのですが、
VBなどのようにプロパティからフォントなど指定して使用できるように
することは出来ないでしょうか?

640 :デフォルトの名無しさん:2006/09/14(木) 09:09:56
>>639
プロパティでやるようなわけにはいきませんが、SetFont()でフォントを指定することはできます。

641 :631:2006/09/14(木) 10:06:27
>>636
ON_MESSAGEに変更したら動きました
ありがとうございます

642 :デフォルトの名無しさん:2006/09/14(木) 13:19:24
>>639
VBで使ってるスタティックテキストは、スタティックテキストじゃなくて
ActiveXのラベルコントロールだからそのコントロールを追加すれば使える


643 :!639:2006/09/14(木) 14:31:57
>ActiveXのラベルコントロールだからそのコントロールを追加すれば使える
ああ、そうか!その手があったなぁ。
VBでWin32APIを使うよりはそっちのほうが楽できそうだ

644 :・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 :2006/09/14(木) 23:36:24
CHyperlinkは欲しいと思う京子の頃




645 :デフォルトの名無しさん:2006/09/15(金) 00:20:25
モーダルダイアロ
しえて


646 :639:2006/09/15(金) 01:48:45
ありがとうございます。
"Label DTC"を追加して試してみました。
プロパティからフォントや色・サイズの指定が出来ました。

しかしながら、VBのように多種多様なこと細かい設定は
出来ないものなのですね・・・

結局、SetFont()で行うことになってしまうかもしれません ^^;

647 :デフォルトの名無しさん:2006/09/15(金) 02:10:27
CHyperlinkてのがWTLにあるのか。
これだから縦割り行政は……(関係無い

648 :デフォルトの名無しさん:2006/09/15(金) 11:19:10
>>644
CHyperlinkがどれくらいのことが出来るのを求めているのかわからんが
codeguruあたりのcontrolみればそれっぽいのは転がってるぞ
それにHyperlinkなんて対して難しくないわけだし
無いコントロールは自分で作る、これMFCで開発してたら当たり前


649 :デフォルトの名無しさん:2006/09/15(金) 23:52:47
MFCが嫌われてる理由ってなに?
クラス設計が悪いとか、サイズが大きくなるとかはなしでお願い。

650 :デフォルトの名無しさん:2006/09/16(土) 00:00:57
馬鹿には使えない

651 :・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 :2006/09/16(土) 00:13:13
>>648
んなこと言ったら出来合のもので全部賄えるクラスライブラリなんてないよ

652 :デフォルトの名無しさん:2006/09/16(土) 02:12:01
さあ、IE7がでました。
新しいGUIとの格闘のゴングが鳴ったといっていいでしょうねw
馬鹿なお客もより一層いい臭いを漂わせること間違い無しです。

653 :デフォルトの名無しさん:2006/09/16(土) 02:27:40
>>649
クラス設計が悪い

654 :デフォルトの名無しさん:2006/09/16(土) 02:40:02
>>648
良く使う機能をVC側で用意すべきだという意見に対して
簡単だから自分で作れという意見は、明らかにズレてる。
簡単だから必要ないというならツールボックスに含まれる
コントロールの半分以上は必要ないってことになってしまう。
使う使わないは別にして、無いよりあった方が良いだろ。

>無いコントロールは自分で作る、これMFCで開発してたら当たり前
こんなのドシロウトを別にすればMFC開発にに限らず誰でもやってること。

655 :デフォルトの名無しさん:2006/09/16(土) 13:18:40
maidsan.lib使えば簡単だよ

656 :デフォルトの名無しさん:2006/09/16(土) 14:08:40
チェックボックスでチェックが有る、無しと
複数選択されているグレー表示を行いたいのですが
どうすれば良いのでしょうか?

657 :デフォルトの名無しさん:2006/09/16(土) 15:30:23
check dialog button

658 :デフォルトの名無しさん:2006/09/16(土) 15:32:07
BM_SETCHECK

659 :デフォルトの名無しさん:2006/09/16(土) 18:55:53
656です!
ありがトンです。

660 :デフォルトの名無しさん:2006/09/20(水) 12:35:40
CHtmlViewを、WS_EX_LAYEREDに対応する都合でWS_CHILDではなくWS_POPUPで生成したいのだけど、CWnd::CreateのASSERTにひっかかるぉ。
その部分のMFCソースのコメントに "CreateExを使え" とか書いてあるんだけど、CHtmlViewにはCreateExが無い。

CHtmlViewをWS_EX_LAYERED対応にするにはどうしたらいいのでしょう?

661 :デフォルトの名無しさん:2006/09/20(水) 13:00:31
私が作ったプログラム(prog1)で、MFCでウインドウを作って、ステータスバーに、
SetPaneTextでメッセージを表示させているのですが、prog1からCreateProcessで起動した
別プログラム(prog2)がCPUを猛烈に占有するので、メッセージの更新が出来ない場合があります。
症状としては、ウインドウが再描画されないみたいです。
こういう場合、確実かつ強制的に、特定のウインドウを再描画して、正しく描画させる方法
ってありますでしょうか?よろしく。
CPUはP4 3.6GHzなので、そんなに力不足ではないと思うのですが。

662 :デフォルトの名無しさん:2006/09/20(水) 13:17:32
>>660
CHtmlViewでCreateEx使えなかったっけ?
MSDNで見ると使えそうだけど

663 :デフォルトの名無しさん:2006/09/20(水) 13:24:59
>>661
プロセスの優先度を調整。
prog2を少し下げてやるといい。

664 :デフォルトの名無しさん:2006/09/20(水) 14:26:43
>663
ありがとうございました。
早速ためしてみたのですが、prog1の優先度を上げたり、prog2の優先度を
下げたりしたのですが、状況は変わりませんでした。
原因がprog1のコーディングにある可能性もあるのですが、
困りました。

665 :660:2006/09/20(水) 14:31:08
>>662
>CHtmlViewでCreateEx使えなかったっけ?
呼べちゃいますが、CHtmlViewでオーバーライドされてないので、CViewが直接呼ばれ、HTMLの初期化がされないので正常動作しない模様。


666 :デフォルトの名無しさん:2006/09/20(水) 15:12:34
>>661
SetPaneText()のすぐ後で
RedrawWindow()するか
InvalidateRect()&UpdateWindow()してみては?


667 :デフォルトの名無しさん:2006/09/20(水) 16:00:30
>666
ありがとうございます。

ステータスバーに文字描画
InvalidateRect()
UpdateWindow()
Beep() //確認のため

こんな感じの処理を1秒おきに呼び出しているのですが、Beepは1秒おきにちゃんと
鳴るんですが、再描画がまったくできません。
ときどき成功することもあるのですが、その場合でも、ウインドウのサイズを変更
したりすると、『反応無し』というタイトルになって、ウインドウ全体が(ステイタスバーも
含めて)まったく反応しなくなります。
でもprog2が終了すると、無事にprog1が反応を取り戻します。
何が悪いんでしょうか?

668 :デフォルトの名無しさん:2006/09/20(水) 17:25:05
prog1はprog2を起動した後何してるんだ?

669 :デフォルトの名無しさん:2006/09/20(水) 17:49:52
prog1の処理の流れはだいたいこんな感じです。
関数execute_prog2()を実行するとBeepはいつでも1秒おきに鳴るんですが、
『反応なし』の状態になってウインドウの再描画が、停止します。
どこかおかしな所がありましたらアドバイス御願いします。
------------------------------------------------------------

//prog1のステータスバーに文字を描画する関数
void report_progress(int n)
{
 ステータスバーに数字 n を描画
 InvalidateRect()
 UpdateWindow()
 Beep() //確認のため
}


// 新しいスレッドでprog2を実行し、終了するまで待つ関数
unsigned __stdcall start_thread(void *lpx)
{
 hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, EVENT_NAME);
 WaitForSingleObject(hEvent, INFINITE);

 strcpy(buf, "prog2.exe");  // prog2を起動する準備
 bSuccess = CreateProcess ( NULL, buf,
NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,
NULL, NULL, &si, &pi );
 bSuccess = WaitForSingleObject( pi.hProcess, INFINITE );
 CloseHandle( pi.hProcess );

 CloseHandle(hEvent);
 return(0);
}

670 :デフォルトの名無しさん:2006/09/20(水) 17:51:28
//新しいスレッドを作成してprog2を起動
//スレッドが終了するまで、ループしながらステータスバーに文字を表示する
void execute_prog2()
{
 hTh = (HANDLE)_beginthreadex(NULL, 0, start_thread, NULL, 0, (unsigned int*)&thID);

 while (1) {
  GetExitCodeThread(hTh, &dwExCode);
  if (dwExCode == STILL_ACTIVE) {
   printf("スレッド実行中\n");
   Sleep(1000); n++;
   report_progress(n);
  } else {
    break;
  }
 }
 ・・・・
 ・・・・
}

671 :デフォルトの名無しさん:2006/09/20(水) 18:22:07
>>669-670
670のコードってprog1側に書かれてるんだと思うけど、それならprog1側が悪い。
PumpMessage(),PeekMessage(),TranslateMessage(),DispatchMessage()あたりを
キーにしてググればわかるはず。
で、その辺をきっちりすれば、>>666で書いたことは不要になるかも。
とりあえず調べてみて。

>>660
今のウィンドウ構成はどうなってる?
トップレベルウィンドウにWS_EX_LAYEREDつければできるよ。
CHtmlViewをトップレベルウィンドウにしようとしてるなら
そもそもそれが無理。

672 :デフォルトの名無しさん:2006/09/20(水) 18:59:30
>>669
bSuccess = WaitForSingleObject( pi.hProcess, INFINITE );

このINFINITEを0にして戻値がWAIT_TIMEOUTの間は671の書いたこと
やってれば良いんじゃないかな。ただ終了待ちの間に、触って欲しく
ない部分も多いと思うので、prog2終了までは
AfxGetMainWnd()->EnableWindow(0)とかやっておいたほうがよさげ。

一番違和感を感じたのは関数start_threadで別プロセスを起動して
関数execute_prog2でスレッドを起動してる点

673 :デフォルトの名無しさん:2006/09/20(水) 19:04:12
もしかして670は別人かな。
スレッドにする理由が見つからない。

674 :デフォルトの名無しさん:2006/09/20(水) 19:35:49
669=670=私です
もともとスレッドにしていなかったのですが、
いろいろ試行錯誤していたらこんな形になってしまいました。
こういう構造が良いのかどうかも含めて問題点を指摘していただけると
ありがたいです。
とりあえず、みなさんのアドバイスを元に、今からトライしてみます。

675 :デフォルトの名無しさん:2006/09/20(水) 22:15:33
>670 みたいに メッセージループ以外でぐるぐる回し続けてもいいんだろうか?
cpu100%いったりしない?

676 :デフォルトの名無しさん:2006/09/20(水) 22:27:29
待機状態にならなければ100%。
100%じゃなくても、ユーザーインターフェーススレッドなら
一定時間メッセージ処理しないと応答なしと判断される。

677 :デフォルトの名無しさん:2006/09/20(水) 22:44:42
execute_prog2の中で671-672やれば良いきがする。
スレッド作って終了待ちして、そのレッド内でプロセス呼び出して終了待ちって
同じこと2回やってるように見える。

678 :デフォルトの名無しさん:2006/09/21(木) 00:17:29
MFC のダイアログベースで作成したプログラムについて質問です。
タスクバーに表示されるアイコンを消去するにはどうしたら良いですか?
タイトルバーのアイコンはシステムメニューをオフにすればできましたが、
タスクバーのアイコンだけを消すことはできないでいます。

679 :デフォルトの名無しさん:2006/09/21(木) 01:10:27
Application Window ⇒ True
Tool Window ⇒True
とか
WS_EX_APPWINDOW | WS_EX_TOOLWINDOW

680 :デフォルトの名無しさん:2006/09/21(木) 09:33:28
非可視のウィンドウをオーナーにするとか

681 :デフォルトの名無しさん:2006/09/21(木) 11:05:43
prog1,prog2の質問の本人ですけれど、スレッドをやめて、
672さん(671さんも)のアドバイスに従ってトライしたら、無事に
できました。大変勉強になりました。ありがとうございます。
追加でもう一つ質問なのですが、
AfxGetMainWnd()->EnableWindow(0)
としたら、ウインドウに対する操作が一切できなくなるようですが、
その状態でもESCAPEキーだけは押されたかどうか知りたいのですが、
可能でしょうか?

682 :デフォルトの名無しさん:2006/09/21(木) 11:44:19
同じく本人ですけれど、
>675
>676
prog1 約50%
prog2 約40%
で合わせて90〜100%です。
prog2の40%は仕方ないんですよね?

683 :デフォルトの名無しさん:2006/09/21(木) 12:28:36
そんなのprog2作った奴しか知らん

684 :デフォルトの名無しさん:2006/09/21(木) 17:44:03
>>681
その状態では不可能。EnableWindow(0)をやめてPeekのあと
MSGを拾うなり捨てるなり流すなりすれば出来る。

681=ちょっと前にUIスレッドの件で叩かれた人だと思うけど
やりたい事or問題点を明確にしないまま情報を小出しにして質問
するから回答のほうもぐだぐだになる。もう疲れたよ。

685 :デフォルトの名無しさん:2006/09/21(木) 21:17:32
apiスレにもそれっぽい書込みがあるな

686 : ◆AnMpDtbPAQ :2006/09/22(金) 10:16:05
>>684
言っておきますが>>681と私は別人ですよ
おかげさまで私のほうは今うまくいってます

687 :デフォルトの名無しさん:2006/09/22(金) 20:22:54

ダイアログバーに配置したエディットを配置した状態で、クリップボードや
CEditのテキストの状態に応じてツールバーのID_EDIT_CUT等のボタンの処理を
行いたいのですがうまくいきません。
CMainFrameにOnUpdateEditCopyを書いても呼ばれません。
どのようにすれば実現できるのでしょうか。
ご存知の方、教えてください。


688 :デフォルトの名無しさん:2006/09/22(金) 21:18:39
>>687
質問内容が不明瞭。

ダイアログバー上のCEditのテキストを取得方法を聞いているんだとすれば
・GetDlgItemText()で直接取得してしまう
・CDialogBarを派生させて、その中にDDX/DDVルーチンを書く
のどちらかで。
前者の方が簡単、後者はDDX/DDVが分ってないとキツイ。

689 :デフォルトの名無しさん:2006/09/22(金) 21:43:44
>>687
もう少し、回答者にわかりやすい質問にしないと絶対に答えは出てこないぞ
文章だけを読むと結局何が知りたいのかわからん

ダイアログバー上のテキストの値の取得をしたいのか?
クリップボードの状態を知りたいのか?
ID_EDIT_CUTのOnUpdateCommnaUIがよばれないのか?
一応読み取れたのこの3つだが

690 :デフォルトの名無しさん:2006/09/24(日) 17:06:50
親ウインドウのポップダウンメニューの選択(OnMenu)で
モーダレスダイアログ(dlg1)を作成/消去したいです。

作成に関してはOnMenuからdlg1のCreate()を呼ぶことで出来たのですが、
消去に関して、OnMenuからdlg1でオーバーライドしたOnCancel()を呼ぶと
コンパイルは出来るのですが、実行中に
Debug Assertion Failed!
というエラーが出てしまいます。

上記の方法は間違っていますか?もし間違っているのなら、
どのようにすればモーダレスダイアログの消去をメニューの選択で出来るのでしょうか?
わかる方教えてください。お願いします。

691 :デフォルトの名無しさん:2006/09/24(日) 17:25:22
Assertでてるならそこ調べれば?

692 :デフォルトの名無しさん:2006/09/24(日) 17:56:06
>>690
ソース出てないので確信はもてないけど
オーバーライドしたOnCancelのなかで、やってはいけない事やってるんだと思う。
VCの機能を使ってオーバーライドすると、MSDNにやってはいけないと書いてる事を
VCが勝手に付け加えるんだよね。

693 :デフォルトの名無しさん:2006/09/24(日) 18:35:02
>>691
エラーメッセージに書かれてたのはdlgcore.cppの572行目なんですが
調べてみると
ASSERT(::IsWindow(m_hWnd));
と書かれてました。これはどういうことなんでしょう?

>>692
OnCancelは、
void dlg1::OnCancel()
{
  CDialog::OnCancel();
}
だけです。CDialog::OnCancel()はVCが付け加えたものだと思いますが、
これがやってはいけないことなんでしょうか??
これを消すとエラーは出なくなりましたが、
ダイアログの閉じるボタンで閉じることも出来なくなるのですが。。。

694 :デフォルトの名無しさん:2006/09/24(日) 18:53:53
CDialog::OnCancel の説明読めよ

695 :デフォルトの名無しさん:2006/09/24(日) 19:28:32
説明嫁は同意だけど、モードレスダイアログ使うのって面倒臭いよね。
めったに使わないから、やりかた忘れちゃうし。
たまにダイアログ内部で生成/破棄やる人いるし。

696 :デフォルトの名無しさん:2006/09/24(日) 19:31:42
MS推奨は自殺だったかな?

697 :デフォルトの名無しさん:2006/09/24(日) 21:30:49
こんなんだ
http://www.athomejp.com/goldfish/mfc/dialog/modeless.asp

698 :デフォルトの名無しさん:2006/09/25(月) 03:20:42
>>690,>>693です。

dlg1::OnCancelを
void dlg1::OnCancel()
{
  DestroyWindow(); 
// CDialog::OnCancel();
}
に変更したところ、ダイアログのほうは問題なく動作しましたのですが、
相変わらずOnMenuからダイアログの消去が出来ません。
OnCancel()は、dlg1から呼ばれた場合には正常に動いているのですが
OnMenuから呼ばれた際にDestroyWindow()が動かないのです。。
原因として考えられることって何でしょうか?

699 :デフォルトの名無しさん:2006/09/25(月) 06:18:40
>>698
だから、>>697のリンク先みたいに状況によって消し方が変わるって話じゃないの?

700 :デフォルトの名無しさん:2006/09/25(月) 08:20:01
>コンパイルは出来る

ローカルなインスタンスでもコンパイルは通るだろうなと思った。

701 :デフォルトの名無しさん:2006/09/25(月) 09:16:37
>>690,693
PostMessageでdlg1にメッセージIDCANCELを送る
dlg1のOnCancelは最初のままでいい

702 :701:2006/09/25(月) 09:26:27
追加
他のウィンドウのOnXXXXを直接呼ぶのはダメ
それに該当するメッセージを送ること(Ex.OnCancelならIDCANCEL)

MFCは4年ほどやってないから間違っているかもしれないけど
間違ってたらスマソ

703 :701:2006/09/25(月) 09:36:41
>>690
これ参考にして
モードレスダイアログの作り方
http://www.bnote.net/sdk_mfc/mfc2.shtml

704 :デフォルトの名無しさん:2006/09/25(月) 10:58:11
俺はここ参考にしてずっとやってる。
ttp://www.interq.or.jp/jazz/iijima/mfc/mfc_index.html

705 :デフォルトの名無しさん:2006/09/25(月) 11:00:15
スレッドクラスxxxにおいて

xxx *tesuThread
tesuThread=new xxx[100]というように配列生成したいのですが
コンストラクタがprotecteで宣言されているのでアクセスできませんでした

そこでpublicに変えたのですが
error C2582: 'operator '=' 関数を 'xxx' で使用できません。
というエラーがおきます


706 :デフォルトの名無しさん:2006/09/25(月) 11:16:09
質問趣旨とは違うけど、モードレスダイアログの使い方だったらこんな方法もある
CMainFrame上のステータスバーとかと同様に
メインダイアログで実態を保持して、OnCreateで作成、あとは表示非表示する
oncancelで基底のoncancelを呼び出さないで、showwindow(sw_hide)
,OnMenuでm_wndXXX.showwindow(sw_hide)する
単純なプロジェクトで値のINOUTが面倒くさかったり、表示位置を覚えておくタイプの場合有効
ちなみに、~cdialogでウインドウハンドルがあればdestorywindowを呼び出すから
アプリが終わればウインドウは破棄される

707 :デフォルトの名無しさん:2006/09/25(月) 11:22:13
スレッドまとめて100個作るのって見たことないな

708 :デフォルトの名無しさん:2006/09/25(月) 11:23:19
>>705
スレッドクラスは、newはまずいので
配列管理したければ
forでまわす

709 :デフォルトの名無しさん:2006/09/25(月) 11:47:54
>>708
ありがとうございます

710 :デフォルトの名無しさん:2006/09/25(月) 11:52:12
>>705
MSDNでc2582検索してみると的確な答えが載ってる

711 :デフォルトの名無しさん:2006/09/25(月) 12:01:19
wizardでは、protectedで生成されるけど
newしちゃいけないとは書いてないな
createthreadの項みると、連続したスレッドの生成OKみたいなこと書いてある
cwinthreadとafxbeginthreadのソース見ながらスレッド生成すればnew[]出来ないことも無さそう

712 :デフォルトの名無しさん:2006/09/25(月) 12:08:24
訂正
newはだめだCreateObjectで生成するみたい

713 :デフォルトの名無しさん:2006/09/25(月) 12:36:58
ありがとうございます
CreateObject使ってみます


714 :デフォルトの名無しさん:2006/09/25(月) 13:09:15

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

xxx* Thread:
Thread= (xxx*)RUNTIME_CLASS(xxx)->CreateObject();

715 :デフォルトの名無しさん:2006/09/25(月) 13:17:58
ふつうのやりかたでじゅうぶんだな

716 :デフォルトの名無しさん:2006/09/25(月) 13:39:39
成功したと思ったんですが
数を受け取りxxxのメンバ変数を初期化させる関数を作りました

void xxx::GETINT(int x){
xxx=x //int型メンバ変数xxxに代入
}


for(i=0;i<4;i++){
Thread[i].GETINT(int x);
}

なぜか3番目で

0x00412ff6 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00e18294 に書き込み中にアクセス違反が発生しました。 。

という表示が出て失敗してしまいます1番目と2番目は成功してるのに・・・orz

717 :デフォルトの名無しさん:2006/09/25(月) 13:41:38
まず普通のやり方を勉強しよう。

718 :デフォルトの名無しさん:2006/09/25(月) 15:14:57
普通のやり方教えてください

719 :デフォルトの名無しさん:2006/09/25(月) 15:55:55
多分普通のやり方でいけました

720 :デフォルトの名無しさん:2006/09/25(月) 23:02:19
結果も普通でした。

721 :デフォルトの名無しさん:2006/09/26(火) 04:37:34
すみません
CMapPtrToPtrのGetStartPositionの戻り値となっている
POSITION型とはどのような型なのでしょうか
キーワードが一般的過ぎて
WEBのMSDNの検索でもうまく引っかかりませんorz

722 :デフォルトの名無しさん:2006/09/26(火) 07:49:02
「マップの順次検索を開始する位置」
この説明でわからないんじゃ説明しようがないな
ひょっとしてC++初心者ですか?

CMapStringToOb::GetStartPosition
POSITION GetStartPosition( ) const;

戻り値
マップの順次検索を開始する位置を POSITION 値で返します。マップが空の場合は NULL を返します。

723 :YOSK:2006/09/26(火) 11:23:53
ここ一ヶ月はまってしまっています。どなたか助けてください。
現状はとしては、MFCでビデオ録画アプリケーションを実装中です。

CFileDialog dlg(TRUE);
dlg.DoModal();

この2行を追加すると、スレッド待ちのような状態になって
アプリケーションを終了できません。
当初はプロジェクトの設定やライブラリに原因があるのかと思っていましたが、
どうもコモンダイアログからコモンダイアログ(CFileDialog)を呼んでいるのが問題?のようです。
なにか考えられる原因がございましたら、ご教授願います。

724 :デフォルトの名無しさん:2006/09/26(火) 11:35:22
>>723
それはスレッド待ちではない。
「コモンダイアログからコモンダイアログ(CFileDialog)を呼んでいる」のが根本的な問題でもない。
モーダルダイアログがどんな動作をするのかを理解してないのが問題。

725 :YOSK:2006/09/26(火) 11:56:18
>>724
返答ありがとうございます。
「どんな動作」というのは、モールダイアログが開いているときには、オーナーウィンドウが
一切の入力を受けないとか、独自のメッセージループを持っているということで間違いないでしょうか。

そうであれば、「OK」や「キャンセル」でこれを終了した場合にアプリケーションが終了しないのは、
モーダルダイアログが「OK」や「キャンセル」で死亡しない場合があるのではないかと考えましたが
どう思いますか?
無知なもので誠に申し訳ない・・・。

726 :デフォルトの名無しさん:2006/09/26(火) 12:37:04
>>723
>コモンダイアログからコモンダイアログ(CFileDialog)を呼んでいるのが問題?のようです。
この部分がイメージできません。もう少し具体的に...

あと、新規プロジェクトで上記のことだけをやってもアプリの終了ができなくなります?

727 :YOSK:2006/09/26(火) 13:01:55
>>726
いえ、新規プロジェクトでは終了できました。
新規プロジェクトで
アプリケーションの初期化時にDoModalを呼ぶプログラムを作り、動作を確認しながら
コードを追加していき、現在のプロジェクトに近づけていく途中で終了できなくなります。

しかしながら、これで原因が特定できない理由として
この作業を行うと、その時々によって終了できなくなる原因が違います。

現在は、このプロジェクトでは、ビデオストリームを送受信するライブラリをはじめとして
多くのリンクオブジェクトがあります。これらに原因があるかもしれません。
そこで、CFileDialogを利用する場合に考慮するべき点(必須事項、禁止事項)について調べています。

>コモンダイアログからコモンダイアログ(CFileDialog)を呼んでいるのが問題?のようです。
やはりこの部分は関係ないようです。無視してくださって結構です。


728 :YOSK:2006/09/26(火) 13:05:31
この辺も曖昧なのですが、OLEライブラリの初期化
AfxOleInit()
を行っていないことが原因ではないみたいですが、
関係ないですよね?確認までに。

729 :デフォルトの名無しさん:2006/09/26(火) 13:09:12
こんなやつよく相手してやるなと感心した

730 :デフォルトの名無しさん:2006/09/26(火) 13:20:36
>>728
これ試してみて。
m_ofn.lStructSize=OPENFILENAME_SIZE_VERSION_400;

731 :デフォルトの名無しさん:2006/09/26(火) 13:21:56
>>722
レスありがとうございます

STLでいうところのイテレータのようなものだと思えば
良さそうですね
POSITIONという名前なので、
RECTだとかPOINTのように
もっと広く使われているものかと勘違いしていました

//C++初心者ではないがMFCは初心者^^;

732 :デフォルトの名無しさん:2006/09/26(火) 13:46:47
プログラム全体をtryで括って、例外をただのエラーメッセージ(+強制終了)みたいな感じにしたいです。
CWinApp::ProcessWndProcException を処理すればいいみたいですが、
使いたいのはCExceptionから派生してない自作例外クラスなのです。

これって、CExceptionを継承するように自作例外クラスを書き直すしかないでしょうか?

733 :デフォルトの名無しさん:2006/09/26(火) 16:11:55
環境VC++ 6.0

質問です。

class DialogB : virtual public CDialog
{ // for modeless.
:
:
}

class CDialogADlg : virtual public CDialog, public DialogB
{
:
:
}

以上のようにBダイアログを継承したAダイアログを表示させたいのですが、
(Aを表示させるとBも表示させる)
なかなかうまくいきません、通常このようなことはやらない(できない)のでしょうか?

継承させずにAの中でBをnewしてmodelessという方法では(´・ω・`)なので・・・

734 :デフォルトの名無しさん:2006/09/26(火) 16:38:36
継承について勘違いしてると思う

735 :デフォルトの名無しさん:2006/09/27(水) 00:09:41
>>733
なぜ、(´・ω・`)なのかその理由が知りたいが・・・
とりあえず、言える事は、mfcをやる前にC++の勉強をしなおしたほうがいい

736 :デフォルトの名無しさん:2006/09/27(水) 01:10:53
VC++6.0 MFC(ダイアログベース)

下記のソースコードを実行しても
ファイルがカキコミできません。
どなたか、ファイルが書き込みできない理由を
教えてください。

void CXfile_MotionReaderDlg::OnButton1()
{
CFileDialog *dlgFile;

dlgFile = new CFileDialog(
TRUE, // 種類 TRUE : FileOpen
_T("jpg"), // デフォルトの拡張子
_T("*.jpg"),// 初期ファイル名
OFN_FILEMUSTEXIST, // ダイアログの設定フラグ:既存のファイル
_T("Wave(*.jpg)|*.jpg|全て(*.*)|*.*||")// フィルタ
);

if(dlgFile->DoModal() == IDOK)
{
CStdioFile fout( "file.text", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary );
fout.WriteString( dlgFile->GetPathName() );
fout.Close();
}

delete dlgFile;

}

737 :デフォルトの名無しさん:2006/09/27(水) 01:25:00
>>736
・向こうのレスは見た?
・誘導されたときはそのこともきちんと書いておこうね。
・「書き込みできない」をどうやって確認した?

738 :デフォルトの名無しさん:2006/09/27(水) 01:42:46
マルチレス荒らしかよヽ(`Д´)ノ
Wave(*.jpg)で気付くべきだったorz

739 :733:2006/09/27(水) 01:48:34
>>734,735
レスありがとうございます。C++から勉強して出直してきます

740 :デフォルトの名無しさん:2006/09/27(水) 01:51:21
CDCをCBitmapに変換するにはどうすればいいですか?

741 :デフォルトの名無しさん:2006/09/27(水) 01:56:12
>>740
不可能

742 :デフォルトの名無しさん:2006/09/27(水) 02:26:42
というかなんで
dlgFile = new CFileDialot(...);
ってヒープに積むのかが分からん
スタックに積めよ

743 :デフォルトの名無しさん:2006/09/27(水) 04:02:17
SDKで開発しているんですが
一部MFCの関数(ラッパークラスやコンテナなど)
を使ってソフトを作ることは可能でしょうか
どこに書き込むか迷ったんですが、もしスレ違いでしたら移動します

744 :デフォルトの名無しさん:2006/09/27(水) 07:11:19
その用途なら、ATLとWTLで事足りると思う。
MFC使うなら、最初からじゃないと、色々面倒な事になりそうだし。

745 :デフォルトの名無しさん:2006/09/27(水) 19:34:10
>>744
ATLは名前だけ聞いたことがありましたが
WTLっていうのは初耳でした
テンプレートは好きなんでちょと調べてみます
ありがとうございました

746 :デフォルトの名無しさん:2006/09/30(土) 22:57:54
ダイアログに貼り付けた複数のスタティックテキストなどの
配置をまとめて行うことはできますか?
サイズ可変のダイアログに複数のコントロールを貼り付けた時に
全てのコントロールについて座標をしてポジションを決めるのが
面倒なのですが。


747 :デフォルトの名無しさん:2006/09/30(土) 23:00:07
>>746
> 座標をして
座標を計算して

748 :デフォルトの名無しさん:2006/09/30(土) 23:11:10
馬鹿には無理
あきらめろ

749 :デフォルトの名無しさん:2006/09/30(土) 23:27:03
>>746
OnInitDialogで

CPtrArray ctrl;
ctrl.Add(mA);
ctrl.Add(mB);
ctrl.Add(mC);





ってやっとけば?

750 :デフォルトの名無しさん:2006/10/01(日) 00:54:16
>>746
可変サイズでポジションを自動でかえるって事なら
自動でやってくれる、クラスやマクロが転がっているからそれを使うのもあり
それで対応できないようだったら、コントロール変数を配列で管理して自分で計算するのがいいと思う

751 :デフォルトの名無しさん:2006/10/01(日) 01:22:16
CDialogResizeの事?

752 :デフォルトの名無しさん:2006/10/01(日) 01:22:47
スマンWTLスレと間違えた

753 :746:2006/10/01(日) 13:16:16
>>750
クラスやマクロについて教えて頂けると助かります。


754 :デフォルトの名無しさん:2006/10/01(日) 14:10:39
>>753
codeguruなどのHPに行って
SEARCHで resize dialog
と打つ、よさそうなサンプルソースをダウンロードして使い方を確認
ただし、そのソースを使う場合あくまでも自己責任で

755 :デフォルトの名無しさん:2006/10/01(日) 14:31:22
>>753
補足
751が言ってるWTLのCDialogResizeはコントロールの均等割りが出来るので優秀
ソースは短いのでCDialogResizeを解析して組み込むのもありかもしれない
codeguruのサンプルだとサイズと位置の自動化は多いが
均等割りはあるものとないものがあるからよく調べて使ったほうがいい

756 :デフォルトの名無しさん:2006/10/01(日) 16:32:26
全部自動でやってくれるやつはないよ

757 :・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 :2006/10/01(日) 16:39:27
WTLはCPLなので、改変したらソースコード公開の義務が発生するぽ

758 :デフォルトの名無しさん :2006/10/01(日) 20:32:20
VS2005Stdで、最近mfcを勉強しだしたんですが
クイックヒントの表示で、CViewを見ると [ class CView abstract ]
と出ていて、定義を見ると純粋仮想関数があるので抽象クラス
となるのはわかるのですが、javaのメソッド修飾子であるabstract
が、なぜC++のクラス名の後についてるんでしょうか?
定義を見ても特にabstractという語句がついてはいないようです。
ただ、特別問題があるわけでは無いのですが、疑問に思ったので
どなたか知っている方がいれば教えていただきたいです。

759 :デフォルトの名無しさん:2006/10/01(日) 22:59:28
>>758
MFCを.NET(C++/CLI)化できるようにしてるんじゃない?


760 :デフォルトの名無しさん:2006/10/02(月) 00:50:55
abstractキーワードはあるよ

761 :デフォルトの名無しさん:2006/10/03(火) 03:46:56
CWndクラスのSetTimerを呼ぶとASSERTが出ます。調べるとAFXWIN2.INLの

_AFXWIN_INLINE UINT CWnd::SetTimer(UINT nIDEvent, UINT nElapse,
void (CALLBACK* lpfnTimer)(HWND, UINT, UINT, DWORD))
{ ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse,
(TIMERPROC)lpfnTimer); }

の部分で引っかかるようなんですが、これって何が原因なのでしょうか?
SetTimer関数は、
m_nTimer = SetTimer(1, 2000, NULL);
のように呼んでいます。

762 :デフォルトの名無しさん:2006/10/03(火) 06:14:04
ASSERT(::IsWindow(m_hWnd));
指定されたウィンドウハンドルを持つウィンドウが存在していない。
コンストラクタでSetTimerやってるとかじゃないかな。

763 :質問者:2006/10/03(火) 21:17:04
VC6++でReBarを使ってプログラム書いています。
ReBarにPushButtonを配置したところ、デフォルトの状態で無効(灰色
文字)になっていました。
→そこでSubclassDlgItemで割り付けたCButtonのオブジェクトで、
 EnableWindowを実行しましたが無効状態は解除されませんでした。
→EnableWindowをやめ、C***Appの下記のメッセージマップに習って、
   ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
   ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
 下記を追加しました。(OnButton1はC***Appで自分で追加した関数)
   ON_COMMAND(IDC_BUTTON1, OnButton1)
 そうしたところPushButtonが初めて有効(黒文字)になりましたが、
 ボタンをクリックしてもOnButton1に飛んできません。

状況は上記で、質問は下記です。(上記内容のほとんどですが・・・)
質問1 EnableWindowで何故有効にならないのか?
質問2 ON_COMMAND追加したら何故有効になったのか?
質問3 メッセージマップに追加したのに何故OnButton1に来ないのか?
どこか参考になるページでもあれば紹介お願いします。

尚、CButtonを継承したクラスのオブジェクトをSubclassDlgItemで割り付け、
そのクラス内からメッセージをMainFrameに投げることで、とりあえずその
場しのぎは出来ております。

764 :デフォルトの名無しさん:2006/10/03(火) 22:01:44
>>763
これだな
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_when_update_handlers_are_called.asp
>If the framework does not find an ON_UPDATE_COMMAND_UI entry during command routing,
>it automatically enables the user-interface object if there is an ON_COMMAND entry somewhere with the same command ID.
>Otherwise, it disables the user-interface object.

765 :デフォルトの名無しさん:2006/10/03(火) 22:28:48
ボタン押下のハンドラは、たしかON_BN_CLICKEDじゃなかったっけ?

766 :763:2006/10/03(火) 22:35:04
英語苦手ですが何とか分かりました。ON_COMMANDがあるかどうかで、
フレームワークがEnable/Disableを自動的に設定してしまうといった意味
合いですね。ON_COMMAND(IDC_BUTTON1, OnButton1)を追加したとこ
ろまでは、手順として正しいということでしょうか?
後、質問3ですがOnButton1を普通の

 void OnButton1();
で宣言していたことが原因でした。
メッセージ関数のところに
 afx_msg void OnButton1();
と宣言したところ呼ばれるようになりました。お騒がせしてすいません。
(いつもClassWizardに頼ってばかりであまり自分で書いたことなかったです。)
>>764 さんどうもありがとう。

>>765
CButtonの継承先ではON_BN_CLICKEDを使ってます。
ただ、もう継承不要ですが・・・

767 :デフォルトの名無しさん:2006/10/03(火) 23:30:05
>>766
afx_msg付けたら呼ばれるようになることは多分ないと思うよ
定義見ればわかるけど
#define afx_msg
だから

ちなみに自分で書いたコマンドハンドラはやメッセージハンドラは
ディフォルトで灰色になる部分には書かないように

768 :デフォルトの名無しさん:2006/10/04(水) 08:21:37
VC++.net(2002)のシングルドキュメントの窓の領域の
x,y座標の最大値を取得するにはどうすればいいんですか。

769 :デフォルトの名無しさん:2006/10/04(水) 09:24:20
「窓の領域のx,y座標の最大値」とやらを説明してくれ。
クライアント領域のサイズか?

770 :デフォルトの名無しさん:2006/10/04(水) 09:31:03
>>769
用語に自信がないけど、そういうことです。
本を見ながらためしに作ってみた
CSize siz;
CRect rct;
CWnd *wnd=GetDlgItem(IDR_MAINFRAME);
wnd->GetWindowRect(rct);
siz=rct.Size();
は5行目で実行エラーになります。

771 :デフォルトの名無しさん:2006/10/04(水) 10:40:33
クライアント領域の大きさは、GetClientRectを使う。
が、ウィンドウの取得方法が間違っているに一票。
どのクラスからのアクセスか判らないと、答えの書きようがないが。

772 :デフォルトの名無しさん:2006/10/04(水) 10:49:03
CprjViewでとりあえず作っています。
なおprjはプロジェクト名が入ります。

773 :デフォルトの名無しさん:2006/10/04(水) 11:18:30
>>770
実行エラーとかじゃなくて、エラーメッセージとか出たんならコピペしてくれ。

774 :デフォルトの名無しさん:2006/10/04(水) 11:23:12
>>773
test1004.exeの0x7x2751d7(mfc70d.dll)でバンドルされてない例外が発生しました。
0x00000005:場所 0x00000020を読み込み中にアクセス違反が発生しました。

775 :デフォルトの名無しさん:2006/10/04(水) 11:25:03
GetDlgItem(IDR_MAINFRAME)の戻り値調べてみ

776 :デフォルトの名無しさん:2006/10/04(水) 11:35:45
Nullのようです

777 :デフォルトの名無しさん:2006/10/04(水) 12:01:56
ぬるぽ

778 :デフォルトの名無しさん:2006/10/04(水) 12:24:41
こんな感じで動きました。
CSize siz;
CRect rct;
GetClientRect(&rct);
CClientDC dc(this);
dc.MoveTo(0,0);
dc.LineTo(100,100);
dc.LineTo(rct.right,rct.bottom);

779 :デフォルトの名無しさん:2006/10/04(水) 14:47:02
ボタンのクリックでタイマーの開始・停止を制御したいのですが、
OnClick内でSetTimerを呼ぶとエラーになるようなので、
タイマー専用のウインドウを生成して制御しようと思ったのですが
SDIなので複数のウインドウを扱うことが出来ません。。
これに代替する方法って何かありますか?

780 :779:2006/10/04(水) 15:23:27
すいません、自己解決しました。

781 :デフォルトの名無しさん:2006/10/05(木) 10:29:00
なにが原因だったのか書いてくれ気になるだろ

782 :デフォルトの名無しさん:2006/10/06(金) 20:07:06
すみません、ど初心者な質問なのですが、
Disable状態のEditBoxのFontColorが変更できないで困っています。どなたか方法をご存じないでしょうか?
VC++6.0/WinXPです

WM_CTLCOLORのメッセージハンドラを呼んで、

HBRUSH ChogeDlg::OnCtlColor(CDC* pDC ,CWnd* pWnd ,UINT nCtlColor)
{
    if(pWnd == &m_HogeEdit){
        pDC->SetTextColor(RGB(0,0,0));
    }
    :
}
# m_HogeEditはCEditクラスのコントロール変数で登録済み。
  OnInitDialogでm_HogeEdit.EnableWindow(FALSE)にしてます。
みたいな感じでやってみたんですが変わらなかったです。
(背景色は同じやり方で変えられたんですが……)    



783 :デフォルトの名無しさん:2006/10/07(土) 01:56:33
>>782
無理じゃないけど無理に近い。リッチエディットを薦める。

784 :デフォルトの名無しさん:2006/10/07(土) 05:17:07
>>782
CEditのサブクラスを作って、その中のOnPaint辺りで書けば出来そう。
でもDrawTextのフォーマットDT_EDITCONTROLを使っても
微妙にCEditとは違った気がする。何か間違ってたのかもしれないけど。

785 :デフォルトの名無しさん:2006/10/07(土) 11:45:07
>>784
出来ないと思う。

786 :デフォルトの名無しさん:2006/10/07(土) 11:50:34
>>782
ああ、部分的に変えたいんじゃなくて全体的に変えたいのかな?
「EditBox の色を変える」あたりでググってミソ。

787 :デフォルトの名無しさん:2006/10/07(土) 12:53:39
>>782
disableをやめてSetReadOnlyでやるとか

788 :782:2006/10/07(土) 12:55:54
>>783
そんなに難しい事なのでしょうか・・・。
よければその「無理に近い」やりかたのヒントでもいただけませんでしょうか?

>>784
SubclassにしてOnPaint()でやってみるのですか。試してみます。
(SubclassのOnCtlColorとかじゃなくていいのでしょうか?
 まぁ、これもやってみてだめだったのですが・・・)

789 :デフォルトの名無しさん:2006/10/07(土) 12:59:43
>>788
786はやったの?
ちっとぐらい自分で調べてみては?

790 :デフォルトの名無しさん:2006/10/07(土) 18:29:04
>>789
一通り調査&実験済です。
というか、検索してもOnPaintとかOnCtlColorを使う方法しかなかったわけで。
Window Disableだとそれじゃかわらなかったわけで。

Win32 SDKのEnableWindow()のほうで、GrayStringをかけてるっぽいあたりまでは
あたりがついてるんですが、その実装がuser32.dllの中なんでわからない状態。

791 :デフォルトの名無しさん:2006/10/08(日) 01:56:33
>>790

784です。
CEditをDisableにしないやり方を考えたほうが良いと思うよ。
あの場合の文字色はGetSysColor(COLOR_GRAYTEXT)で得られる色で、文字通り
システムが持ってる色です。これを一アプリが変えて表示するのは好ましくない
気がする。あとCodeGuruとかCodeProject(MFC情報が充実してるサイト)でも782の
言うことは出来ないという記述があった。

どーーーしてもDisableにしたいならOnPaintで自力描画できます。
文字色が変わることも確認しました。ただマルチラインの時に全ての
文字をCEditの標準の描画と同じ位置に描く方法は自分には分からない。

> Win32 SDKのEnableWindow()のほうで、GrayStringをかけてるっぽいあたりまでは
これは自分では調べたことないけど、ちょっと信じ難い。

792 :デフォルトの名無しさん:2006/10/08(日) 07:30:52
>>791
ありがとうです。CodeGuruまで手を伸ばしきれなかったので助かりました。
別の実装方法を試してみます。


793 :デフォルトの名無しさん:2006/10/08(日) 17:17:25
プログラムからほかのexeファイルを実行したいんだが、
MFCにそんな機能のクラスある?
ふつうにWin32 APIでいい?


794 :デフォルトの名無しさん:2006/10/08(日) 18:43:58
ShellExecute
CreateProcess
とかでいいんでない。

795 :デフォルトの名無しさん:2006/10/08(日) 18:58:48
>>794
ありがと

796 :デフォルトの名無しさん:2006/10/09(月) 01:10:37
>>795
batはcmd(エミュ)を通さないと動かないから気を付けろ。

797 :デフォルトの名無しさん:2006/10/12(木) 01:06:23
すみません
アプリケーション上でカーソルの砂時計を禁止する
方法はありますか?

色々調べたところ
CWinApp::DoWaitCursor(int nCode)をオーバライドして
nCodeを-1にすれば禁止されるような情報を見つけて実装したのですが
そもそもこの関数が呼ばれませんでした。

どなたか方法をご存知でしたらヒントをお願いします。

798 :デフォルトの名無しさん:2006/10/12(木) 01:30:41
OSが切り替えたものに関しては、どうしようもないんじゃね?

799 :デフォルトの名無しさん:2006/10/12(木) 01:58:50
マウスのプロパティのポインタタブで、デザインをオールドファッションにでもすればいいんでね?

800 :デフォルトの名無しさん:2006/10/13(金) 02:25:43
質問です。
ダイアログのメンバ変数に一通り数値を代入した後に
表示を更新するためにUpdateData(FALSE)を実行すると、

wincore.cppの879行目、
// should also be in the permanent or temporary handle map
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);

に引っかかってしまいます。
ダイアログのメンバ変数への代入は、ダイアログクラスへのポインタdlgを使い、
dlg->m_X = x; dlg->m_Y = y;
のようにしています。その後に、
dlg->UpdateData(FALSE);
で上記のASSERTが出ます。

時間の経過と共に表示を更新させたいので、
上記はタイマーのコールバック関数の中に書いています。
また、SetTimerを使っているときは上の書き方でも正常に動いていたのですが、
マルチメディアタイマーのSetTimerEventを使うように書き換えたらこのようになりました。

何が原因なのでしょうか?わかるかた教えてください。お願いします。

801 :デフォルトの名無しさん:2006/10/13(金) 03:09:43
timeSetEventのコールバックは、マルチメディアタイマ固有の別スレッドから呼び出される。
SetTimerのコールバックは、WM_TIMERがDefWindowProcで処理された結果呼び出される。

802 :デフォルトの名無しさん:2006/10/13(金) 10:17:36
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_timeproc.asp
>Applications should not call any system-defined functions from inside a callback function,
>except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent,
>midiOutShortMsg, midiOutLongMsg, and OutputDebugString.

803 :デフォルトの名無しさん:2006/10/13(金) 12:43:30
>>801
>>802

ありがとうございます。
ということは、timeSetEventのコールバックでは特定の関数以外は呼べないということなんですね。
どのようにすれば>>800のような機能を実現できますか?
精度の問題上どうしてもマルチマディアタイマを使いたいので…。

804 :デフォルトの名無しさん:2006/10/13(金) 15:22:54
質問なのですが。
DBから名前・年齢・所属部署・ログイン日時・UserIdを取得して保持するクラスを作成しています。
ですが、これらのデータは検索方法によっては複数データが取得されることが想定されます。
このデータを管理する場合、どのようにクラスを作成すればよろしいでしょうか?


805 :デフォルトの名無しさん:2006/10/13(金) 15:54:17
ダイアログベースのアプリで、ダイアログ上にコントロールをいくつか配置して
いるのですが、コントロールによってツールチップの処理内容(表示位置など)
を変えたいと思っています。
WindowProcでWM_NOTIFYを拾ってTTN_SHOW(ツールチップの表示)をつか
まえるところまでは何とかわかったのですが、どのコントロールに対してツール
チップが表示されようとしているかを判断する方法はあるでしょうか?
NMHDR構造体がlparamで渡されて来ていて、hwndFromとidFromにそれぞれ
コントロールのハンドルとIDが入っているとのことなんですが、これらはどうも
ツールチップそのもののハンドルとIDのようなので。

806 :デフォルトの名無しさん:2006/10/13(金) 16:06:10
>>804
一人分の情報を扱うクラスを作り、複数人分のデータの管理には
CArray, CList, CMap などのコレクションクラスを利用する。

807 :デフォルトの名無しさん:2006/10/13(金) 16:09:24
>>806
回答ありがとうございます。
CArray, CList, CMapについて調べてみます。


808 :デフォルトの名無しさん:2006/10/13(金) 17:02:57
今日日そんなもん薦める香具師がいようとは。

809 :デフォルトの名無しさん:2006/10/13(金) 20:02:09
>>805
TTN_SHOWじゃないけどTTN_NEEDTEXTのサンプルコードがMSDNにのってて
そのなかにCtrlIDを特定する方法もあったよ。TTN_SHOWもそれと同じ感じでできる。

810 :805:2006/10/13(金) 21:11:38
>>809
ありがとうございます。
MSDNですね、調べてみます!

811 :デフォルトの名無しさん:2006/10/13(金) 22:46:46
質問です。
Dialogクラスでリストボックスコントロールを配置しております。(複数選択可)
OnOKメソッド内で選択したリストの文字列を取得したいのですが
どのように記述したらよろしいでしょうか?教えてください。
(選択位置のインデックスを取得でもいいのですが)
よろしくお願いいたします。

開発環境 VS2005 WinXP SP2

812 : ◆R8E1v62Ovo :2006/10/13(金) 23:13:46
質問です。
環境はVC++ 2005、 WinXPHomeです。
MFCを使用しております。

CImage image;
image.Create(80, 30, 24);
CDC* pDC = CDC::FromHandle(image.GetDC());

CFont font;
CString test = "MS UI GOTHIC";
BOOL a = font.CreatePointFont(80, test);
test = "test";
pDC->SelectObject(&font);

pDC->DrawText(test, CRect(0, 0, 80, 30), DT_LEFT);

image.Save("test.gif");

image.ReleaseDC();

という、簡単なテストプログラムを作って、テスト文字列が表示されている画像ファイルを
作成する事に成功したのですが、test.gifのサイズを文字列ピッタリに合わせたいと思っています。
GetOutputTabbedTextExtentを使えば、文字列のサイズを取得できる事は分かっているのですが、
この関数を使う場合、先にCImageを作成する必要があり、必然的にCImageのサイズを文字列ピッタリ
に指定する事が出来ません。

どうすれば、文字列ピッタリサイズの画像を作る事が出来るのでしょうか。

よろしくお願いします。

813 :デフォルトの名無しさん:2006/10/13(金) 23:47:14
>>811
ttp://msdn2.microsoft.com/en-us/library/ds24bscf.aspx

814 :デフォルトの名無しさん:2006/10/13(金) 23:49:12
>>808
では今日日は何を薦めるのか聞きたい

815 :デフォルトの名無しさん:2006/10/14(土) 00:07:12
MFCの生半可なクラスを使うよりSTLを使えってことでしょ。

816 :デフォルトの名無しさん:2006/10/14(土) 01:14:43
STL使うなというつもりはないけど、MFCスレで勧めるものでもないと思う。

817 :デフォルトの名無しさん:2006/10/14(土) 02:31:28
>>812
領域算出に必要なのはCImageじゃなくCDCでしょ?
画面の持つCDCで領域算出してからCImage作れば出来るんじゃないかな。

あとDrawTextで文字描くならDrawText自身で必要領域算出できる。
フォーマットにDT_CALCRECTが必要。文字列にTABを含むならDrawTextExのほうが良いかも。

CImageもGetOutputTabbedTextExtentも使ったことないので外してたらごめん

818 :デフォルトの名無しさん:2006/10/14(土) 20:14:59
WindowsXPでVC7.0です。
コンボボックス、ラジオボタンをDisableにした場合の文字色をグレーから黒に変えようとしています。
OnCtlColor()でDisableの場合に文字色を変えたのですが、表示が変わりません。
どのようにしたら変わるでしょうか。
描画処理等に疎いので、なるべくオーナードローとかいうのは避けたいのですが…。

819 :デフォルトの名無しさん:2006/10/14(土) 20:26:05
ラジオボタンのテキストを空っぽにして。
代わりにStaticを置くのじゃ駄目か?

820 : ◆R8E1v62Ovo :2006/10/14(土) 21:30:41
>>817
どうもです。考えてみれば、その通りでした……大ボケスイマセン。
どうも、ありがとうございます。

821 :デフォルトの名無しさん:2006/10/16(月) 14:12:44
>>816
STLではなくMFCのコンテナを勧めていいのは「頭の悪い発言」スレくらいのもの。

822 :デフォルトの名無しさん:2006/10/16(月) 15:09:30
質問です。
今DialogクラスのボタンにBitmapを貼り付けているのですが
Bitmapだけではなくテキストも表示したいのです。
キャプションに設定しても表示されませんでした。
何かいい方法がありましたらご教授お願いいたします。

開発環境 VS2005 WinXP SP2

823 :デフォルトの名無しさん:2006/10/16(月) 15:25:02
>>822
・文字部分も含めて絵(bmp)にする。
・どちらかを自分で描画する。
・両方とも自分で描画する。

824 :822:2006/10/16(月) 16:23:13
>>823
自分で描画するというのがよく分からなかったので
文字部分も含めて絵にする方法でいきます。
ありがとうございました。

825 :デフォルトの名無しさん:2006/10/23(月) 15:55:58
>>821
便乗での質問をお許し下さい。
STLを使う場合、投げられてくる例外はCExceptionを継承していないと思うのですが、だと
CWinApp::ProcessWndProcException
なんかは使えないですよね?
アプリ全体で、未処理例外を捉えるための同等の機構を実装するにはどうしたらよいでしょう?
ダイアログベースだとDoModalをtryで括れば終わりなのですが・・・

826 :デフォルトの名無しさん:2006/10/23(月) 16:07:44
教えてください。
恐らくすごく初歩的な事ですがお許しください。

描画スペースの枠に沿って線を引きたい場合ってどうすればいいのでしょう?
例えばこちらの想定する640*480の描画スペースの枠を縁取る場合
PreCreateWindowでウィンドウの幅・高さを640と480にしても
そこで指定するのは描画スペースの大きさではないですよね

そのときのスペースの大きさに応じて自動で縁取りとかってできないですかね…

827 :デフォルトの名無しさん:2006/10/23(月) 16:15:52
>>826
GetClientRectでサイズ取得すればええやん

828 :デフォルトの名無しさん:2006/10/23(月) 16:28:25
>>827
初めて聞いた単語です・・・
ありがとうございます!検索して使ってみますね。
MFC使うのが初めてなんでかなり苦労してます…

829 :デフォルトの名無しさん:2006/10/23(月) 16:46:45
むしろAdjustWindowRectExでは。

830 :デフォルトの名無しさん:2006/10/23(月) 16:51:34
>>829
もちろんこれも初耳^^;
とりあえず検索します。 ありです。

831 :デフォルトの名無しさん:2006/10/23(月) 17:11:15
メンバ関数一覧眺めるとかしないんか

832 :デフォルトの名無しさん:2006/10/23(月) 20:22:43
HTTPでファイルを送信するソフトを作りたいのですが、
どのようにプログラミングすれば良いですか?
調べた限りでは WinInet を使うようですが・・・
どこかにサンプルコードはありませんか?

833 :デフォルトの名無しさん:2006/10/23(月) 21:11:37
やりかたはいろいろあるけど
いきなり送信とか言い出すやつには教えてやらない方がいい

834 :デフォルトの名無しさん :2006/10/23(月) 21:54:07
かなり初心者の質問ですみません
ウィンドウの生成されるとき、メニューはいつ繋げられるんでしょうか
ウィンドウが画面上に描画されるとき、クライアント領域を正方形にするために
メニューのRectサイズを知りたいので
GetMenu(); でハンドル取って
GetMenuItemCount(); メニューの数かぞえて
GetMenuItemRect(NULL,CMenu,0,RECT); で一つあたりの高さ幅を調べて
で、ウィンドウとの差分で正方形にしようとしてるんですが(あってるかどうかわかりませんが)
どのメソッドか、コンストラクタか、それらがさっぱりわかりません。
申し訳ないですが、わかる方、教えていただきたいです。
あと、SDKのMainの第一引数のHINSTANCEにあたる値の物は無いんでしょうか
初心者すぎてすみません。



835 :デフォルトの名無しさん:2006/10/23(月) 21:59:25
SDKわかるならMFCのソースみればいいよ

836 :デフォルトの名無しさん:2006/10/23(月) 22:04:19
クライアント領域を正方形ならメニューのサイズ知らなくてもできそうな気がするけど
気のせいか?

837 :デフォルトの名無しさん:2006/10/24(火) 20:18:24
CString strObject = "http://www.xxxxx/cgi-bin/test.cgi?x=download";

DWORD dwHttpRequestFlags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE;
pFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,
strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);

というような形で、呼び出して、サーバ側の test.cgi で、
print "Location: http://www.xxxxx/runfile.exe";

としたきとに、クライアント側で、 runfile.exe のファイル名を知るには
どうすれば良いでしょうか?

pFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, str);   ファイルサイズ
pFile->QueryInfo(HTTP_QUERY_LAST_MODIFIED, str);   ファイルのタイムスタンプ

などは、取得出来るのですが...

str = pFile->GetFileName();
str = pFile->GetObject();
str = pFile->GetFileURL();

などでは、元の strObject 内にある文字列が入っています。



838 :デフォルトの名無しさん:2006/10/24(火) 20:19:04
http://hobby7.2ch.net/test/read.cgi/train/1160790803/

839 :デフォルトの名無しさん:2006/10/24(火) 21:24:34
>>837
その前にQueryInfoStatusCodeが301や302なのを確認するべきじゃないかと思うけど、
Locationヘッダを読み取るのはQueryInfo(HTTP_QUERY_LOCATION,〜)かと。


840 :デフォルトの名無しさん:2006/10/24(火) 21:32:46
あ、ステータスコードに応じた処理は勝手にやってくれるんだっけ?


841 :デフォルトの名無しさん:2006/10/24(火) 22:43:36
>>839
> >>837
> その前にQueryInfoStatusCodeが301や302なのを確認するべきじゃないかと思うけど、

QueryInfoStatusCode は、200 がかえってきてます。

> Locationヘッダを読み取るのはQueryInfo(HTTP_QUERY_LOCATION,〜)かと。

これは、 空文字です。

ファイルの実体は、きちんと取れてます。


842 :デフォルトの名無しさん:2006/10/24(火) 23:08:08
httpはテキストが平文でそのまま流れてくるから非常に簡単なんだけど
その辺のデバッグのやり方知らないとつらいものがあるな

843 :デフォルトの名無しさん:2006/10/24(火) 23:26:46
HTTP_QUERY_RAW_HEADERSでとりあえず全部見てみる、とか。

844 :837:2006/10/25(水) 01:24:43
>>843
HTTP_QUERY_ECHO_HEADERS_CRLF をチェックしても、
ファイル名は入ってないんですよね。

ちなみに、 WinInet.h 中の HTTP_QUERY_xxxx は
全て試したけど、ファイル名は無かった。

どこにあるんだろ?


845 :デフォルトの名無しさん:2006/10/25(水) 02:15:11
INTERNET_FLAG_NO_AUTO_REDIRECTを指定して、全部自分でリダイレクトの
処理をしなきゃいけないのかも。


846 :デフォルトの名無しさん:2006/10/25(水) 07:40:38
盤面を使うゲーム、たとえば囲碁、オセロ、ナンバーズプレイス(数独)
などの盤をVC++2005のMFCで作る場合、何を使うのがよろしいでしょうか。
エクセルのVBAで作ったのをVC++に移植しようとして、いきなり迷ってます。
参考
http://www.nikoli.co.jp/ja/puzzles/sudoku/

847 :デフォルトの名無しさん:2006/10/25(水) 08:13:49
VBAの要領でできるだけ手っ取り早くやりたければ、
ダイアログモデルで必要なだけべたべたとボタンを貼り付けるのはどうだろう。
個性を出したければピクチャボタンにすればいいのだし。
#あ、交点を使う囲碁には使いにくいか。その場合は十字を書いたボタンかな。

848 :デフォルトの名無しさん:2006/10/25(水) 08:26:44
>>847
すみません、囲碁は例として適当でなかったです。
今エクセルで作っているのはナンバーズプレイスで、駒は桝目の中に収まります。
9×9の盤面ですから81個のボタンを並べるということですか。それとも
盤面はピクチャーコントロールで作ってCDCやなんかで描画するのがいいですか。
別の例
http://www.oct.zaq.ne.jp/woodside/jsudok/jsudok001.html
お題のアンカーをクリックします。

849 :837:2006/10/25(水) 17:31:22
>>845
> INTERNET_FLAG_NO_AUTO_REDIRECTを指定して、全部自分でリダイレクトの

これだと、 QueryInfoStatusCode  が 302 になって、
HTTP_QUERY_LOCATION  で ファイル名を含むURL が取れます。

ファイル実体の転送処理はこれだけでは実行されないので、
再度 AfxParseURL にこの URL を指定して、
GetHttpConnection OpenRequest で
ファイルの実体の読み出しとなりますね。

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




850 :デフォルトの名無しさん:2006/10/25(水) 19:28:44
サーバへの送信データを RFC1867 の形式に
自動的に変換してくれる API ってありませんか?
つまり、Content-Type などのヘッダを生成して
その後にデータを付けるような形式にです

851 :デフォルトの名無しさん:2006/10/25(水) 19:44:45
スレ違い

852 :834:2006/10/26(木) 00:59:47
すいません、またド素人な質問さしてください
ウィンドウのクライアント領域を初期化するためにCalcWindowRectってのがあったので
Viewクラスでオーバーライドしたんですが、めちゃめちゃな形になってしまいました。
msdnを見たんですが、createが呼ばれるときにこのクライアント領域を参照する
と書いてあったのですが、たぶんShowWindowが呼ばれた後にCalcWindowRectが呼ばれて
UpdateWindowされてると思うんですが、オーバーライドのする場所が間違ってるんでしょうか
それより、もっと簡単な方法があるんでしょうか。
申し訳ないですが、どなたか教えてください。

853 :デフォルトの名無しさん:2006/10/26(木) 02:13:28
>>848
自分で描画したいならMFCを使うまでもない希ガス。
MFCっぽさを味わいたいならボタンを81個並べるのが手っ取り早くていいかなと。
漏れはMineSweeperクローンをいろんなプラットフォームで作ったけど、
GUI部分を巧く分離できれば核の部分はどれでも共通にできたけどね。
#MineSweeperは最低クリックだけでいいけど、数独はフォーカスと数値入力か。ちと面倒だね。

854 :デフォルトの名無しさん:2006/10/26(木) 03:00:38
>>852
>ウィンドウのクライアント領域を初期化するためにCalcWindowRect
CalcWindowRectのは用途が違ってる気がする。アプリ全体はどういう姿をしていて
その中のどのウィンドウのクライアント領域をどうしたいの?

>Viewクラスでオーバーライドしたんですが、めちゃめちゃな形になってしまいました。
めちゃめちゃな値をセットしたせいだと思う。

855 :834:2006/10/26(木) 03:58:04
>>854さん
すみません。
何か作ってみようと思って
何かの関数のプロッタを作ろうと思ってるんです。
で、正方形のクライアント領域が欲しくて
悩んでます。
フレーム自体の高さ幅位置やクライアント領域の座標の取り方等はわかるんですが
初期画面を正方形にする方法がわからないです。
どうかお知恵を拝借さしてください。


856 :デフォルトの名無しさん:2006/10/26(木) 04:20:07
単に正方形なクライアント領域が欲しいだけなら、ダイアログエディタで作ったら?

857 :デフォルトの名無しさん:2006/10/26(木) 06:14:01
概算のウインドウサイズで初期表示
クライアント領域のサイズを求める
希望のクライアントサイズとの差分を計算
ウインドウサイズを調整

858 :デフォルトの名無しさん:2006/10/26(木) 08:24:01
>>853
2分割発言の1
確かに9×9の盤面はボタンを格子状に配置する事が手っ取り早そうですね。
【メイン画面イメージ】
  A  B  C  D  E  F  G  H  I
┏━┯━┯━┳━┯━┯━┳━┯━┯━┓
┃ 9│  │  ┃ 6│  │ 8┃  │  │ 4┃ 1
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃  │ 8│  ┃ 5│  │ 4┃  │ 6│  ┃ 2
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃  │  │  ┃  │ 7│  ┃  │  │  ┃ 3
┣━┿━┿━╋━┿━┿━╋━┿━┿━┫
┃ 5│ 3│  ┃  │ 4│  ┃  │ 8│ 9┃ 4
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃  │  │ 7┃ 9│  │ 6┃ 3│  │  ┃ 5
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃ 4│ 6│  ┃  │ 8│  ┃  │ 2│ 7┃ 6
┣━┿━┿━╋━┿━┿━╋━┿━┿━┫
┃  │  │  ┃  │ 2│  ┃  │  │  ┃ 7
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃  │ 9│  ┃ 3│  │ 1┃  │ 5│  ┃ 8
┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
┃ 6│  │  ┃ 4│  │ 5┃  │  │ 3┃ 9
┗━┷━┷━┻━┷━┷━┻━┷━┷━┛

859 :デフォルトの名無しさん:2006/10/26(木) 08:25:47
2分割発言の2(後略)
あと、ヘルプ情報として以下のような可能性リストもエクセル版をVCに移行したいのですが
あるデータを格子構造に簡単に表示する方法はないでしょうか。
【可能性リスト】
    A      B       C      D       E      F      G      H      I
┏━━━━┯━━━━┯━━━━┳━━━━┯━━━━┯━━━━┳━━━━┯━━━━┯━━━━┓
┃9 . . . . . . .│1257 . . . .│1235 . . . .┃6 . . . . . . .│13 . . . . . .│8 . . . . . . .┃1257 . . . .│137 . . . . .│4 . . . . . . .┃1
┠────┼────┼────╂────┼────┼────╂────┼────┼────┨
┃1237 . . . .│8 . . . . . . .│123 . . . . .┃5 . . . . . . .│139 . . . . .│4 . . . . . . .┃1279 . . . .│6 . . . . . . .│12 . . . . . .┃2
┠────┼────┼────╂────┼────┼────╂────┼────┼────┨
┃123 . . . . .│1245 . . . .│123456 . .┃12 . . . . . .│7 . . . . . . .│239 . . . . .┃12589 . . .│139 . . . . .│1258 . . . .┃3
┣━━━━┿━━━━┿━━━━╋━━━━┿━━━━┿━━━━╋━━━━┿━━━━┿━━━━┫
┃5 . . . . . . .│3 . . . . . . .│12 . . . . . .┃127 . . . . .│4 . . . . . . .│27 . . . . . .┃16 . . . . . .│8 . . . . . . .│9 . . . . . . .┃4
┠────┼────┼────╂────┼────┼────╂────┼────┼────┨
┃128 . . . . .│12 . . . . . .│7 . . . . . . .┃9 . . . . . . .│15 . . . . . .│6 . . . . . . .┃3 . . . . . . .│14 . . . . . .│15 . . . . . .┃5
┠────┼────┼────╂────┼────┼────╂────┼────┼────┨
┃4 . . . . . . .│6 . . . . . . .│19 . . . . . .┃1 . . . . . . .│8 . . . . . . .│3 . . . . . . .┃15 . . . . . .│2 . . . . . . .│7 . . . . . . .┃6
┣━━━━┿━━━━┿━━━━╋━━━━┿━━━━┿━━━━╋━━━━┿━━━━┿━━━━┫

860 :デフォルトの名無しさん:2006/10/26(木) 08:55:15
ここはライブラリに特化したスレ
初心者用のスレは他にある

861 :デフォルトの名無しさん:2006/10/26(木) 22:22:37
こんばんわ
MFCプログラミングを始めたばかりのものです

CAsyncSocketを使い、サーバからHTMLを取得しようとしていますが、
OnRecvでイベントがきません

googleで調べていますが
Reciveされない理由がわかりません

ソースをupしますので
どこに問題があるのか教えていただけますでしょうか?
http://downloads.myphotos.cc:8080/up1/src/FancyFree0461.txt

862 :デフォルトの名無しさん:2006/10/26(木) 23:00:39
オブジェクトを破棄してるとか

863 :デフォルトの名無しさん:2006/10/27(金) 00:55:12
CAsyncSocket::OnConnect()あとに
Send()すべし

864 :デフォルトの名無しさん:2006/10/27(金) 01:42:50
CHttpConnectionでさらに楽するか、
逆に素のWinSock使うかどちらかにすればいいのに、とか思った。
CSocket/CAsyncSocketって使いにくくない?

865 :デフォルトの名無しさん:2006/10/27(金) 02:00:39
素でwinsock使うにしても、結局CAsyncSocketに相当するclassを作ることになるんだよね
自分好みのインターフェースにはできるけど

866 :861:2006/10/27(金) 03:15:35
>>863
ありがとうございました
Sendする箇所が決まってるんですね

867 :デフォルトの名無しさん:2006/10/27(金) 15:42:29
エディットでコントロールの右幅まできたら折り返して表示(複数行表示で改行コードは入らない)しようとしています。
MultiLineをtrueにしてWant Returnをfalseにすることで、
折り返して表示するがenterは効かさないというのは実現できたのですが、
改行含む文字列をコピーペーストすると、改行コードが含まれたままエディットにコピーされてしまいます。
プロパティだけでは、複数行表示&改行コードは許可しない、というのは無理なのでしょうか。

868 :デフォルトの名無しさん:2006/10/29(日) 06:16:48
ある二次元の分布データを画像化して表示するプログラムを作りたいと思っています。
今までダイアログベースのMFCアプリしか作ったことがないのですが、
これもダイアログで実現可能でしょうか。
それともSDIとかMDIで作らないとでしょうか。

869 :デフォルトの名無しさん:2006/10/29(日) 08:42:43
そんなお前はwindowsプログラムを理解しろ

870 :868:2006/10/29(日) 14:40:43
>>869
う、やっぱりそうですか。
行き当たりばったりで必要最低限を調べながらやってきましたが、そろそろ限界なわけですね・・・
ありがとうございます。

871 :デフォルトの名無しさん:2006/10/29(日) 15:38:17
その程度の処理なら、
ドキュメントビューアーキテクチャを切ったSDIがお勧め。

872 :デフォルトの名無しさん:2006/10/29(日) 16:25:50
別にダイアログでもいいじゃん。

873 :868:2006/10/29(日) 17:17:28
>>871-872
レスありがとうございます。
一応、どちらでも可能なんですね。
それぞれの線で色々調べてみます。
重ねてありがとうございました。

874 :デフォルトの名無しさん:2006/10/29(日) 17:32:12
メニューやツールバーが不要ならダイアログベースで
ダイアログベースでもメニューやツールバーつけれるけど

875 :デフォルトの名無しさん:2006/10/29(日) 18:07:13
表示だけならダイアログベースでも特に問題ないと思う。
ウインドウの大きさを可変にしたり、表示した画像を印刷するのなら
SDIの方が楽。この機会にSDI使ってみたら?
ダイアログの操作に慣れてるならReBar付きがお勧め。

876 :デフォルトの名無しさん:2006/10/30(月) 13:40:49
VS2005 MDIアプリケーションで開発しています。

メインメニューから静的分割ウィンドウを作成、表示するために
以下のようなコードを記述してみました。

void testMainFrm::OnNewView()
{
    m_wndSplitter = new CSplitterWnd;
    CCreateContext cContext;
  cContext.m_pCurrentDoc = GetActiveDocument();

    if (!m_wndSplitter->CreateStatic(this, 2, 1)){
return;
    }

    //ビューを作成
    if (!m_wndSplitter->CreateView(0, 0, RUNTIME_CLASS(testView1), CSize(100, 300), &cContext) ||
!m_wndSplitter->CreateView(1, 0, RUNTIME_CLASS(testView2), CSize(0, 300), &cContext))
    {
m_wndSplitter->DestroyWindow();
return;
    }

    //表示処理?

}

おそらくはViewを表示する処理などがいると思うのですがよく分かりませんでした。
間違いもしくは足りない処理などありましたら教えてください。
よろしくお願いします。

877 :デフォルトの名無しさん:2006/10/30(月) 14:09:28
MSDNにサンプルがある

878 :デフォルトの名無しさん:2006/10/30(月) 16:01:57
>>877
サンプルを確認しましたが、難しくて理解できませんでした。
もう少し分かり易いサンプルなどありませんでしょうか?
厚かましいとは思いますがよろしくお願いします。

879 :デフォルトの名無しさん:2006/10/30(月) 18:29:33
それぐらいのサンプルも理解できない初心者が
MDIだスプリッタだと言ってるのが間違い

880 :デフォルトの名無しさん:2006/10/30(月) 20:06:12
そんなことないだろ
ただ何故ぐぐらないのかは理解に苦しむ

881 :デフォルトの名無しさん:2006/10/30(月) 20:50:06
というか、難しくて理解出来ないと本人が言ってるんだか、
それ以上仕方ないのでは?

ここが分からないとか言うのだったら、説明のしようもあるけど、
全体が何がなんだか分からないんじゃ、
やめといた方が良いんじゃないかと思うね。

もうちょっと、少しでも分かるようなことから始めた方が、良いよ。>878


882 :878:2006/10/30(月) 21:16:05
>>879-881
レスありがとうございます。
まだまだ勉強が足りないみたいですね(´Д⊂グスン
出直します。

883 :867:2006/10/31(火) 16:22:37
867ですが、レスがないということは無理ってことですかね。


884 :デフォルトの名無しさん:2006/10/31(火) 17:01:30
\r\n

885 :デフォルトの名無しさん:2006/11/01(水) 00:16:09
> 折り返して表示するがenterは効かさないというのは実現できた

Ctrl+Enterで改行入っちゃうわけだが。

886 :デフォルトの名無しさん:2006/11/01(水) 05:38:16
>>867
プロパティだけじゃ無理だと思う。
サブクラス作って色々やれば出来そうな気がするけど
クリップボードに改行込みのテキストが入ってた場合どうするかとか
Ctrl+Z(Undo)とか考えると結構面倒かも。

あと昔の話なので今はどうか知らないけど、改行無しで長いTextを扱うと
CEditの動作が重たくなってた。1文字挿入に2秒とか。

887 :デフォルトの名無しさん:2006/11/03(金) 00:04:19
VC++2005です。
List Control のレポートビューで、
項目をクリックしたときに一行全体が選択されるようにしたいです。
オーナードロー、CListCtrlの派生クラス、DrawItemのオーバーライドまで辿り着いたのですが、
文字列の描画がうまくいきません。

pDC->DrawText(L"test", &rect, ・・・
として、"test"の文字列はリストの項目の数だけ表示されたのですが、
リストの項目にある文字列を取得するにはどうすればいいのでしょうか。

888 :デフォルトの名無しさん:2006/11/03(金) 00:46:36
すみません、GetItemTextで解決しました。

889 :デフォルトの名無しさん:2006/11/03(金) 08:13:48
vc6.0から2005に移行したんだけど、メッセージディスパッチ関数の引数とか変わってる?
昔のソースが通らない・・・

890 :デフォルトの名無しさん:2006/11/03(金) 08:22:08
>vc6.0から2005
通る

>メッセージディスパッチ関数の引数とか変わってる?
知らん

891 :デフォルトの名無しさん:2006/11/03(金) 09:25:46
>>889
戻り値がLRESULTのはずがvoidになっているに一票。
2002で仕様が変更され、厳密にチェックされるようになった。

892 :デフォルトの名無しさん:2006/11/03(金) 15:42:30
質問です。
CMultiDocTemplateを使用し、新しい子ウィンドウを作成しました。
この子ウィンドウのタイトルを変更したいのですがどのようにしたら
良いか分かりません。教えてください。
環境はVS2005です。よろしくお願いします。

893 :デフォルトの名無しさん:2006/11/03(金) 16:43:42
SetWindowText

894 :デフォルトの名無しさん:2006/11/03(金) 17:10:00
>>893
OnCreateCliant内で設定出来ました。
どうもです。

895 :デフォルトの名無しさん:2006/11/05(日) 12:11:31
こんにちわ
最近MFCプログラミングを始めたばかりのものです。
VC++6.0 MFC

構成の設定でデバッグ版だとすんなりビルドできるのですが、リリース版だと以下のエラーが出て困ってます。
--------------------------------------------------------------------------------
E:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE\afxwin2.inl(169)
   : error C2664: 'SetTimer' : 4 番目の引数を 'void (__stdcall *)(struct HWND__ *
  ,unsigned int,unsigned int,unsigned long)' から 'unsigned long'
  に変換できません。 (新しい機能 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
---------------------------------------------------------------------------------

MFC AppWizardを使用し作成されたソースに手を加えない状態でのビルドです。
どなたかお分かりになる方、ご教授願います。

896 :デフォルトの名無しさん:2006/11/05(日) 12:17:14
よく判らないけど。
VCのサービスパックは当てた?

897 :デフォルトの名無しさん:2006/11/05(日) 12:39:07
VC再インスコすれば直るんじゃね?(無責任)

898 :デフォルトの名無しさん:2006/11/05(日) 13:57:42
>>896-897
レスありがとうございます
やはり再インストールですかね。。。
myパソじゃないんで(借物ノート)、VCも持って無いし・・・
明日、パソ換えて試してみます

899 :デフォルトの名無しさん:2006/11/05(日) 16:49:58
ウソこくなお前らw

900 :デフォルトの名無しさん:2006/11/05(日) 17:43:44
900

901 :デフォルトの名無しさん:2006/11/05(日) 18:29:03
グリッドのViewってないんですか?
C#だとDataGridViewをフォームに貼り付けるだけなんですが
VC++だとどこに何を貼るかわかりません。


902 :デフォルトの名無しさん:2006/11/05(日) 18:32:56
CViewに自前でグリッドを描画すればいいだけのことでは???

903 :デフォルトの名無しさん:2006/11/06(月) 14:21:22
VC++6.0 MFCです。
ウィンドウを表示するUIスレッドをAfxBeginThreadで作成したのですが、
m_bAutoDeleteをFALSEにした場合、スレッド内部から終了するためには、
そのスレッドのポインタのdeleteはどこでやるものなのでしょうか。

ウィンドウのOnCloseのタイミングなど、どこでやっても
「自分の属するスレッドをdelete」になりそうなのですが、
どこでやれば安全に削除できるものなのでしょうか。
よろしくお願いいたします。

904 :デフォルトの名無しさん:2006/11/06(月) 14:34:05
>>903
安全に削除できるのはMFCだけ。

905 :デフォルトの名無しさん:2006/11/06(月) 16:12:42
>>904
ということは、m_bAutoDeleteをFALSEにしてしまったら
スレッド自身からはdeleteできないということですか?
「×」が押されたら自分自身を終了させたいんですけど。

906 :デフォルトの名無しさん:2006/11/06(月) 16:29:55
PostNcDestroy

907 :デフォルトの名無しさん:2006/11/06(月) 19:01:55
>>905
m_bAutoDeleteをTRUEにしてから終了させればいいじゃん

908 :デフォルトの名無しさん:2006/11/06(月) 19:02:26
>895
afxなにがしって事前コンパイルみたいなのをやってくれる機能じゃね?
それがリリースだとうまくはたらかねえのかも。


909 :デフォルトの名無しさん:2006/11/06(月) 19:17:49
>>906
>>907
そうか、スレッド内部から終了するときには、ウィンドウのOnCloseとかで
m_bAutoDeleteをTRUEにセットしなおしてしまえばいいんですね。
そうすれば勝手に内部で死んでくれると。
ありがとうございます。

910 :デフォルトの名無しさん:2006/11/07(火) 01:57:38
CAsyncSocketで、OnRecieveをしますが、
Recieveが終わったタイミングがわかりません。
どのようにして終わったのかを知る方法は無いのでしょうか?

911 :デフォルトの名無しさん:2006/11/07(火) 10:10:14
自動的にするわけないでしょ
そこでrecvするんだよ


912 :デフォルトの名無しさん:2006/11/07(火) 10:57:15
909です。
もうひとつ疑問点が出てきてしまったのですがよろしいでしょうか。
スレッド外部から終了する場合、
PostThreadMessageでWM_QUITを送ればとりあえず終了するんですけど、
ウィンドウが正常に破棄されていないようで、メモリダンプしてしまいます。

かといって、独自のメッセージをPostThreadMessageして、
その中でウィンドウを破棄するように組み込むと、
ウィンドウがメッセージボックスを出していたりしたら、
メッセージを受け取ってくれないままです。

とりあえず、スレッドのExitInstanceの中で
「ウィンドウが残っていたら(スレッド外部から削除されてここに来たら)破棄」
とやれば動くようなんですけど、
ウィンドウが存在するままExitInstanceに来てもよいものなのか不安です。
もっとスマートな方法ってありますでしょうか。

913 :デフォルトの名無しさん:2006/11/07(火) 11:12:14
PostThreadMessageじゃなくてウィンドウにpostすれば?

914 :デフォルトの名無しさん:2006/11/07(火) 12:40:49
>>913
ウィンドウにpostしても、メッセージボックスやファイルダイアログとかを
モーダルで出してると、それを終わらせない限りメッセージが届かないですよね?
そういうものが出ていても必ずその場で別スレッドからウィンドウを削除するには、
どうやればよいのでしょうか…。

915 :デフォルトの名無しさん:2006/11/07(火) 12:43:44
それMFCの話か?

916 :デフォルトの名無しさん:2006/11/07(火) 13:00:16
硬いこというなよ

917 :デフォルトの名無しさん:2006/11/07(火) 13:01:54
>>914
届くよ

918 :デフォルトの名無しさん:2006/11/07(火) 13:34:24
外部スレッドからメインフレームにPostMessage(WM_CLOSE)をかましてみたところ、
メッセージボックスやモーダルダイアログが出たままでも終了できました。
難しいですね。もうちょっといろいろ試してみます。
ありがとうございました。

919 :デフォルトの名無しさん:2006/11/07(火) 14:12:23
918です。
おかげさまでなんとか動いています。

CFileDialog dlg(TRUE);
dlg.DoModal();
dlg.DoModal();
dlg.DoModal();

となっていた場合、1回目のDoModalの最中に外部スレッドから終了させると、
2回目のDoModalが呼ばれたときに返ってこなくなってしまいますね…。

とりあえず1回目のDoModalが終わったあとに
「フレームウィンドウが死んでたらその場でreturn」
とやれば回避できましたけど、外部スレッドから終了されることを前提にすると、
こんな途中終了の処理が次々と出てくるものなのか…。

UIスレッドは面倒くさい…。

920 :ほーむ:2006/11/07(火) 14:17:38
すいません。。どなたかホームページのログインパスワードの組み込み方
しりませんか?


921 :デフォルトの名無しさん:2006/11/07(火) 14:19:21
>>919
やり方として、自前の終了メッセージを投げて。
それを受けて、終了フラグを立てたり、自分にWM_CLOSEを投げたりとかの方法もあるね。

922 :デフォルトの名無しさん:2006/11/09(木) 11:48:50
>>921
1回目や2回目のDoModalの直後に

if (!IsWindow(フレームウィンドウのハンドル)) {
return;
}

を入れておきました。
処理的には終了フラグと同じですよね。

923 :デフォルトの名無しさん:2006/11/10(金) 06:32:29
CListCtrl のレポートビュー形式で、改行を行った表示をするには
どうすれば良いでしょうか?

InsertItem(1, "AAA\r\nBBB");
としたときに、
AAA
BBB
と表示されたいのです。

よろしくお願いします。

924 :デフォルトの名無しさん:2006/11/10(金) 11:28:21
>>923
通常は無理。
改行を含むカラムと含まないカラムの高さが同じで良いのなら
オーナードローでいける。

925 :デフォルトの名無しさん:2006/11/10(金) 14:35:29
VS-FlexGrid Pro Ver 8.0Jについての質問です。

フォームビューに当グリッドを二つ配置し、このグリッド間で
値の受け渡し(DragDrop)を行うため、グリッドAにBeforeMouseDownイベント
を実装し、イベント内でDragRowメソッドを実行。グリッドBにBeforeMoveRowイベント
を実装し、グリッドAで選択されている行を取得しようとしたのですが
グリッドBのBeforeMoveRowイベントが実行されません。
ググってみても情報が極端に少なく、わからずじまいです。
なのでどなたかわかる方いましたらお教え願います。

環境は Visual C++ 2005です。よろしくお願いします。

926 :デフォルトの名無しさん:2006/11/10(金) 15:06:42
proってことはGrapeCityのか?
それならサポートに聞け。

927 :923:2006/11/11(土) 05:39:57
>>924
ありがとうございます。
無理せず、あきらめます^^;

928 :デフォルトの名無しさん:2006/11/11(土) 07:47:35
質問です。

 普通のサイズ→最大化

のタイミングはOnSizeでとれるんですけど、

 最大化→普通のサイズ

のタイミングはどうしたらいいのでしょうか?

929 :デフォルトの名無しさん:2006/11/11(土) 08:08:03
最大化された時にフラグ立てときゃいいんじゃね?

930 :デフォルトの名無しさん:2006/11/11(土) 08:36:31
普通のサイズ→最大化
最大化→普通のサイズ

両方OnSizeにくるし、パラメータ見れば区別つくけど
何が問題?

931 :デフォルトの名無しさん:2006/11/11(土) 09:28:33
普通のサイズ→普通のサイズ

932 :デフォルトの名無しさん:2006/11/11(土) 20:26:05
>>929
それでいこうと思います。
ただ、なんか最大化でフラグ立てっ放しになって、自分の思ったとおりのメッセージがこないでおかしくならないか不安でした。

>>930
>>931の人が言うように

最大化→普通のサイズ
普通のサイズ→普通のサイズ

の区別がつかないのが不安要素でした。

933 :デフォルトの名無しさん:2006/11/12(日) 23:25:03
区別がつかないのもそうなんですが、
OnSizingとOnSizeがくるタイミングがいまいちよくわからないのも問題ですかね。
ウィンドウのサイズ変更中でもOnSize来ますし。
サイズ変更中→OnSizing
サイズ変更後→OnSize
ならわかりやすいのですが、そうなっていないようなので・・・。

934 :デフォルトの名無しさん:2006/11/12(日) 23:31:49
画面のプロパティの中の「ドラッグ中にウィンドウの内容を表示する」
にチェックが入っているかどうかで、そのメッセージが呼ばれる時が違ってくると思う。

935 :デフォルトの名無しさん:2006/11/14(火) 08:40:01
VS2005 SDIで、映像処理のプログラムを書いています。
picture boxに連続して表示させることでアニメーション出力しています。
ちらつき防止のため、バックバッファを入れたいのです。
色々なところで紹介されている方法を試しましたが、防止できませんでした。
プログラム中の任意の場所で、m_pctbox(ピクチャボックスのコントロール変数)のみ
バックバッファを入れた再描画処理を行えればよいと思うのですが。
ご教授願えませんか?

936 :デフォルトの名無しさん:2006/11/14(火) 10:00:57
教えてやっても色々なところで紹介されている方法と同じだったら馬鹿だし

937 :デフォルトの名無しさん:2006/11/14(火) 10:38:43
MFCにピクチャボックスコントロールはありません。
.NETの話してるのかな。

938 :デフォルトの名無しさん:2006/11/14(火) 11:15:25
たぶんダイアログエディタのコントロールツールバーの「ピクチャー」のやつ

939 :デフォルトの名無しさん:2006/11/14(火) 11:25:21
林先生の著書ではピクチャボックスと書かれている。
アニメコントロールというのもあるらしい

新Visual C++入門スーパービギナー編 Ver.6対応版
http://shop.sbcr.jp/isbn/0975/mokuji.htm
■Chapter 14 その他のVisual C++の機能をみてみよう
14.1 ボタン
14.2 エディットボックス
14.3 チェックボックス
14.4 ラジオボタン
14.5 グループボックス
14.6 スタティックテキスト
14.7 ピクチャボックス
14.8 リストボックス
14.9 アニメコントロール
14.10 スピンボタン
14.11 プログレスバー
14.12 スクロールバー
14.13 スライダ
14.14 コンボボックス
14.15 拡張コンボボックス

940 :935:2006/11/14(火) 12:51:48
説明が不足し、すみません。
試してみたのは、
http://orangeknowledge.jpn.org/tips/mfc015.html
http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_43A1DCA1DC2054697073.html
http://plaza.harmonix.ne.jp/~fakira/cppdoc/mstips.htm
あたりです。
ピクチャボックスの件は、938さんのご指摘の通りです。
そもそも画像の表示にこのコントロールを使わないほうがいいのかな。

941 :デフォルトの名無しさん:2006/11/14(火) 13:51:10
親ウィンドウに直接描画するのが一番楽そう。

942 :デフォルトの名無しさん:2006/11/14(火) 14:08:47
>>940
まだ説明不足

勝手な予想で書いてみる。
CFormViewにCStaticを貼り付けてCFormViewのOnDrawあたりで描画してるとしたら
上の3つのサイトのどれにも該当しないし、ちらつきは無くならない。
その場合CStaticのサブクラスを作ってその中で1番目のサイトのやりかたになる。

CStatic使わずViewに直接描くなら2-3のサイトのやり方。

943 :935:2006/11/14(火) 18:22:38
> CFormViewにCStaticを貼り付けてCFormViewのOnDrawあたりで描画してるとしたら
その方法です。
すごいヒントになりました。
Viewに直接書く方法で試してみたいと思います。
ありがとうございます。

944 :デフォルトの名無しさん:2006/11/15(水) 00:16:27
描画の後にViewが描かれて質問しに戻ってくるに1票w

945 :デフォルトの名無しさん:2006/11/15(水) 00:50:02
それはダイアログだけだ。

946 :デフォルトの名無しさん:2006/11/15(水) 00:51:07
そうなってもあわてずさわがずOnCtlColor

947 :デフォルトの名無しさん:2006/11/15(水) 01:04:06
Viewとダイアログってどうちがうの?


948 :デフォルトの名無しさん:2006/11/15(水) 02:20:42
早くエスパーを

949 :デフォルトの名無しさん:2006/11/15(水) 08:56:04
エスパーは只今電話に出られません

950 :デフォルトの名無しさん:2006/11/15(水) 11:43:21
質問です。

リソースでダイアログ上にタブを貼り付けて、そのダイアログ用のクラスを作り、
OnInitDialog() にて

m_tab.SubclassDlgItem(IDC_TAB, this);

とする方法と、タブのリソースを用いずに、

m_tab.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), pParentWnd, 123);

としてやる方法とでは、後者のほうだと、タブの部分のフォントが、大きくなって
しまいます。これ、何が原因なんでしょうか。

951 :デフォルトの名無しさん:2006/11/15(水) 11:52:54
フォントの大きさ指定してないからだろ

952 :950:2006/11/15(水) 12:46:27
>>951
ありがとうございます、解決しました。

953 :デフォルトの名無しさん:2006/11/15(水) 12:48:19
フォントそそっかしいな

954 :デフォルトの名無しさん:2006/11/16(木) 01:23:31
VisualC++2005で「共有ライブラリを使用」で作成したアプリケーションを配布する場合の
同梱するべきDLLファイルは何なんでしょうか?

ヘルプを見てみるとMFCx0.dllとMsvcrt.dllと書いてありました。
MFCx0.dllはMFC80.dllの事だと思うのですが正しいでしょうか?
それとMFC80U.DLLやMsvcr80.dll等似た名前のファイルはあったのですがまったく同じ名前のファイルが見つかりませんでした。
このような場合どうすればよいのでしょうか?

vecterで検索しても6.0までしか対応していないMFC42.DLLとMSVCRT.DLLしか見つからなくて


955 :デフォルトの名無しさん:2006/11/16(木) 01:40:30
vectorで検索する前にMSで検索しろよ

956 :デフォルトの名無しさん:2006/11/16(木) 01:45:10
とりあえずその手の話はここのツリーの下にある。
http://msdn2.microsoft.com/ja-jp/library/zebw5zk9(VS.80).aspx

必要なDLLはおそらくMFC80.DLLとMSVCR80.DLL
http://msdn2.microsoft.com/ja-jp/library/8kche8ah(VS.80).aspx
アプリケーションにDLLを同梱するのは、プライベートアセンブリとしての配置に該当する。
http://msdn2.microsoft.com/ja-jp/library/ms235291(VS.80).aspx

あるいはランタイムのパッケージも存在する。
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=ja

957 :デフォルトの名無しさん:2006/11/17(金) 00:03:22
>>956
わざわざありがとうございます。
素人なんでいまいちよく分かりませんがそれを読んで少しずつでも理解していこうと思います。


958 :デフォルトの名無しさん:2006/11/17(金) 02:51:24
質問です。

とあるソースを、MFCをデバッグ時に、ダイナミックリンクとスタティックリンクの
2つでコンパイルしてみたところ、スタティックだとうまくいくのに、
ダイナミックリンクだとランタイムエラーで止まってしまいます。

hoge.exe の 0x7c9a4ed1 でハンドルされていない例外が発生しました: 0xC0000005: Access violation

実は、商用ライブラリを用いており、その中で止まっている可能性もあります。
(デバッガで止まった場所を見てみても、あてにならない場所で止まっています)

ダイナミックリンクだと、うまくいかず、スタティックリンクだとうまくいく、というのは
よくあることなんでしょうか?


959 :デフォルトの名無しさん:2006/11/17(金) 02:54:59
>>958
DLLが違うメーカーでコンパイルされた物の場合、呼び出し規約が
違う事があるだろ。特にコールバック関数は注意。

渡すパラメータが極めて簡単な物は問題が出にくい。

960 :958:2006/11/17(金) 03:09:50
>>959

このライブラリは商用ライブラリで、このPCでコンパイルしたDLLを
使用しており、ある条件だと、うまく動作します。

その条件というのが、まだ調べているところなのですが、とある
クラス(CTabCtrl)の派生クラスのさらに派生クラスのコンストラクタを
呼ぶと(newしてみると)、ランタイムエラーになります。

このクラスたちで、商用ライブラリを使用しているものは一切無く、
止まっている場所も、

961 :958:2006/11/17(金) 03:12:06
>>960 の続きです。

止まっている場所も、わけのわからないところで、
new の行に break point を仕掛けても、飛んでくれません。

そこで、CTabCtrl の派生クラスの、デフォルトコンストラクタを
削除してみたところ、動いてくれたりします。

なんかコンパイラのバグぽい気がしてきました。

962 :デフォルトの名無しさん:2006/11/17(金) 03:13:38
>>961
その商用ライブラリのソースは付いてる?同じコンパイラでコンパイルして
生成したDLLなら問題ないだろ。

俺は多分DLLを生成したコンパイラが違うせいではないかと疑ってる。
前にも同じような事を聞いたことがあるもんで。

963 :デフォルトの名無しさん:2006/11/17(金) 03:15:42
>>962
同じだと思うんですが(タスクマネージャでのぞいたらcl.exe)、バージョンなんかが
違うかもしれないので、ちょっと調べてみます。

964 :デフォルトの名無しさん:2006/11/17(金) 03:19:09
結局、DLL内にあるようなクラスをメインのexeからnewなどは
しないようにした方がいい。DLLは出来るだけ簡単なインターフェース
にしぼり、DLL内で仕事が完結するようにコーディングし、必要な
関数ポインタはコールバック関数で得るようにする。

965 :デフォルトの名無しさん:2006/11/17(金) 03:31:46
>>961
専用のユーティリティでコンパイルさせるんですが、コンパイル中に使用
しているcl.exeの位置を調べたら、

C:\Program Files\Microsoft Visual Studio 8\VC\bin\

でした。念のためVS2005で使用しているものも調べたら同じものでした。


>>964
実際にnewしているのは、CTabCtrl になります。ライブラリのクラスは、
newしていないと思います。たぶん。

たしかにやりがちな間違いなんですが、それだと、newを実行した後に、
どこかで「メモリの中身が壊れました」警告が出たりしますが、今回の症状では、
newの行どころか、

int _tmain(int argc, _TCHAR* argv[])

関数内の先頭行にも到達してないんです。(今はコンソールアプリでデバッグしてます)

966 :デフォルトの名無しさん:2006/11/17(金) 03:44:38
DLLの呼び出しを自前で(LoadLibrary)で行うようにしてもだめですか?

967 :デフォルトの名無しさん:2006/11/17(金) 03:47:50
>>966
すいません、ライブラリが勝手にDLLを読み込んでいて、
そういった操作が簡単にできるか怪しいです。

読み込むDLLなんかは、_DEBUGとかUNICODEとかを
賢く見てるみたいです。

968 :デフォルトの名無しさん:2006/11/17(金) 03:50:31
そうなるとコンパイラのバグだといいんですけどね。
商用ライブラリだという事ですから、開発元のメーカーに詳しい症状を
添付してお問い合わせされてみてはどうでしょうか?

私の手元にライブラリがあれば調べてみる事もできるんですが、それは
無理ですからね。

様子からするとDLLの初期化にどこかで失敗しているような印象を
受けます。

969 :デフォルトの名無しさん:2006/11/17(金) 03:57:42
>>968
いろいろ調べていったら、一応DLL側の処理で止まってたみたいです。
UXTHEME.DLLをたたいて、その中で止まってました。

しかし、「止まる」ソースと「止まらない」ソースでコールする内容が
変わっていないか見てみましたが、変わっていません。というか、
そもそもDLLの初期化に関係するはずのない部分をいじっているので、
本来変わるはずがありません。

ひとまず、スタティックリンクで対処したいとおもいます。
ありがとうございました。

970 :デフォルトの名無しさん:2006/11/17(金) 04:01:44
それが、初期化に失敗してると、後で全然関係ない所でバグったり
する事があるのがプログラムの怖い所です。

WIn32APIを呼び出している所で止まっているなら、配列のオーバーラン
か何か起こしているのかもしれません。

まあスタティックリンクで行かれるという事ですのでここまでにしましょう。
スタティックリンクでも問題が出そうな気がするのですが・・・・

971 :デフォルトの名無しさん:2006/11/17(金) 16:29:10
質問です
チェックボックスがONのときは赤文字、OFFのときは通常(黒文字)としたいのですが
どうやって実現すればいいでしょう?

972 :デフォルトの名無しさん:2006/11/17(金) 16:44:10
コントロールの描画のタイミングでチェックボックスの状態見てフォントを変える。

973 :デフォルトの名無しさん:2006/11/17(金) 16:45:03
フォントじゃなくて文字色か

974 :デフォルトの名無しさん:2006/11/17(金) 23:47:05
>>971
つOnCtrlColor

975 :sage:2006/11/18(土) 14:06:21
質問です。

画面上のコントロール内の文字を90度回転させた形で表示させたいんですが、
当方VC初心者でなかなか難しく、行き詰まっています。

CreateFontでフォントを作成したらできる所までは分かったんですが
それをどこにどう書いたらいいのか困っています。

納期も迫っており、じっくり勉強する時間もないんです。。
どなたか分かる人いらっしゃいましたらお願いします。

976 :デフォルトの名無しさん:2006/11/18(土) 14:54:24
やりかたはわかるけど
ゆっくり教えてる暇がなくて残念

977 :デフォルトの名無しさん:2006/11/18(土) 15:20:13
>>975
具体的にどのコントロール?
文字は左右どっち向きに90度?
90度傾けて横書きだよね?

978 :デフォルトの名無しさん:2006/11/18(土) 15:27:47
一番良いのはMSFlexGridなんですけど、
横に出来るならボタンでもStaticTextでも良いです。

ちょうど、ディスプレイを左に90度回転させると
普通に横書きで読める文字にしたいんです。
つまり、左に90度回転させたいです。

よろしくお願いします。

979 :デフォルトの名無しさん:2006/11/18(土) 15:33:56
>>978
ディスプレイを左に90度回転させて読める字って右に90度回転してるんじゃないの?

980 :デフォルトの名無しさん:2006/11/18(土) 15:40:16
すいません、間違いですね(汗)

左に90度でお願いします。

981 :デフォルトの名無しさん:2006/11/18(土) 16:33:04
>>978
ボタンでも良いってことは短い文章でスクロールも不要なのね。
それならフォントは出来てるようだしフォームに直に書けば楽。
アプリの種類がSDIならOnDraw、ダイアログならOnPaintあたりで
CDCにフォントをセットして位置調整のうえTextOut等で描画。

一杯描くのでコントロールが良いと言うならStaticでもボタンでも使って
オーナードローになる。

MSFlexGridは知らない。 >980は意味分からん。

982 :デフォルトの名無しさん:2006/11/18(土) 17:14:20
ありがとうございます。
とりあえずですが、何とかフォントの設定することができました!


983 :デフォルトの名無しさん:2006/11/19(日) 00:32:08
質問です。

タブを切り替えていくつかのウィンドウを表示するプログラムで、
CTabCtrl + CDialogの派生クラス(ページ) を、トップウィンドウの
上に貼り付けて、表示しています。

CTabCtrl
Createで生成。リソースで配置したものへのDDX_Controlなどではない。
親は「トップウィンドウ」

CDialogの派生クラスたち(ページ)
Createで生成。基本的にリソース使用。
親は「トップウィンドウ」

トップウィンドウ
CDialogの派生クラス。リソース使用で、Create で生成・表示している。

このような構成で、ページの中に、MultiLine な EditBox を配置したところ、
EditBoxのフォーカスがある時に、Escを押すと、現在表示されている
ページだけが非表示になり、あとは表示されたままです。タブを切り替えて
もっかい戻すと、表示されます。

MultiLineでなければ、問題ありません。あと、ページたちの親は、CTabCtrl
でも、トップウィンドウでも、同じ現象でした。

Escを押しても非表示にならないようにするにはどうしたらいいのでしょうか。


984 :デフォルトの名無しさん:2006/11/19(日) 01:12:41
.NETに移行しましょう

985 :デフォルトの名無しさん:2006/11/19(日) 01:43:21
>>983
ページ用クラスのOnCancelで基本クラスを呼ばないようにすると直るな。
たぶんモードレスダイアログと同じような理由。

986 :デフォルトの名無しさん:2006/11/19(日) 03:28:42
>>985
解決しました。
ありがとうございました。


987 :デフォルトの名無しさん:2006/11/19(日) 23:20:24
>>984←糞
http://www.microsoft.com/japan/msdn/netframework/programming/obsoleteapi/

988 :デフォルトの名無しさん:2006/11/20(月) 14:57:01
質問お願いしまっす。

LOOP処理時、LISTボックス内に簡単なLOGを吐き出してるのですが、
最新のLOGを表示したい為、cursol番号が最大のデータを常に表示する
という方法はありますか?
一応探してみたけど、それっぽいのが見つかりません。
HELP!!!

989 :デフォルトの名無しさん:2006/11/20(月) 15:14:16
988ですが、↑を要約すると、LISTボックスでCURSOL番号0から
じゃなくて、MAXが表示されてる状態。
垂直スクロールを一番下まで下げた状態と言う事です。

990 :デフォルトの名無しさん:2006/11/20(月) 15:20:52
SetTopIndex


991 :デフォルトの名無しさん:2006/11/20(月) 17:15:10
>>990
CListCtrl::GetTopIndex()は知っているけど、set関数もあったっけ?

>>989
CListCtrl::EnsureVisible()でいいんでない?

992 :デフォルトの名無しさん:2006/11/20(月) 17:34:23
「リストボックス」なんだから、CListCtrlじゃなくてCListBoxだろ。


993 :991:2006/11/20(月) 17:41:50
がーん、うちじゃログをListCtrlに出しているから完璧にミスリードしてしまった。

994 :デフォルトの名無しさん:2006/11/20(月) 21:45:21
質問です。
Disabled時のボタンの文字色を変える方法ってありますか?
もしくは、Disabledにせずにボタンを押せなくする方法はありますか?

995 :デフォルトの名無しさん:2006/11/20(月) 23:29:31
ボタンをオーナードローする。
DrawItemで
DrawFrameControl()

996 :デフォルトの名無しさん:2006/11/21(火) 04:00:13
CTypedPtrListでポインタをリストしたいのですが、
AddTail()した時のポインタの値と
GetAt()した時のポインタの値が
異なってしまいます。
(そのためdeleteしようとするとアクセスバイオレーションが発生)
使い方が間違っているでしょうか?

CTypedPtrList<CPtrList, CMyObject*> m_obj;

CMyObject* pObj = new CMyObject();
POSITION pos = m_obj.AddTail(pObj); ← ここのpObjと
CMyObject* pAdd = m_obj.GetAt(pos); ← ここのpAddの値が異なる。。。

997 :デフォルトの名無しさん:2006/11/21(火) 06:50:38
>>996
以下はVS2005で正常に動作したコードだが、
これが駄目だったら、何かファイルが壊れているのかもしれない。

CTypedPtrList<CPtrList, CString *> list;
CString * pObj = new CString(_T("文字列"));
POSITION pos = list.AddTail(pObj);
CString * pAdd = list.GetAt(pos);
delete pAdd;

998 :996:2006/11/21(火) 07:32:13
>>997
ありがとうございます。
私のところはVS.netですが、
いただいたコードを試しましたが、OKでした。

もうちょっと調べてみます。。

999 :デフォルトの名無しさん:2006/11/21(火) 07:51:59
^

1000 :小倉優子 ◆en0rG2J.f6 :2006/11/21(火) 07:52:30
1000ならジュースでも飲むか

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

250 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)