■ VisualC++(MFC限定)相談室 MFC10.dll■

このエントリーをはてなブックマークに追加
Microsoft Foundation Classライブラリ専用スレです。

スレタイ壊れているけど前スレ
■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc2.2ch.net/test/read.cgi/tech/1062098350/

関連リンクは >>2-10 の辺り。
過去スレ
■ VisualC++(MFC限定)相談室 MFC8.dll■ (スレタイ壊れているけど前スレ)
http://pc2.2ch.net/test/read.cgi/tech/1056584836/
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc2.2ch.net/test/read.cgi/tech/1047949606/l50
■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc2.2ch.net/test/read.cgi/tech/1039607377/
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/tech/kako/1028/10285/1028553308.html
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/tech/kako/1021/10216/1021620974.html
■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/tech/kako/1014/10140/1014057520.html
■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/tech/kako/1008/10080/1008031675.html
■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/tech/kako/989/989902845.html
スレタイ壊れているけど前スレ

これ消し忘れた。スマソ
>>1
ではスレ最初の質問を。開発環境はVC6.0。

CRichEditCtrlでキー操作による変更をEN_CHANGEで処理し、
SetSelectionCharFormat()で文字色など書式属性を変更している。
削除するだけなら問題ないが、日本語入力で文字列を追加すると
書式属性の変更が画面上に反映されない。
別のコントロールにフォーカスが移った頃になってやっと表れる。
EN_IMECHANGEを試してみたけど、ENM_IMECHANGEをマスクしても来なかった。
(どこかのサイトにRichEdit1.0でないと来ないとか書いてあった)
以上よろしくです。
6デフォルトの名無しさん:04/01/17 15:47
>>5
変更後に
m_RichEdit.InvalidateRect(NULL);
としてみたらどう?
>>6
それやってるんだ。あとInvalidate()も。
すでに正常に表示されている属性はそのままで、
追加した文字列だけが、1つ前の文字の属性になってしまう。

例…「あ」が赤で「えお」は青、新規追加の「いう」は緑にしたい
 「あえお」 → 「あいうえお」
こうすると「あいう」までが赤で「えお」が青になる。
でも削除、たとえば「え」を消すと「あ」赤、「いう」緑、「お」青に変わる。
EN_CHANGEじゃなくて、WM_IME_〜を捕まえないといけないのかな。
ダイアログが表示されているときに、エンターキーやESCキーを押すと終了してしまいます。
これらの動作を禁止するにはどうすればいいでしょうか?
>>8
OnOK()
{
//CDialog::OnOK(); こいつわEndDialogしやがる
return;
}

( ´∀`) <OnCancelモナー
モナーさん感謝します

しっかり出来ました(^o^)/
>>8
こことか見るとその手のマメ知識が身に付くよ
ttp://www.athomejp.com/goldfish/mfc/
いろいろ書いてありますね
しかもクラス別に書いてあって見やすい^-^

今度MFCで困ったとき覗いてみます(^-^;)
リソースのテキストボックスのプロパティにてnumberをtrueにして数値以外入力できないようにしたのですけど
コピペすると文字も入力できてしまいます。
数値だけしか入らないようにしたいのですがいい方法はありますか?
>>13
テキストボックスって「エディット・ボックス」のことか?

コントロールにメンバ変数をintやUINTで割り当ててやれば範囲指定も含めて
勝手にやってくれるが。
Masked Editを使うわけにゃいかんかね?
>>14
普通にキー入力だとちゃんと無視してくれるんですが、
それだとコピペで入力できてしまうんです

>>15
ActiveXコントロール作ってるのでなるべくActiveXコンテナにはなりたくないと思ってます。
メニューの「貼り付け」って項目を
メニューがプルダウンしたときに
クリップボード中にテキスト形式のデータがあるかを判定して
あれば有効に、なければ淡色表示にしたくて
UPDATE_COMMAND_UIを使って実現できたんですが
これを使うと便利な事に同じIDのツールバーも同じ処理をしてくれるんですが

メニューの場合は、プルダウンしたときだけに呼ばれるのですが、
ツールバーの場合は、マウスが1ドット動いただけで呼ばれてしまいます
メニューの有効無効の判定する処理が重くなるとかなりの負荷になります
UPDATE_COMMAND_UI以外にプルダウンメニューだけに
適応できる方法ってないでしょうか?
メニューのIDとツールバーのID変えれば済むのですが、
管理上わかりにくくなるので困ってます
ツールバーのUPDATE_COMMAND_UIはOnIdle()の時に呼ばれるようになっていたきがする。
1917:04/01/20 20:57
自己解決しました

OnUpdate〜(CCmdUI* pCmdUI)
のpCmdUI->m_pMenu が NULL なら
メニューのプルダウン時じゃないので
無視してツールバーが更新してしまう事を防げました
これで重い判定でもプルダウンした時のみに適用できます
20デフォルトの名無しさん:04/01/20 23:49

CListView で SortItemsの比較関数の実装を行っています。

static int CALLBACK CExtListView::CompareFunc
(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);

このコールバック関数なんですが、CListViewの中で
GetListCtrl().SortItems(CompareFunc, (DWORD) pSortStruct);
という形でCompareFuncを呼び出すと、第1、第2引数が
いずれもNULLの形で呼び出されます。

これは何が問題なのでしょうか?
両者には有効なLVITEMへのポインタが渡されると思っていたのですが。
渡されるのはLVITEMのlParamへのポインタじゃないか。
>>21
ども。

調べてみたら LVITEM の lParam を設定しないと駄目みたいですね。
設定してデバッグで確認したらCompareFuncに渡されるのは
ポインタではなく、
0 1 / 2 3 / 4 5
といった数字の組み合わせみたいです。おそらくアイテムの
番号なんでしょう。

もう少し研究してみます。
あぁごめん、ポインタではなくlParamね。
で、普通はそのlParamにアイテムのポインタなんかを入れておいて、
CItem pItem = new CItem;
pItem->text = _T("ABC");
LVITEM.lParam = (LPARAM)pItem;
・・・
・・・
CompareFunc(・・・){
 CItem pItem1 = (CItem*)lParam1;
 CItem pItem2 = (CItem*)lParam2;

 // pItem1->textとpItem2->textを比較してソート
}

ってやり方が常道かと。

どもども。どうにか実装できました。
ソートアルゴリズムにはあまり明るくないんですが、
同じソート関数で昇順と降順を交互に変更できる
んですかね。

最初、昇順のときと降順のときでソート関数の符号が
+-逆になるように比較関数を書いてみたんですが、
どうも動作がおかしいので、符号を逆にすることを
やめたら、正しくソートされるようになりました。
(以前は2回ソートするとソート順が変わるようになっていた)



引き続きリストビューのソートの研究をやっておりますた。
↓こちらのスレを参考にしてやってました。
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TVdrag.html

>>24の段階では、まだ正しく動作していなくて、
Swap関数を作って、要素を入れ替えながらソートしたら
うまくいかないことが分かったんですが、ソート関数自体は
大筋で正しいアルゴリズムだったようです。

それで↑のURLを見ると、LVITEMのソート直前にlParam に
0から順番に数値を割り振っていますが、やはりこれを
やらないとうまくソートされない。初期の挿入時に1回やれば
OKなのではなく、ソートのたびに再度割り振り直さないと
いけないようです。これはすべて同じ数字の割り振りでは
駄目で、MaxItemCount から0まで減算しながら割り振る方法
でも正しくソートされないようです。(逆順にもならなかった)

それで以上のような結果を踏まえると、>>23さんのおっしゃる
ように lParam にポインタをいれておくことはできないのではな
いかと思うのですが、どうでしょう? 実際にポインタを入れて
使っている人いますか?

できるって。以下文字列アイテムのソート

int nResult = ::lstrcmpi(pItem1->GetName(), pItem2->GetName());

return nReault;

逆順ソートしたい場合は

int nResult = ::lstrcmpi(pItem2->GetName(), pItem1->GetName());

return nReault;
>>25
>うまくいかないことが分かったんですが、ソート関数自体は
>大筋で正しいアルゴリズムだったようです。

ソート関数ではなくコンペア関数ね。
ああ、そっかそっか。
わかりますた。

CompareFunctionで lParam1 と lParam2 を
アイテムの順番と一致することを前提に関数を
書いてますた。

たしかにできるかも知れないですね。
引き続き研究してみます。

LPARAMにポインタを使ってできますた!
この場合は >>25 のように番号の再割り振りは不要らしい。
動作原理は今ひとつ不明ですが・・・。
>>29
SortItems呼び出し中はアイテムの位置が変わらないんだよ。
比較関数が呼ばれるたびに位置が入れ替わるクイックソートとは違うわけだ。
だから、インデックスで指定するGetItemやGetItemTextは
常に同じアイテムからデータを取得することができる。
そのためにlParamにインデックスを振って識別できるようにするわけだ。
これが、lParamがリストビュー以外で構成されているデータを指すポインタであっても同じ。
要はlParamが一意のアイテムに対応付けられていて比較に必要なデータを取り出すことができればいいわけだ。
(ソートが必要なければ対応付けは当然要らない)
インデックスをlParamに振るのは楽だけど、アイテムが多くなるとパフォーマンスの問題が出る。
でも、もっと大量になるとオーナーデータになって、SortItemsが使えなくなるんだけどな。
どもども。

まともなリストビューの実装はほんと難しいですね。
エクスプローラを目指しているんですが、CImageListの
画像もデフォルトだと黒っぽくて汚いし、一筋縄では
いかない感じです。

リストビューで質問なんですが、複数のアイテムをドラッグするには
どうしたらいいのでしょう?

1つのアイテムのドラッグはできたし、選択された複数のアイテムの
取得もできたみたいなのですが、CImageList のドラッグする関数が
static なので複数のドラッグイメージを同時にMoveできない
みたいなんです。

CListCtrl::CreateDragImage() を繰り返して各アイテムのイメージを
作って、それを結合して1つの大きなイメージを作ることはできるん
ですかね。
>>32
ふーむ。よくよく見てみると、エクスプローラの場合、
複数同時ドラッグは独自イメージを作っている感じ・・。
自分でイメージ作るのか・・・マンドクセ。

CImageList ってCDCあたりからイメージを作成することって
できないんでしょうか? アイコンとビットマップからの作成は
あるんですが、メモリ上で作る方法が知りたい。

CListCtrl::CreateDragImage があるので、不可能ではないので
しょうけど、どうやってんだろ?
CBitmapから作れるんだから、いくらでも可能だろ。
ダイアログの左側にツリー貼っつけて、
右側のコントロールを切り替える奴はどうやって実装してるんですか?
漏れはDialogを子ウィンドウで作って
ShowWindow()で切り替えしてる。
それが正しいかどうかは知らね。
3836:04/01/26 18:39
>>37
回答ありがとうです。
子ウィンドウかー。やってみるですよ。
WTLを使ってIEツールバーを自作しています。

リソースにビットマップ画像の列を入れて
ボタンに画像を入れていますが、
あれって全部同じサイズじゃないとダメなのでしょうか?

Googleツールバーだと最初のロゴだけ
違うサイズなのでできるはずなのですが・・・。
あそこだけ、違うウィンドウなのかな?
特定のディレクトリ配下の複数のサブディレクトリからファイルを検索するロジックを
書かなきゃならなくなりそうなんだけど、CFileFindかなんかを使って
サブディレクトリにぶち当たるごとに再帰する以外になんかいい方法あるかな。
自分で書くと、テストが面倒で・・・
>>40
再帰する以外を考える方が面倒だと思うけど?
>>41
どっかに拡張APIでも転がってないかと・・・
#なさそうだなぁ。
"dir /s /b" の出力を利用する。自分では再帰していないので全然オッケーさ♪
マウスによるダイアログリサイズ時や移動時、ダイアログの表示は
そのままで、リサイズor移動予定の枠だけマウスに追尾した表示
になりますよね?これを実際に枠の移動だけじゃなくダイアログの
実体そのものを追尾させる方法ってありますか?
そもそもダイアログをリサイズ可能になんかしねー
移動の方はまったくもって意味不明
>>44
移動時、リサイズ時にダイアログを移動、リサイズする。
WM_MOUSEMOVEやWM_SIZEのタイミングでダイアログをMoveWindowなりSetWondowPosなりしてみては。
動作は確認してないけど。
>>44
それって画面のプロパティの
”ドラッグ中にウィンドウの内容を表示する”
って設定の問題なんじゃないの?
>>47
たぶんWin9xの話だろ
4940:04/01/31 00:20
>>43
どうせ最終的にはフルパスが欲しいから願ったり適ったり。
これでテストが一手間減らせるよ。ありがと♪
ダイアログでのOnButtonでボタンを押したときに効果音がでるようにしたいのですが
どうやればいいでしょうか?
>>50
::PlaySound
>>52
PlaySoundはどのようにして使えばいいのでしょうか?
検索してもいまいち使い方がわからず・・・(ノД`)

今持っているwavファイルの音を効果音として出したいのですが・・・
ヘルプ見れ
>>54
友達の家のPCを使わせてもらってるんですが、ヘルプが見れないんですよ・・・
>>55
ネットで検索の一つでもしれこのやろう!
友達は割れ厨
>>56
検索はもちろんしましたが、詳しく書いてあるサイトがないようなので
>>58
なんでそんなすぐばれる嘘をつくんだ。
>>59
いやホントに検索はしていますが、playsoundと一行書くだけでwavファイルは
鳴らせます・・・とかで、いまいち意味がわかんないんですよ
それでわかんないなら、見込みないからプログラムやめようね。
>>53
::sndPlaySound
#include <Mmsystem.h>
PlaySound( "music.wav", NULL, SND_FILENAME );

Library: Use Winmm.lib
質問です
今回タブコントロールを初めて使うんですが、コントロールの配置方法が良くわかりません。
おそらくshowwindowで変化させることまではわかったんですが
リソースエディタで良いコントロールの配置方法はないでしょうか?
>>64
MFCのプロパティシート/ページのソースでも見てみれば?
66デフォルトの名無しさん:04/02/03 22:52
モードレスダイアログを使おうとしてWeb調べてみたんだけど
やり方がHogeDlg *dlg = new HogeDlg()でインスタンスを作成して、PostNcDestroyでdelete thisってやってるのばっかなんだが
これってHogeDlg dlg;で作成して、いらなくなったらdlg.DestroyWindow()呼んでやるってのじゃだめなの?(わざわざnewするのに意味あるの?)
HogeDlg dlg;だとスコープ抜けたら自動的に破棄されるだろ。
まぁ、クラスのメンバ変数として(ry
69デフォルトの名無しさん:04/02/05 01:49
ダイアログで、ESCやEnter押しても終わらないようにするには、
どうすればいいのですか?
>>69
仕様を考え直す
72デフォルトの名無しさん:04/02/06 22:15
Docクラス、Viewクラス、Appクラス、MainFrameクラス
の関係がよくわかりません。
これについて、詳しく書いてある書籍やWebページがあったら教えてください。

入門書(林晴比古のVisualC++6.0入門)をみてもよくわかりませんでした。
>>72
ソース見てみるのもいいよ。俺はそうやって理解した。
74デフォルトの名無しさん:04/02/06 22:40
>>72
     View
       ↑
App → MainFrame
       ↓
     Document

こんな感じだな。

・Viewクラスから
 GetDocument()でDocumentクラスへのポインタが取れる。
 GetParentFrame() MainFrameへのポインタが取れる。
 AfxGetApp() でAppへのポインタが取れる。

これで各クラスの連携が取れるんじゃないか?
あとは、これをそれぞれどう使うかはユーザー次第。

基本的には
メニュー・ツールバー・ステータスバー・メインウインドウの位置 → MainFrame
クライアント領域の描画 → View
こんな感じになってる。

75デフォルトの名無しさん:04/02/07 20:31
エクスプローラみたいなファイルビューワが簡単に使えるViewクラスって
MFCに入ってないですか?CListViewとCTreeViewで動作をひとつずつ
作っていかないといけないのでしょうか。
>>75
CFileDialog
7772:04/02/08 16:34
>>73
>>74

よくわかりました。ありがとうございます
処理したあとのデータとかまともにレイアウトして出力するのって
いちいちデバイスコンテキストに線とか引いていくしか無いのでしょうか?
一あわせとか超手間なんですが、。
なんか楽にやるクラスとかツールって無いでしょうか。

今回は一応線引きで出来たんですけど苦労したし、変更とかあったら
調整が大変そうなので、よろしければおしえてください。
>>78
若者よ、それが汝の務めなのです。定型的で間違えやすい作業を見つけたら自動化しなさい。
それが数学的な意味で原始的な内容なら探せばきっと見つかるはず、
あなたの直面する業務に固有な内容ならあなたの身の回りになければ世界中のどこにもありません。
>>78
COMでExcel呼び出すとか? 「楽にやる」って要求を必ずしも満たすとは限らないと思うが・・・。
>>76
お、それ盲点だったかも
CFileDialogをうまく右側に組み込めればありだなぁ
ちょっと研究してみよう
>>79
ありがとう、転職でそんなに若くないけどね。(笑

イラレのデータをデバイスコンテキスト用に出力してくれるコードでも書いてみます。
一ヶ月でよくここまでやったなあ、俺
CFileクラスに関して教えてください。

CFileクラスのReadおよびWrite関数にてメモリの内容をファイルに出力、
またはその逆を行っています。(Read、Writeするサイズは50メガ程度
です。)
プログラムを動作させるマシンによって、abnormal program termination
が発生するのですが、これは何が原因なのでしょうか?
 現状50Mを超える場合は複数回に分けて読み込み、書き込みを行って回避
していますが、原因がわからず困っています。

また、エラーメッセージを出力させるようにしたところ、
「システム リソースが不足しているため、要求されたサービスを完了で
きません。」とのこと。

環境
OS :windows200SP4
開発環境:VC++6.0 Enterprise
>>83
CFileくらすというより、API(ReadFile/WriteFile)の問題になると思うが、俺もこの
問題に直面したことがあって、いろいろやった。で、一番手っ取り早いのはI/Oを
小分けに(10MB以下に)することですな。

50Mかそれ以上を 1I/Oでリソースエラー出さずにRead/Writeすることもできたけど、
小分けにするほうが確実。
85デフォルトの名無しさん:04/02/10 21:02
CListViewに関して質問です。
アイテムがダブルクリックされたときのメッセージは、HDN_ITEMDBLCLICKで
よろしいのでしょうか。
実際にプログラムを起動してアイテムをダブルクリックしても対応する関数が
呼び出されません。
NM_DBLCLK。おまい、今すぐControlSpyを貰ってこい。
http://www.microsoft.com/msj/0798/controlspy.aspx
Win32ででかいファイルをストリーミング以外で扱うなら
ファイルマッピングを使うと楽で確実ですよ。
88デフォルトの名無しさん:04/02/11 06:01
>>86
こんな便利なものがあったのですね。
どうもありがとうございました。
89デフォルトの名無しさん:04/02/11 14:44
リソースでなくコード作成したテキストボックスに送られ
てくるメッセージの取得ってどうやればいいのかな?
>>89
あなたみたいにわからん人のためにリソースエディタがあるんですが。
>>90
知ったかは黙っとけよ
>>89
ハンドラ手でかけ
>>89
テキストボックスってエディットコントロールのこと?
質問の意味がわからん・・・。
>>89
CreateWindowで"EDIT"を指定して作ったウインドウのことだな?
SetWindowLongのGWL_WNDPROCあたり調べてみそ

>>93
消費者向けの用語と、開発者向けの用語が違ってるのはよくあることだよ
MFC的には CEdit派生クラス作って、その中でメッセージハンドリングするのが一番簡単なんじ
ゃないかと。

親ウィンドウ側で何か処理したい場合も、親のBEGIN_MESSAGE_MAP〜END_MESSAGE_MAP
に直書きもアリかも知れないし、親のWindowProc()なりで直接処理するとか、派生クラスから
ユーザメッセージ飛ばすとか、いろいろ考えられる。
9694:04/02/11 19:53
>>95
うわあ、その通り!
スレ間違ってました。吊ってきます。
>>92-96
98デフォルトの名無しさん:04/02/11 21:39
本を読んでいてCWinApp::OnFileNewについての記述に

1. ドキュメントオブジェクトを生成しますが、データをディスクから読み取ろうとはしません。
2. CMainFrameクラスのメインフレームオブジェクトを生成。
  さらに、メインフレームウィンドウを生成しますが、まだ表示しません。
  このメインフレームウィンドウは、IDR_MAINFRAMEメニュー、ツールバー、ステータスバーを含みます。
3. ビューオブジェクトを生成しますが、まだ表示しません。
4. ドキュメントオブジェクト、メインフレームオブジェクト、ビューオブジェクトの間に接続を確立します。
  これらのオブジェクトの接続を、
  AddDocTemplate呼び出しによって確立されるクラスの接続と混同しないでください。

という記述があったのですが4が何を言おうとしているのかわかりません。
接続を確立するっていうのは何をしていて、どう混同してはいけないのでしょうか?
>89
別にCreateWindowでもControl IDは設定できるやん。
100デフォルトの名無しさん:04/02/11 22:55
>>98

クラスの接続と、オブジェクトの接続の違いってことだよ。
質問です。他のアプリのメモリを監視するツール(あるゲームのステータスを監視するもの)
を作りたいのですが方法が分かりません。
これもフックを使うのでしょうか?
102101:04/02/12 03:03
APIスレで聞こうと思ったら誤爆・・・
10398:04/02/12 03:59
>>100
ありがd。
104デフォルトの名無しさん:04/02/12 16:23
MFCの勉強をしています。

ウインドウの右上にある×を押したときの動作をカスタマイズしたいのですが、
(アプリケーションを終了させるのではなく非表示にしたい)
キーワードがわからず検索すらままなりません。

キーワードを教えてください。よろしくお願いします。
>>104
WM_SYSCOMMAND
106デフォルトの名無しさん:04/02/12 16:32
MFCと言うよりは、Windowsアプリ全般の話やね
WM_CLOSEメッセージを検索してみそ
MFCならそれをCMainFrameでハンドリングして・・・あとはお好きなように
107デフォルトの名無しさん:04/02/12 16:43
>>105
>>106

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

いきなり検索できるようになりました。
やはりキーワードって重要ですね。
MFCで作ったプログラムの中にファイルなどを含めて、
プログラムを実行したときにそのファイルをC:\\などにコピーしたいんですけど
そのファイルのパスの取り方を教えてください。
__argv[0]
GetModuleFileName()
すいません。説明不足でした。
自分はプロジェクトのリソースファイルの中にコピーしたいファイルを登録しているんですが、
そのリソースファイルに登録したファイルのパスをどうやって取得したらいいのかわからないんです。
それともやりかたが間違っているのでしょうか?
>>111
ファイルをリソースに登録というのは具体的にどうやってんだ?
「ソリューションエクスプローラ」→「リソースファイル」右クリック
「リソースの追加」
ってやってたんですけどこれじゃexeの中に追加されていないことに
気づきました。
やっぱ無理なんですかね…
>>113
リソースの追加で何を追加したんだよ?
リソースの種類にパスというのがあるか?
根本的に認識が間違ってるクサイが。
>>114
すいません。初心者なもので…
自分はリソースにchmファイルを追加したんです。
そうすればexeの中にchmファイルが入って、exeをたたくとそのchmを他の場所にコピーできると
考えていました。
javaでいうとクラスもリソースもjarでまとめられた感じです。

MFCではexeの中に追加できないのでしょうか?
FindResource() とか、LoadResource() じゃないか
>>116
ありがとうございます。これでやってみます!
>>115
やっと判ったよ。
jarはアーカイブファイルだから、複数のファイルを一つにまとめる役割をしている。
リソースを追加するのはファイルを追加するのではなくてファイル中身のデータを追加するんだ。
リソースのデータをプログラム内から直接使う。

君のやりたいことはexeファイルとchmファイルをまとめて配布する事じゃないのか?
好きなアーカイバでアーカイブファイル、とくに自己解凍形式で作れば解決なのではないか?
>>118
救世主!!

ついでに言いますと、exeファイルはいりません。chmだけ配りたいんです。
chmを自動コピーするプログラムがexeというわけです。
>>119
それならアーカイブ内にexeが無くても解決法は同じ。
zipでもlhaでもいいから適当なアーカイバで自己解凍書庫作れ。
君が驚くほど高機能なものが出来るよ。
・・・悪い意味じゃないんだが
こういうの知らない人がプログラミングやってるんだなぁ
時代は変わったね
12294:04/02/14 09:25
>>121
俺なんかHP29Cで高次関数書いてた頃は
ハードウェア/ソフトウェアとは何かさえ説明できなかったよ
アーカイバなんかあってもメインフレームかミニコンだったけど
手元になかったし、もちろん存在すら知らなかった
パソコンのことろくに知らずに新卒でプログラマに就職するのも大勢いるからな
たかだか学校で資格取って、授業やった程度で。
家にもWindowsフォルダの中身いろいろ消しちゃった奴がいた。男の子で。

おまえはおばはんの初心者か!!!!
124デフォルトの名無しさん:04/02/15 00:36
CSplitterWnd で分割した小窓の中に、CFormViewを使ってフォームを表示して
いるのですが、CFormViewで表示されているフォームにWeb browser controlを
置いているのですが、CFormView(CScrollView)が表示するスクロールバーが
じゃまなのですが、これを表示させないようにする方法はありませんでしょうか?
教えてください、すいません。
>>124
なんか、もうすこし推敲してから質問してはどうかね?

要は、FormViewのスクロールバーを消したいんでそ?
http://www.google.com/search?hl=ja&ie=Shift_JIS&q=CFormView+%83X%83N%83%8D%81%5B%83%8B%83o%81%5B+%8F%C1%82%B7&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
126デフォルトの名無しさん:04/02/15 01:30
初歩的なことですんません。
あのー、メッセージウインドウにnumっていう
やつの数値を入れたいのですがどうすればいいのですか?
C言語は一通りわかるのですが、そのノリでいくと
MessageBox( "%d",num);
と、printfとごっちゃになったものを書いてもだめでした。
おしえてください、おねがいしまつ。
>>126
AFXMessageBox(printf( "%d",num));

でできたっけか?
その辺の書式でうだうだ実験やるのが面倒なんで

CString temp ←文字なり数値なり好きなものつっこむ。
AFXMessageBox(temp);

とでもやっときゃとりあえずでるよ。
>>128
それだとバッファしないとだめじゃなかったっけ?
129デフォルトの名無しさん:04/02/15 01:50
どれもできませんでした・・・・
ここはえらくレベルの低いスレッドですね。
やっぱこうだろ?
MessageBox((boost::lexical_cast<std::string>(num)).c_str());




っと冗談はさておいて。
CString str; str.Format("%d", num); MessageBox(str);
とか、sprintfを使うんで内科医?
あ、ほんとだsぬけてら、駄目だこりゃ(笑
>AFXMessageBox(printf( "%d",num));
ワロタ
133デフォルトの名無しさん:04/02/15 02:13
CString strms;
strms.Format("num==%d",num);
AfxMessageBox(strms);

これで一応出来る。
134133:04/02/15 02:15
やべ、130とかぶっちった。
135デフォルトの名無しさん:04/02/15 02:18
できた!みなさん、ありがとうでした。
実はまったくの初心者がオセロをつくっててこまってたのでし。
すいません、初心者できてたんですが、
答えようとがんばってみたけど無理でした。

>>135
たぶん完成は10年後くらいになるんじゃないかなぁ
10年かかるぐらいなら、ゴールしないと思われ。
10年間オセロプログラムに対するモチベーションを保てたら、それはそれですごいと思うよ。
ここまできたとか言いつつ、始めたばかりだとおもわれ。
リバー氏のアルゴリズム
ツールバーにドロップダウンボタンを入れようとしています。

イベントハンドラTBN_DROPDOWNで、メソッドを実行できるところまでは
できているんですが、メニューをロードしようとすると必ず落ちてしまいます。

CMenu cme;
cme.LoadMenu(IDR_MENU1);←ここで必ず出る。もちろんリソースにはメニューあり

エラーはDebug Assertion Failedと出て、場所はFile: afxwin1.inl Line: 22 と出ます。
メモリ系のエラーということは推測できるのですが・・・。
環境はVC++6.0 WinXP Pro PlatformSDK有です。

どうかお願いいたします。
AfxWinInitが呼ばれて無いような感じのASSERTだな
>場所はFile: afxwin1.inl Line: 22 と出ます。
ここまで出ていて何故ソース見ないんだ?
>>143
それの意味がわかってないんじゃないか?
>>141です。
>>142>>143 当然見ました。
_AFXWIN_INLINE BOOL CMenu::LoadMenu(UINT nIDResource)
{ return Attach(::LoadMenu(AfxFindResourceHandle(
MAKEINTRESOURCE(nIDResource), RT_MENU), MAKEINTRESOURCE(nIDResource))); }←ここで落ちる

さらに中へ進むと
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
if (!pModuleState->m_bSystem)
{
hInst = AfxGetResourceHandle();←ここで落ちる
if (::FindResource(hInst, lpszName, lpszType) != NULL)
return hInst;
}
となってます。
afxwin1.inl を見ないでどうすんだ?
ネタとしか思えなくなってきた_| ̄|○
147デフォルトの名無しさん:04/02/16 19:09
コンパイルがエラー・警告なしで実行すると、DebugLibraryというのが開かれて実行できません。

内容は
Debug Assertion Failed!

Program: D:\〜\Debug\abc.exe(実行ファイルの保存先)
File: dbgheap.c
Line: 1011

Expression: _CrtIsValidHeapPointer(pUserDate)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

と出ます。中止、再試行、無視とあるんですが再試行、無視しても実行はされません。
こういうエラーがでる原因は何が考えられるんでしょうか?
解答よろしくお願いします。
ちなみに、dbgheap.c というファイルは検索したんですが見当たりませんでした。
>>147
そのダイアログは、
中止→実行を中断
再試行→デバッガ起動
無視→そのまま続行
だ。
再試行してデバッガ起動すると、とりあえずアサーション起こしたところはわかる
でも、例外を出してる部分の名前を見ただけで
変なポインタをライブラリに渡してるってのは分かるな。
そのライブラリもなんとなくdeleteっぽい気がしないでもないが。
150デフォルトの名無しさん:04/02/17 11:46

 Doc/Viewアーキテクチャでアプリを作ったんですが
ファイルに関連付けられるドキュメントは扱わないので
アプリのタイトルから 無題 - を削除したいのですが、
どうやったらいいんでしょう?

 「無題」だけなら、String Tableをいじればいいんですが、
それでも - が残ってしまいます。何か良い方法ないですか?

>>150
下のどれか試してみて

PreCreateWindow()でcs.style &= ~(FWS_ADDTOTITLE | FWS_PREFIXTITLE);
CFrameWnd::OnUpdateFrameTitle()でSetWindowText()
CDocument::SetTitle()
>>150
CMainFrame::PreCreateWindow 内で
cs.style &= ~FWS_ADDTOTITLE;
>>151
クイックレスありがとうございます。

とりあえず
PreCreateWindow()でcs.style &= ~(FWS_ADDTOTITLE | FWS_PREFIXTITLE);
これで表示されなくなりました。
>>152
ドモドモ。ありがとうございます。
メインのOnCreate()で

SetWindowText("(゚д゚)ウマー ver 1.0");

とかでいけるんでないかい?
って更新してなかったよ。_| ̄|○
157デフォルトの名無しさん:04/02/19 13:29
.NET2003のブラウザスタイルのツールバーなんですが、
Rebarのバンド位置を保存したり読み込んだりしたいのですが
どのようにすればできるのでしょうか?

よろしくお願いします。
.NET2003 のダイアログベースでプロジェクトを作成し、
ダイアログの上にEditBox(EditCntrol)をいくつか置いて、
プロパティでAcceptFilesをTRUEにしました。
要は、このエディットボックスにファイルをドロップして
そのファイル名を表示したいのですが
PreTranslateMessage()の中でWM_DROPFILEを監視するとかでなく、
OnDropFiles()のように関数が呼ばれるようにはできないのでしょうか?

MESSAGE_MAPに
ON_EN_DROPFILES(IDC_EDIT1, OnEnDropFileEdit1)
みたいなイメージです。

なにか、情報があればよろしくお願い致します。
サブクラス化すれば?
>>157
donutを参考にすればいいと思うよ。
内部で生成したHTML表示させて、
リンクのクリックとかを取得
ってことってできますか?
162デフォルトの名無しさん:04/02/21 19:00
ダイアログバーのコンボボックスついての質問です。

1.リソースエディタでダイアログバーを新規作成してコンボボックス(IDC_COMBO)を貼り付ける。
2.CMainFrameのCDialogBar型メンバ変数(m_wndDlgBar)を追加する
3.CMainFrameのOnCreate関数でCreateする

以上の手順でダイアログバーを生成しました。で、コンボボックスに項目を
追加しようと、CMainFrameのメンバ関数に下のコードを入れました。

CCombBox* pCombo = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO);
pCombo.InsertString(-1, "aaaaa");

ところが実行してみるとコンボボックスに項目が追加されません。
どんな原因が考えられるでしょうか。
ソースからコピペで持ってくることはできんのか
追加されてないというのはどうやって確認したのか
CCombBox* pCombo = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO);
pCombo.InsertString(-1, "aaaaa");

問題の件はどこが悪いのかはしらんけど、これってコンパイル通るのか?
なんかすごいことしまくってるな。
追加されるされないの前にコンパイルできないよねぇ。
もいちど見直してみてはいかが?>>162
166162:04/02/21 21:48
レスありがとうございます

>163
コンボボックスをクリックしてもaaaaaが表示されませんでした
>164
すいません
CComboBox* pCombo = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO);
pCombo->InsertString(-1, "aaaaa");
の間違いでした。
コンボボックスの高さ設定とかは?よくわかんないけど。
>>167
オレもそう思って高さ縮めてやってみたけど
追加すると拡張されるようだ
そこらへんが気になるならとりあえず
SetCurSel
ダイアログバーにメッセージが飛んできてない。
CTreeCtrlで作成した階層構造を保存したり読み込んだりしたいのですが、
どのようにデータを保存したらよいのでしょうか?
>>171
XML
ちょっと質問。
CButton.Create()で設定したテキストを取りだしたいんですが、どうすればいいでしょうか?
ボタン状態を取得するのはあったんですが、それはスタイル情報だけみたいなんです。
よろしくです。
MFCじゃなくても良いのですが
バイナリデータを表示してくれるクラスはありますか?
>>173
GetWindowText()
>>174
そりゃ16進ダンプで出せってことか?
多分ないぞ。自分で作れ。
関係ないけどCButton.Create()という書き方に違和感がある
>>174
デバッグ用ダンプなら
CDumpContext
CObject::Dump
AfxDump
というのがあるが

データを16進数で文字列化したいっていうのだったら
wsprintf(DumpBuf, "%02x", buf[i]);
とかでループすれば?
2進数で表示するって意味だったりして<バイナリデータ
180173:04/02/23 17:18
>>175
dくす!
ディレクトリを指定できるエディットボックスを作りたいんだけど、
そんなコントロールないのかな?

コンボボックスのボタンの所が"..."ってなってるヤツ。
あるからそういうのが存在するんだろ。
>>181
ようわからんけど、標準のダイアログの引数うんにゃってやってなんかしたら
ディレクトリのパスは取得出来たと思うぞ。
>>181
1."..."というテキストを設定したボタンをエディット・ボックスの横に置く
2.ボタンにCFileDialogを起動してパスを取得するコードを付ける
3.取得したパスをエディット・ボックスに入れる
>>184
4.最後によく煮込んだカレーをまんべんなくかける。

これで完璧。
質問はコンボボックスだっつってんのに。
>>186
> ディレクトリを指定できるエディットボックスを作りたいんだけど、

??????
ぁっ、ソレソレ。
ありがとうございます。
エクスプローラで、デスクトップ以下のディレクトリがツリー表示で出て、
ディレクトリを選択できるヤツあるじゃないですか?
あれはどうやるんですか?
ありがとうございます。
なんていい人達なんだ・・・
金持ちになったら雇ってあげます。
>>193
そんな気使わなくていいから今すぐ千円くれ。
>>193
そんな気使わなくていいから今すぐ一万円くれ。
>>194-195
オイおまいら
>>191-192を書いたのはオレなんだが・・・
>>196
オレオレ詐欺ですか?
198デフォルトの名無しさん:04/02/25 12:01
楽しい雰囲気のとこすみません。

CEditViewにログを出力していくようなプログラムなんですが
ログを保存しようとすると文字化けしてしまいます。

画面上は正しく表示されているんですが、
保存するとUNICODE変換されてしまっているようです。

hEdit.ReplaceSel(strbuf); //strbufはMBCS
でも
::SendMessage(hEdit, WM_GETTEXT, sizeof(buf), (LPARAM)buf); //bufはMBCS
でも
LockBuffer();でみると勝手にUNICODEに変換されてしまっています。

なにが原因なのかさっぱりわからないんです。
よろしくお願いします。

.Net2003 XPSP1
199デフォルトの名無しさん:04/02/25 18:02
画像の表示について質問があります。
サブクラスにしたstaticコントロールに画像ファイルをドラッグ&ドロップして
画像を表示させようとしていますが、ドラッグした後に一度ウィンドウを
他のウィンドウの下に隠さないと描画されません。
OnPaintを直接呼び出したり、WM_PAINTのメッセージを送ってもダメなので
解決法がわかりません。

.Net2003Pro XPProSP1です。
よろしくお願いします。
InvalidateRect()かな?
PAINTメッセージは無効領域が無いと描画しません
無効領域(Windowsを一度隠すとか)ができるとWM_PAINが発生し、
めでたく描画できます。
InvalidateRectはこの無効領域を発生させるためのものです。
202199:04/02/25 18:44
>200-201
OnDropFiles()の最後で利用したら解決しました。
ありがとうございます。
>>198
MFCから離れて久しい俺が答えるのもはばかられるけど
NT系は内部で文字列をUnicodeで管理してるからじゃないですか?
一連の流れと
>>198
の出だしに藁他
CImageList クラスで、

BOOL GetImageInfo( int nImage, IMAGEINFO* pImageInfo ) const;

 nImage :イメージの 0 から始まるインデックス。

を用いて、たとえばリストの3番目のIMAGEINFOを得ようと、 nImage に2といれても、
イメージリスト全体の情報が取られるようで、
そこから得られた HBITMAPを描画すると、イメージリストの全体の画像が表示されます、
リストの特定の番目の IMAGEINFO が得られるような雰囲気がある関数なんですが、
そうなってくれません。
任意の IMAGEINFO が欲しいときはどうしたらいいでしょうか?
>>205
先ずはマルチはよせ。
>>205
pImageInfo->rcImage
208デフォルトの名無しさん:04/03/02 10:13
ちょっと質問を。
"2003/03/02 12:34:56"といったような文字列をCTimeに変換する関数はありますか?
sscanf使っても出来るんですが、この手の変換は良く使われそうだからありそうな気が。
>>208
CTimeのメンバを調べてみる
オブジェクト作成に関する関数は以下の三つ

CTime()
GetCurrentTime()
operator =

勝手形式で文字列化したものは自分で処理するべし
>>208
直接は無いような気が。
InternetTimeToSystemTimeとか、COleDateTime::ParseDateTimeとか、代替がきくやつはあるけど。
どっちも反則気味だけど
年月日の形式は国によって全然違うから
一般的なものはないんじゃないかな。
213208:04/03/02 11:37
>>210 >>212
おお、出来ました出来ました。
intで年月日バラバラと書くのがかっこ悪いと思っていただけなので、これが求めていたものです。
ありがとうございました〜。
214デフォルトの名無しさん:04/03/02 22:02
質問お願いします。
MFCのAppWizardで生成されあcppファイルには全て先頭に

ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

と書かれますが、なぜデバッグ時だけTHIS_FILEを変数として定義
する必要があるのでしょうか?
215デフォルトの名無しさん:04/03/02 22:24
visual C++6.0を使おうと思うんですが、ネットで使い方載ってるサイトあります?
初心者レベルで、本当に1からみたいなやつで。
割れ厨は帰れ。通報するぞごるぁ。
>>20
初めて聞いたよ。詳しく教えてくれ。
>>214
DEBUG_NEWで確保したメモリをdelete忘れしたときに、DEBUG_NEWされたソースファイル名と行番号を表示するのに使うから。
別に無くてもプログラム自体は動く。

1つのクラス(A)を複数のクラス(B,C,D)で使っているんだけど、

そのAクラスにブレークポイントをおいた場合、
デバッガ上で、どのクラス(A,B,C)から呼び出されたかかを知る方法は無いでしょうか?
プログラム的に理解できるように作成するしか無いでしょうか?

>>219
そのためのスタックトレース。
221デフォルトの名無しさん:04/03/03 10:10
スタティックとボタンに貼り付けるアイコンについて質問です。
リソースで96x96(256色)のアイコンだけを作成して下のように
SetIconで貼り付けたのですが、サイズが32x32に縮小されてしまいます。

m_Static1.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));
m_Button1.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON2));

縮小されずに表示するにはどうすればいいですか
よろしくおねがいします。

>>221
アイコンやめてビットマップ貼ったら?
223221:04/03/03 10:32
>222
最初はビットマップでやっていたのですが画像の背景を
透過にしたかったのでアイコンにしました。
ビットマップでも画像の背景を透過できるのであれば
どのような方法があるのでしょうか?
224221:04/03/03 11:57
自己レスです。
m_Button1.SetIcon((HICON)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1),IMAGE_ICON,0,0,LR_DEFAULTCOLOR));

LoadImageがキャストできたのでこの方法で解決しました。
225デフォルトの名無しさん:04/03/03 13:14
IDD_FORMVIEWってどうやってはりつけするんですか?
>>225
釣られませんよ。
ちょっと質問させてもらいますね。
MFCにはあんまり関係ないんですけど…
最近VCがやたら固まります。
特にビルドとかしたら、かなりの確立で「応答なし」状態になってしまいます
以前まではまったくこんなことはなくすらすらとビルドできていたのですが…
どなたか解決法おしえてください
おねがいします
>>227
現象出る直前に何をしてたか語れ。
>>228
いぁ、普通にビルドしてたんすよ。
そしたら急に固まっちゃって…、それ以来ずっとです
入れ直せば?
取り敢えず.nobファイル消してみ
232225:04/03/03 15:18
つりじゃないです。
本当にわからないんです。
233227:04/03/03 16:11
だめです、再インストールも試してみましたが。どうしてもコンパイル時に
固まります。
>>.nobファイル
これ自体見当たらないのですが…どこにあるのでしょうか?
234227:04/03/03 16:32
固まるというよりも、コンパイラからの応答がなくなっているという感じです
VC++自体は固まってはいません。ビルドの中止も選べますが…選んでも何の
応答もありません、結局のところ強制終了するしか次の作業に進む方法はありません

いったいどうなってるんでしょう…
235227:04/03/03 16:35
何度も何度も申し訳わけありません。
Debugフォルダを消すとビルド+コンパイルが可能になります。
しかしいったんDebugフォルダができてしまうと、それ以降コンパイルができなく
なるようです…

OSごと再インスコしたら?
もしくはVCだけ、アンインスコ/インスコするとか。

メモリ周りは大丈夫かな?
うちはメモリ設定がSTDだと、メモリがスピードに
ついていけずに誤った値になってしまってたよ。

時々、いきなりリブートしてたんだけど、
メモリ設定を遅めにしたらmemtest86でも
エラーが出なくなったし安定した。
237デフォルトの名無しさん:04/03/03 16:40
>>227
それ、うちもたまにある。再現不可能。
でも、忘れたころに起きる(w
ビルド直前にファイルは保存するみたいなので、
KILLしてもソース関係は最新状態で残るみたいだけど。
ビルドは終わったのに制御が戻ってこないっていう感じ。
ボタンやメニューはビルド中のステータスのまま。
なんか、特定の操作を行った時に起こる感じはするが、
それがどういう手順なのかはわからない。
ビルドを中止した後に再ビルドすると、
起きやすい感じ(あくまでも感じ)はする。
もしかして>>231は.ncbのことを言ってるのではなかろうか。
239デフォルトの名無しさん:04/03/03 17:06
メニューのオーナードローなんかで、
無効で灰色になっているメニューを描画する関数をなんて言いましたっけ?
誰か覚えている方、関数名とその引数フラグを教えて下さい。
240デフォルトの名無しさん:04/03/03 17:07
>>227
XPで使用しているとき、VCのsp5を入れていないと
起こるようです。sp5を入れたらほぼ無くなります
>>239
DrawState
引数はMSDNで...
>>239
DrawState? 詳細は自分で調べて。
あうちちち。リロードしてから書けばよかった…。
>>239
灰色文字列
かも
245227:04/03/03 22:02
皆さんお騒がせしました。
sp5入れたら解決しました
ありがとうございますm(_ _)m
246デフォルトの名無しさん:04/03/03 22:03
VS6.0SP6マダー? マチクタビレターマチクタビレター
98世代だかんねー もうじき(ry
248デフォルトの名無しさん:04/03/03 23:24
MFCでプロセス間でメモリを共有させるにはどうすればよいのでしょうか?
>>241 >>242 >>244
どうもありがとうございました
>>248
MSDN読め。
共有メモリ、セマフォ、mutex、選り取り緑だ。
エクスプローラー上で、現在選択しているファイル名を取得したいんですが、
何かいい方法はないですか?
アクティブになっているエクスプローラのウィンドウハンドルとか取得すればなんとかなりますか?
252デフォルトの名無しさん:04/03/06 11:52
>>251 すべてXPの場合だが
エクスプローラのウインドウ(クラス名ExploreWClassかCabinetWClass)をEnumWindowsなどを利用して検出、
その子ウインドウのクラス名SHELLDLL_DefViewをFindWindowExを利用して検出
そのまた子ウインドウのクラス名SysListView32のウインドウがフォルダービューのウインドウとなるので
同じくFindWindowExを利用して取得。

int Selected=ListView_GetSelectedCount(ハンドル);
関数を利用すれば選択されているファイル数が取得できる。

while(1)
{
i = ListView_GetNextItem(ハンドル,i,LVNI_ALL|LVNI_SELECTED);
if(LvItem->iItem == -1)
break;
}
と回せば、選択されているアイテムのインデックスが次々に返る。

しかし、残念ながらそのアイテムのテキストを取得する方法がどうしてもわからん。
恐らくListView_GetItemかListView_GetItemTextを使用すると思われるが、
ことごとく失敗するのでその先は自分で調べてください
if(LvItem->iItem == -1)

if(i == -1)
に訂正
>>221
いまさらだがCImageList::ExtractIconも結構使えるから
頭の片隅に入れておいて損は無いよ

255デフォルトの名無しさん:04/03/06 21:52
仮想リストのような仮想コンボボックスってないですかね。
データ件数が多すぎてどうにも煮詰まってます。
>>255
意味不明。
257デフォルトの名無しさん:04/03/06 22:53
なんでMFCのヘッダファイルにはインクルードガードがついて
いるのに#pragma onceまでされているのですか?
258デフォルトの名無しさん:04/03/06 23:07
ちょいと変な質問かと思いますが

カスタムリソースとして登録したWAVファイルを
MCIで再生させる方法はありますでしょうか?

#一時ファイルとして書き出したりしない方法であればお願いいたします
>>257
性善説: M$にもアフォはいる
性悪説: 他社のコンパイラを牽制するため
260257:04/03/06 23:39
>>259
ソレダ! >性悪説
261デフォルトの名無しさん:04/03/06 23:50
MFCだけじゃなくwindows.hとかにもあるよね > #pragma once
#pragma onceって実質コンパイラ依存じゃないんじゃないの?
てことは性善説か
>>252
ありがとうございます。
その方法で何とかがんばってみます。
リソースのダイアログをメニューを押したときモーダルで呼び出すメソッドです
リソース内にはタブがありましてタブをコントロールしたいのですが
下記のようにするとエラーがでます。TCITEMの初期化の問題でしょうか?

void CMainFrame::OnTest()
{
resouce_dialog rd;

TCITEM TabCtrlItem;
TabCtrlItem.mask = TCIF_TEXT;
TabCtrlItem.pszText = "Hi!";

rd.m_tab.InsertItem(1,&TabCtrlItem);
rd.DoModal();
}
266265:04/03/08 01:44
呼び出す位置が間違ってました。スレ汚し申し訳ない
スプリッタウィンドウの各ペインに割り当ててあるビューを動的に切り替えることは
できますか?できるとすればどうやったらいいのですか?
ShowWindowじゃ駄目か。そうか。
269267:04/03/09 16:52
>>268
すんません。初心者なのでよく分からないのですが、それはこういうことですか?

例えばビューが2つのコントロールを持っていたとして、その2つのコントロールは
クライアント領域全面を占めている。このとき、切り替えたい場合、一方のコントロールを
ShowWindowで表示、もう一方のコントロールは非表示にする。

これなら簡単そうですね。Visual Studio.NETではコードの編集中とデバッグ中では
スプリッタウィンドウの分割すら切り替わっていますが、これは難しそうですね。

どうも回答ありがとうございました。
現在実行中のアプリケーションが
最小化されているかどうかを知るにはどうすればいいのでしょうか?
最小化されてるのに毎フレーム描画処理してて、無駄かな、と。
271デフォルトの名無しさん:04/03/10 15:59
>>270
GetWindowPlacement()

VS2003で開発してるんですけどメニューに項目を追加してIDを入力して
クラスビューからクラス選択してプロパティでイベントの追加でメニューに
追加したID探しても見つからないことが多いんですけど何ででしょうか?
メニューエディタからプロパティで確認するとIDが数字になってるときがあり、
IDを選択しなおすとイベント追加できるんですけど。

正しい順序とかあれば教えてください。おながいします。

272デフォルトの名無しさん:04/03/10 16:20
CListCtrlをオーナードローでやる場合、チェックボックス付けたい時は自前で貼り付けるしかないのでしょうか?
今はDrawItemの中でCButtonオブジェクトを移動してるんですが、これだと非表示領域の分が画面に残ってしまいます。
行が非表示になる時にイベントが来ればいいのですが、そういうのはありますか?
>>270
BOOL CWnd::IsIconic()
274デフォルトの名無しさん:04/03/12 13:51
リストコントロールで質問です。
レポートビューになっている時に、キー操作でスクロールさせた場合ってメッセージ何もdでこないのでしょうか?
OnVScrollは反応しませんでした。
275デフォルトの名無しさん:04/03/12 14:52
>>274
空気嫁!
276デフォルトの名無しさん:04/03/12 15:02
タスクマネージャで終了できないソフトを作ることは可能?
出来るよ。
サービス関係はそうじゃないか?
試しにタスクマネージャで適当なサービスを
終了させてごらん。アクセスを拒否されましたとか出るでしょ。
278デフォルトの名無しさん:04/03/12 16:29
サービスを使わなくてWMでなんとかできないのですか?
監視用プロセスを作ってお互い監視し合い
どっちかが終了したらもう一方が再び起動させるというのは?
同時に終了されるとダメだけど。
確かウィルスで、タスクマネージャにプロセスが
現れないのがあったと思うが、これなら
終了できんぞ。w
>>280は何か面白いことでも言ったのか?
rikaidekinai baka↑
wを付けるのが寒いってこったろ
ということはIsWindowをつかえばいいってことかな?
285デフォルトの名無しさん:04/03/12 23:12
分割ウィンドウをもちいていくつかのビューを割り当てたときのメニューハンドラを
書く場所について質問です。

あるビューにメニューハンドラを書くと、そのビューがアクティブのときは、そのメニュー
項目が選択可能となりますが、非アクティブのときは選択が不可能です。

アプリケーションクラスやフレームウィンドウにメニューハンドラを書けば、ビューの
状態に関わらず、メニューが選択可能となりますが、必要な情報にアクセスしづらく
なります。

こういった場合のどのようにするのが一番いいのでしょうか?
286デフォルトの名無しさん:04/03/12 23:41
ダイアログの最小化で質問です。
ダイアログベースでメインのダイアログから
モードレスダイアログを表示しているのですが、
メインのダイアログを最小化すると、
表示されていたモードレスダイアログも見えなくなります。
そのモードレスダイアログの親はNULLにしてあるのですが...
どうすればメインダイアログだけを最小化出来るんでしょうか?
VC++7.0のMFCで自作のATLをラップしたActiveXコントロールクラス作成をしたのですが、
メッセージからイベントを設定してもイベント起こしてくれません。
デバッガで見たところ、そのルートすら通ってくれていないようです。

自作のATLActiveXコントロールをラップしたMFCActiveXコントロールクラスから
イベントを受け付ける方法はどうしたらよいのでしょうか?
>>285
>状態に関わらず、メニューが選択可能となりますが、必要な情報にアクセスしづらく
>なります。
なぜ?MainFrameなりWinAppなりからViewにメニューが呼ばれたよと
教えてあげればいイだけジャン
>>285
ビューに関することならSplitter、ドキュメント操作ならDocumentにハンドラ作ればいいんじゃないの?
290デフォルトの名無しさん:04/03/13 20:13
拡張コンボボックス(CComboBoxEx)でGetLBTextLen使うと
WinMEの場合、文字列の長さをバイト数で返すんじゃなくて
文字数を返すみたいですが、これってWinMEのバグですか?
# 例えば"abcあいう"なら通常9を返すところが6が返って来る。

GetLBTextのMFCの内部コード見てみると明らかにヤバいんですけど。

void CComboBox::GetLBText(int nIndex, CString& rString) const
{
    ASSERT(::IsWindow(m_hWnd));
    GetLBText(nIndex, rString.GetBufferSetLength(GetLBTextLen(nIndex)));
    rString.ReleaseBuffer();
}

# GetLBTextLen(nIndex)で本来より少ない文字数が返ってくるため
# GetBufferSetLengthで文字数より少ないバッファしか割り当てられず
# バッファオーバーフローを引き起こす可能性が。
>>286
MFCの場合、NULLにすると親なしって訳じゃないんだよ
ソースを追っていってごらん
>>290
それはほんと?マルチバイトの文字数を返してる感じ。
ホントだとしたらMEのコンボボックスAPI関連のバグっぽいけど。。。。
293290:04/03/14 12:41
>>292
ホントです。
これがWinMEだけの問題なのか9x系全般における問題なのかも気になるところ。
なおXPは無問題でした。
294デフォルトの名無しさん:04/03/14 13:18
295290:04/03/14 13:51
>>294
非常に参考になりました。
そりゃそうですわ、拡張コンボボックス扱うプログラム組めば
絶対気が付きますもん。このバグ。
只、関数仕様を良く読んでないだけだな。おかしい。
>>285

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
 // アクティブでないビューにもメッセージを送る
 if(m_wndSplit.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)){
  return TRUE ;
 }

 CCmdTarget *pview ;
 int i, j, n, m ;
 n = m_wndSplit.GetRowCount() ;
 m = m_wndSplit.GetColumnCount() ;

 for(i = 0 ; i < n ; i++){
  for(j = 0 ; j < m ; j++){
   pview = (CCmdTarget *)m_wndSplit.GetPane(i, j) ;
   if(pview->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)){
    return TRUE ;
   }
  }
 }
 return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

CSplitterWndを持ってるクラスでな
298285:04/03/16 05:43
>>297
ぬぉぉ、ありがとうございます。このような丁寧なレスはいまだ頂いた例がありません。
これで汚くなってたソースもすっきりしそうです。
299デフォルトの名無しさん:04/03/16 08:34
ライブラリ関係で質問があります。

スタティックライブラリでクラスや構造体を定義します。
struct TESTSTRUCT{};
class TestClass{};

あるDLL内でそのライブラリ内のクラスを使用します。
class DLL_DECLSPEC DLLTestClass : public TestClass{
   TESTSTRUCT str;
};

としてDLLをビルドしたとき、

"DLL インターフェイスではない TestClass が DLL インターフェイスのベースになる class 'DLLTestClass' として使われています。
またクラス内でライブラリのクラスや構造体を使用したとき、
"__export キーワードを使って class DLLTestClass にエクスポートしてください"

といった警告が出ます。
そして作成したDLLを使用するプログラムでも同様の警告がでます。
この警告を無くすにはどうしたらよいのでしょうか?
"ライブラリAがライブラリBを使用する"というライブラリを作成する場合、
どうしたらいいのでしょうか?
300デフォルトの名無しさん:04/03/16 23:29
画像のRGBを格納した配列を描画したいのですが
どうやったらいいのでしょうか?
いちおうSetPixelを使って↓のようにはできます。
でもこれだと1ピクセルずつ描画するので遅すぎです。
配列を一気に描画する方法はありませんか?
for(j=0;j<yh;j++)
for(i=0;i<xw;i++){
color=pDC->GetPixel(i,j);
r=GetRValue(color);
g=GetGValue(color);
b=GetBValue(color);
pDC->SetPixel(i,j,RGB(r,g,b));
}
}
まず遅くなってる原因を突きとめろ
>>300
BitBltはお嫌い?
CreateBitmapにも初期値は指定できるが・・・?
>>300
それだと、
pDC->(i,j, pDC->GetPixel(i,j));
でいいんじゃね?
304303:04/03/17 00:50
おっと。
pDC->SetPixel(i,j, pDC->GetPixel(i,j));
な。
305300:04/03/17 01:05
レスサンクスです。
あした試して見ます。
X×YのRGBの画像を格納した配列を
img[x*y*3]としたとき
BitBltを使って描画するとどうなるんでしょうか?
デバイスコンテキストの使い方がよくわからないです。。。
Windowsプログラム初心者なものですいません。
>>304
勘弁してくれ。
>>300
DIB使え
308デフォルトの名無しさん:04/03/17 12:44
リストコントロールのソートの方法ですが
SortItemsで指定したコールバック関数(CompareFunc)の
LPARAM lParam1, LPARAM lParam2って何を示しているのでしょうか。
ぐぐって見たところ比較するアイテムのインデックスとあちらこちらで書いて有りましたが
実際見てみるとインデックスなどではなくなんかのポインタのようです。
これからどのようにしてアイテムを識別するのでしょうか。
309デフォルトの名無しさん:04/03/17 13:14
自己解決しました。
これはSetDataでアイテムに関連付けされたデータのポインタですね。
よくサンプル見てみるとSetDataでインデックスの値を設定していました。
自分のソースではインデックスになっていた。
自分のソースは列ごとにソートするのでデータのポインタになっていた。
312299:04/03/17 15:47
299ですが、警告だけなので実際に使うには問題ないのですが、
やはり警告が出るからには間違ったやり方なんだと思うんですけど、
対処法ご存知の方いませんか?
313デフォルトの名無しさん:04/03/17 16:16
CControlBarの派生クラスを、CFrameWnd内にツールバーおよび左ペインとして
ドッキングさせているのですが、それぞれ
DockControlBar(&myLeftBar, AFX_IDW_DOCKBAR_LEFT);
DockControlBar(&myTopBar, AFX_IDW_DOCKBAR_TOP);
とした場合に
┏━━━┓
┣┳━━┫
┃┃  ┃
┗┻━━┛
こういう具合にドッキングさせることはできるのですが、
┏┳━━┓
┃┣━━┫
┃┃  ┃
┗┻━━┛
こういう具合に、左ペインがFrameWnd上端まで貫通した形でドッキング
させることができません。DockControlBarを呼ぶ順番を変えてみたりも
しましたがダメでした。

コントロールバー類は動的に追加されるので、スプリッタは選択しませんでした。
何か解決法ご存知の方いらっしゃったらよろしくお願いします。
>>313
漏れもそれで苦心したことがあったけど、CControlBarでは多分無理。
何かのドキュメントで読んだ覚えがあるのだけど、
優先順位は、上・下 > 左・右 らしい。
315313:04/03/17 17:08
>>314
うーん、そうですか・・・ステータスバーとかツールバーとしての利用が
メインだろうからそういう仕様になっているのかな、困った。
CFrameWnd::RecalcLayout()を上書きでできるかも、やるならCFrameWndのどこかだろ
317デフォルトの名無しさん:04/03/17 18:00
大変申し訳ないのですが、誰か
COleCurrency operator/(COleCurrency curX, COleCurrency curY);
を定義してくれ〜。

(curX.m_cur.int64 / 10000.0) / (curY.m_cur.int64 / 10000.0)
とかは無しで
318313:04/03/17 19:43
>>313ですが、自己解決しました。

MSDNの「テクニカル ノート 31: コントロール バー」に
「コントロール バーの配置アルゴリズム」という項があって、
バーたちはZオーダー順に親のクライアント領域を奪い取って行く、
というのは分かったんですが、実際にそれぞれのBringWindowToTopを
呼んでもZオーダーは変わってくれません。

MFCのソースを読んで行くと、どうやらコントロールバーは一旦
CDockBarを介して配置されているようなので、
HWND hwnd = m_MyLeftBar.GetParent()->GetSafeHwnd();
::BringWindowToTop(hwnd);
としたのちCFrameWnd::RecalcLayout()を呼んだところ無事
313の下のように配置することができました。

でも、この方法だとまだ
┏━━━━┓
┣┳━━━┫
┃┣━━━┫
┃┃     ┃
┗┻━━━┛
というのは実現できないんだよなあ・・・・。
319300:04/03/18 00:52
DIB使ったら簡単にできました。
1日でだいぶ上達した気がします。
また何かあったらよろしくお願いします。
320デフォルトの名無しさん:04/03/18 11:24
MFCでWin32APIコールする場合、ネームスペースは何を使いますか?
321デフォルトの名無しさん:04/03/18 11:27
C#
>>318
ユーザレベルの意見で悪いが、そんなドッキングは構造的に無理なんじゃないか?
VC++でやってみてもそんな配置に出来ねえし・・
323デフォルトの名無しさん:04/03/18 14:19
OnDraw中でテキストを表示する時の現在のフォントの文字高は
以下のように取得するのが普通ですか?
10年少々前のお話ですが、昔は、フォントの文字高+行間だったと
記憶しております。確かLogFontEXとかそんな名前の構造体を取得して
行間を取得していたような・・・

// TODOing: この場所にネイティブ データ用の描画コードを追加します。
long lMaxLine = pDoc->m_lMaxLine;
int iCharHight;
CFont* pFont;

if ( ( pFont = pDC->GetCurrentFont() ) == NULL )
iCharHight = 20;
else {
LOGFONT lf;
pFont->GetLogFont(&lf);
iCharHight = lf.lfHeight;
}
for (long i=0; i<lMaxLine; i++)
pDC->TextOut(0, i * iCharHight, *(pDoc->m_ppLine[i]));
スレ違いの匂いプンプンだけど、TEXTMETRICだべ。
325323:04/03/18 15:39
>>324
ありがとうございます。

LONG lCharHight;
TEXTMETRIC tm;

if ( pDC->GetTextMetrics(&tm) )
lCharHight = tm.tmHeight +tm.tmExternalLeading;
else
lCharHight = 20;

でしたね。
326デフォルトの名無しさん:04/03/18 22:47
vc6使ってます
リソースエディタのダイアログエディタでテキストボックスとボタンをつくり
ボタンを押したらOpenFileNameでファイルを選択。その選択されたファイル名を
テキストボックスの変数に代入、そして画面上でも反映させたいんですけど、どうすればいいのでしょうか?
>ボタンを押したらOpenFileNameでファイルを選択
なんだそりわ
>>326
人に聞かずとも、ちゃんと調べれば誰にでもわかる。
わからなかったら、プログラムやまれ。
>>327
ダイアログエディタでボタン作ってそれを押したときに
GetOpenFileName関数を呼び出してダイアログからファイル名を選択するようにしたいのですが
これじゃ変なんですか?

>>328
時間かければわかると思いますがちょっと今時間がないんです。勝手な理由ですが
ヒントだけでもお願いします
ヒントねぇ…MSDN見てみ。良い事あるかもしれない。
>>330
普通のやり方はどんな感じでやるんですか?

>>331
msdnでふんばってみます
333326:04/03/18 23:42
UpdateDataでなんなく更新されました
申し訳ないです
334デフォルトの名無しさん:04/03/19 09:30
UNIXサーバにおいてあるCOBOLソースを
Winよりワンクリでプレビューするアプリを作成しています。
CinternetSessionクラスを使用して
ファイルをWinに落とし込み 漢字コード 改行コードを変換する仕組みなのですが

逆に修正したファイルをそのままUNIX側にPut(書き込み)
できないものか思案しています。
変換については、win漢字コード、改行コードのロジックをその
まま逆変換でいけそうなのですが、
ファイルを置く処理が見つかりません。どなたか教えていただけないでしょうか?
335334:04/03/19 09:33
仕様 環境がもれていましたすいません

Win側の操作画面はVBで作成しており一覧が
ファイル一覧がFlexGridにより表示されまして
対象ファイルをクリックすると、VC(MFC)で
作成したDLL関数をコールします。

NT4.0 VS97(SP3)となります。
デバッグバージョンでコンパイルすると起動し、
リリースバージョンもVCのデバッガ上なら動作するが、
リリースバージョンを単独で立ち上げると、
DocやViewのコンストラクタまでは行くものの
OnNewDocumentまでたどり着けずアプリが起動しない症状には、
どんな原因がありそうですか?

#ifdef _DEBUG などはウィザードの作成したもの以外ありません。
リビルドや「プロジェクトの設定」の最適化の無効もだめでした。
エラーを出すのか、それともまったく音沙汰無しなのか。
>>336
カレントディレクトリに依存しているものがある
CBitmapButtonを使おうと思ってるのですが、
メンバ関数のLoadBitmapsにはリソース名かIDしか渡せません。

他のモジュールにあるビットマップリソースを使いたい場合は
CBitmapButtonは使うなってことでしょうか?
>>339
CButtonのオーナードローで我慢汁
>>339
派生して好きなようにロードすりゃいいやん。
342336:04/03/19 17:21
>>337,338
回答ありがとうございます。
エラーの類は皆無です。
タスクマーネジャにちらっと出てきてそのまま終了。
タスクバー等にはまったく反応がありません。

"Release"フォルダ内で実行しても変化なしです。
デバッガで走らせているときはちゃんと動作するので、
どうやって調べたものか困っています。
>>340, >>341
とりあえずオーナードローでなんとかなりますた。
派生だとCBitmapがprotectedで継承すると・・?と、勉強不足で
まだよくわかりません。こっちは将来の宿題にしておきます。
回答どうもでした。
俺はオナニーでドロッとなる フフフ
CEditで特定の行だけ色を変えるのはどうすればいいのでしょうか?
ダイアログにエディットボックスを貼り付けてるのですが、エディット
ボックス全体の色は変えられても、特定行だけ変える方法が分から
ず困っております。
尚、環境はVC6++でMFC42を使っています。
カラフルにするのはエディットボックスの仕事じゃない。
リッチエディットか自作。
>>342
メッセージボックスを使うのは駄目?

1動作ごとにメッセージボックスでとまるようにガシガシ入れ込めば、
どこまでちゃんと動いているか調べられるよ。
ついでに使ってる変数の値なんかも表示するようにしておけば、
面倒だけど、デバックモードみたいに動作をおっかけること可能。
メッセージボックスより OutputDebugString() 使えyo
349336:04/03/20 10:57
>>347,348
どうもです。一応ポインタ周りなんかは見ましたが、
不正な値ではなさそうです。
前述の通り、MainFrame、Doc、Viewの各コンストラクタ
止まりで謎の落ち方をするのでお手上げ状態。

1ヵ月ぐらいさかのぼって、正常に動いた時点から
やり直すしかなさそうです。
>>349
Appのほうは追っかけてる?
InitInstanceの中おっかけてみそ
>>347
TRACEマクロ知らんのか
printfと同じ使い方で経過表示できるぞ
352デフォルトの名無しさん:04/03/20 22:51
>>351
リリース版でTRACEが使えるとは知らなんだ。
どうやって使うの?
>>348
336は、
>デバッグバージョンでコンパイルすると起動し、
>リリースバージョンもVCのデバッガ上なら動作するが、
>リリースバージョンを単独で立ち上げると、
って言ってるのだが、
OutDebugStringの結果は何で受け取ればいいの?

>>351
俺も知りたい。
OutDebugStringを拾うデバッガならベクターに何個かあるよ
355デフォルトの名無しさん:04/03/20 23:53
ゲームをつくってるんだけど質問です
メッセージループのなかでDrawFrame関数を呼び出して
いるんだけど
void DrawFrame()
{
static BOOL Flag = FALSE;
if( !Flag )
{
OpeningInit();
Flag = TRUE;
}else OpeningMain();
}

OpeningInitで初期化をしてるんだけど
もっといい方法ないですか?

単なる変数の初期化なども、このやり方だと不便で・・・
クラスを使ってもいいので簡単な方法教えてください

一度しか呼び出したくない関数や、ある時に一度だけ変数に代入したい
時など困ってます
>>355
そうやるのがいちばん簡単だと思うが。

あと、Flag なんて言う何をしてるかわからん変数名はやめた方がいい。
(これぐらい短いと問題は少ないが。)

void DrawFrame(){
 static BOOL FirstTime = TRUE;
 if( FirstTime ){
  OpeningInit();
  FirstTime = FALSE;
 } else {
  OpeningMain();
 }
}
357355:04/03/21 00:27
ありがとう
これでよかったんですね

359355:04/03/21 00:33
↑失敗

後、クラスでコンストラクタをつかっての初期化が便利と聞いたけど
関数を呼び出すたびにコンストラクタも呼び出されるんですね
初めの1回だけなら便利なのに・・・
ちょいと相談。
ファイルをロックしたいんでHANDLEが欲しいのだけど、
問題のファイルは既存のライブラリ内でfopen()されている。
#unixならfileno()すればすむんだけど
ストリームポインタからHANDLEを取得する手段ってなんかあったっけ?
(HANDLE)_get_osfhandle( _fileno(fp) );
>>359
おまいは参照辺りをしっかり勉強した方がいいぞ
363デフォルトの名無しさん:04/03/21 11:35
>>336
関係ないと思うが、VCから起動する場合と
エクスプローラからダブルクリックで起動する場合、
コマンドライン引数が微妙に違う。(漏れの環境(VC6.0SP5XP)では)
何が違うかと言うとGetCommandLineで返ってくる文字列が
エクスプローラの場合最後にスペースが付加され終わっている。
その違いで出てたバグを発見するのにずいぶん苦労した記憶アリ。
基本的なことだけど
一度中間ファイルの類を全部消してからリビルドしてるかな?
>>363
そのケースだったら、プロジェクトの設定でコマンドラインパラメータに空白を入れておけば再現できそうだね。
>>361
Thanx!
手元に開発環境ないんで検索してみた。
Pythonのマニュアルしか見当たらなくて不安だけど、明日出社したら早速試してみるよ。
367デフォルトの名無しさん:04/03/22 15:03
タスクトレイにある 特定のアイコンを非表示にする方法はありますか?
FindWindowでハンドルとって ShowWindowでHide にしても駄目でした。
お願い致します。
ActiveXが何故かWindowsのシャットダウンのWM_ENDSESSIONを
拾ってくれないんですけど仕様ですか?
369デフォルトの名無しさん:04/03/23 00:33
MDIでCDocument一つからCView複数開いた時の各子ウィンドウの
キャプションのコロン後の数字ってどういう規則で付いてるの?
教えて下さいませm(_O_)m
370345:04/03/23 01:11
>>346
亀ですが、おおせの通りリッチエディットに変更して対応しました。
どうもです。
371デフォルトの名無しさん:04/03/23 23:18
CStringの寿命に関して混乱してきちゃったから、ちょっと教えてください
関数の戻り値にCStringを指定したときの、CStringの動作がよくわからない
いったん、コピーされるのかな・・?
1.
CString test1(){
CString aaa("test");
return aaa;
}

2.
CString test2(){
char aaa[] = "test";
return aaa;
}

1、2とも問題ないですか?最近までCで、char使ってやってたんで、1でも不安なんだけど、
引き継いだソースに2みたいなのがあって、これはどうなんだろうと・・
1はOK、2はNG
御免、勘違いした。両方ともOK。
>>371
寿命も何も変数なんだからそこはCの基礎とかわらんだろ
375371:04/03/24 00:22
あ、OKですか。ありがとです
いや確かchar *で返した場合
char *test3(){
char aaa[] = "test";
return aaa;
}
関数抜けたら寿命が尽きるので、その配列使っちゃいけないってきいたきがするから不安だったんです。ドモドモ
各々>>375にいいたい事はあるだろうがMFCスレなので放置しなさい。
>>375
static ....
378336:04/03/24 00:42
まだレスがついているとは思いませんでした。
どうもありがとうございます。

>>363
それは知りませんでした。その辺、調べてみます。

>>364
はい。もうDebugもReleaseもフォルダごとごっそりと。
あと、ソースファイルの階層には、
消さなきゃいけないものなんてないはずですよねえ……?
379デフォルトの名無しさん:04/03/24 00:50
>>378
.aps.clw.ncb.opt.plg辺りも一応消しておくと良いかも。
.plgは消す必要なし。
尤も、残す必要もさらさらないけどな。
>>379
.clwはマズくねーか?
>>381
なきゃ勝手に生成するっしょ。
消すまでもないと思うがな。
383デフォルトの名無しさん:04/03/24 09:37
.clwがおかしくなる事は良く有ります。
ただしそれがコンパイル時にエラーの原因になるかどうかは分かりませんが。
IDを変更しないままコントロールを削除して同じIDをもつコントロール
を付け加えたりとか、関数なんかもそうだけど、そういうことが何回も
繰り返していると時々、ソースは正しいとしか見えなくてもコンパイル
するとエラーになったり。そういう時は.clwを削除して作り直すと
何事も無かったかのようにコンパイルが通る。
385336:04/03/24 21:41
何人もの方にアドバイスをいただけてありがたいです。
残念ながら.clw等の削除もコマンドラインのほうも
解決には至りませんでした。
おそらくポインタ or 配列がらみだと思うんですが、
おとなしくロールバックします。ともかく感謝です。
386デフォルトの名無しさん:04/03/30 11:34
Visual Studio 6.0 Service Pack 6 正式リリース
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
387デフォルトの名無しさん:04/03/31 09:01
VBでいう、DoEventsみたいのは
どうやれば良いですか?
DoEventsがよくわかりません。
どんなものですか?
389387:04/03/31 09:42
>>388
Windowsに一旦処理を渡す時に使いました
無限ループを組んで、その中にDoEventsを入れとくと、
無限ループ中でもWindowsがメッセージを発行して、
イベントが発生(何か変・・・)してくれるものでした
>>389
ふつうは無限ループの中で直接APIを呼ぶと思うのですが。
VBにはそういうものがあるのですね。
PeekMessage、DispatchMessageあたりを調べてみてはどうでしょう?
391387:04/03/31 10:08
>>390
早速の回答ありがとうございます!
こんな感じで出来ました!

MSG msg;
while(1){
  if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
  if (msg.message = WM_QUIT)break;
  ::TranslateMessage(&msg);
  ::DispatchMessage(&msg);
 }
}
SendMessage(WM_QUIT,0,0);
392387:04/03/31 10:10
と思ったら、
msg.message == WM_QUIT
に直したら、終了しなくなりました・・・
breakしたあとメッセージはどうなるのでしょう?
と、考えてみては?
394初心者:04/03/31 20:05
すいません。REGETのようなGUI作りたいんですけど
MFCを勉強するにはどのような書籍を読んだらよいのでしょう?
サルでもわかるMFC
396デフォルトの名無しさん:04/03/31 21:17
>>395
わかったサルを1例でも挙げてみな
397デフォルトの名無しさん:04/03/31 21:53
ノシ
398デフォルトの名無しさん:04/03/31 21:54
SDKヲ理解できる猫もいないだろうな。
>>394
初心者といっても様々。
このスレに記事をつけたのだから「VC++は持ってるんだろうな」
ぐらいしか分からない。
君のレベルが分からないと薦めようもない。
400デフォルトの名無しさん:04/04/01 00:22
ダイアログベースのMFCアプリケーションで、
ダイアログが閉じたあとに、::AfxMessageBox()や::MessageBox()を呼んでも
メッセージボックスが画面に表示されないのはなぜでしょうか?

CFooApp::InitInstance()で、dlg.DoModal()から帰って来た後で
呼び出してます。
401初心者:04/04/01 00:51
>>399
VC++4.0 時代にMFCを使いこなそうとDocumentとViewクラスを一度に理解しようとして挫折
再度、VC++6.0でMFCプログラミングを始めてここ1日〜2日、Viewクラスへ書いて
テキストボックスやらボタンやらチマチマ書き始めて動いた程度。
今、参考にしているのは「新Visual C++ 6.0入門シニア編」地味?なので少し
色々な事ができないか...と模索中
MFCの定番はKruglinski。
亡くなってから、もうずいぶん経った。
CScrollBarの下側を0として上に行くほど数値が上がるような扱いに
したいのですが良い方法はありますか?
スクロールMAXから現在位置を引く
取り合えずなんにも分からん。何でもいいので教えてくれ。
>>405
CString str;
str = "Hello World!"
MessageBox(str);
>>400
多分、m_pMainWndが閉じられたら後は終了するだけ、
新しいウィンドウの作成は許可しないとか言うように
MFCのフレームワークが設計されているんじゃないかな?
実装方法はフックでも使ってるんでしょう。

試しにm_pMainWnd = &dlg;をコメントアウトしてみると使えるようになる。
ただしm_pMainWndを指定していない場合、他の場所で不具合が出るだろうと思うが。
408age:04/04/02 11:22

すみません。昨日から悩んでいます。VC6です。
Inside VisualC++ ver.5のサンプルのようにActiveXのオートメーションを作りました。
(659ページ辺りからのexcelのボタンを押すと反応するやつ)
まったく同じではありませんがVBAでは動きますしデバッグ用のコンテナでも動きます。
ところがVBS(+ASP)だと動いてくれません。

具体的にはCreateObjectはいくけどmethodを呼ぶとエラーになります。

ググってみたのですがサンプルがありません。
とりあえずVBSがうごくだけでいいのでサンプルの場所を教えてください。
409400:04/04/02 22:18
>>407
サンキュ。
Hookの中までさんざんトレースしてみたけどわけがわかなくて。
結局、OnCancelの中で処理をすませるようにごまかした。
410te:04/04/02 23:44
すみません。
SDIやMDIのフレームにツールバーやダイアログバーをくっつけたとき、
その縦のサイズが全部でどれだけなのかを知る方法ないでしょうか。
viewの(0,0)をclientToScreenしても、ダイアログバーなどをフレームに
くっつけてると、スクリーンにしたとき、yがそのぶんだけずれている
ようなのです・・・。ヘルプ!
411te:04/04/02 23:50
連続すみません。
最大化しているかどうかなども踏まえてウインドウの位置を
レジストリに記憶させておきたいのですが、
GetWindowPlacementの値をbinaryで書き込んでおき、
起動時にSetする、ではうまくいきませんでした。
いろいろやってみたのですが、復元時に最大化状態にセット
することができませんでした。
やってる場所がわるいのでしょうか・・。
>>411
ちゃんと書き込めているか、書いた情報がきちんと取り出せているか確認。
>>409
OnDestroy()の方がスマートかもしれん。
414デフォルトの名無しさん:04/04/04 03:29
すいません。どなたか教えてください。
エクスプローラみたく分割ウインドウをつくっていて
左側のウインドウの右クリックからポップアップメニューを
表示をさせようと思っています。
そこで、CLeftViewにContextMenuを追加したのですが
右クリックではイベントはこなくて、右ダブルクリックで
イベントがくるのですが、なぜでしょうか?

なにか足りないのでしょうか?
>>414
どういうコントロールなのか知らないが、複数選択の許可に関する問題で
「ダウン−ドラッグ−アップ」じゃないとイベントが起きない場合がある。

アップのところに置いてみたらどうか?
416414:04/04/04 15:02
返信ありがとうございます。
そして説明不足すいません。さらにMFC初心者でごめんなさい。

>「ダウン−ドラッグ−アップ」じゃないとイベントが起きない場合がある。
>アップのところに置いてみたらどうか?

ごめんなさい。「ダウン−ドラッグ−アップ」の意味がわかりません。
アップのところにcontextmenuをおけばいいってことでしょうか?
(アップの意味もわかってないのですが)

いや、ほんと、初心者でごめんなさい。

ちなみに
>どういうコントロールなのか知らないが
っていう質問にはどういう風に回答すればいいのでしょうか?
ツリーコントロール?SDI?

ほんとすいません。
長いから要点だけ

【環境】
・VC++6.0

【症状,状態】
・ClassWizard→メンバ変数で作成したクラスに対してインテリセンス機能が働かない(CEditクラス等)
・自作のクラスメンバに対してはインテリセンス機能が働く
・ビルドする際には問題ない.

【考えられる原因(推測)】
自宅と職場で作業ディレクトリの位置が違う

これなんとかならないでつか?ビルドには問題ないんですが
あれがあるのとないとで便利さが全然違います・・・(つД`)
作業ディレクトリを同じにすればいいんだろうけど
こいつの為にわざわざHDD追加したり,パーティション加えたりするの面倒っす.
.clwとか.ncbとか.apsとか.optとかその辺消してプロジェクト立ち上げなおして
クラスウィザードでなんか作り直すと上手くいくかもしれない
419417:04/04/08 01:15
>>418
オマイ天才!機能が復活すますた.
ありがとうー!やっぱお前は出来る子だと前々から思ってたよ
>>419
悪いがそんなことは、うちのインコでも知ってるよ
>>420
インコは知らないと思う
FAQ中のFAQであることは間違いないな
>>421
笑うとこなんだから突っ込んじゃダメ
そんなのうちの清原でも知ってるよ
清原って誰やねん!
おれ、おれ
うちの桑田はポカンとしてたよ。
うちの北野は仕様書作るのに1年かかったよ。
うちの松坂は未だにprintf止まりだよ。
少しワラタ
431デフォルトの名無しさん:04/04/12 11:25
MDIの任意の子ウィンドウの「閉じる」を禁止にして,
右上の×ボタンも灰色にすることは可能でしょうか?

SDIなら可能なようですが・・・
子ウィンドウ毎にフレームとビューを用意してやれば出来ると思うよ。
433デフォルトの名無しさん:04/04/14 14:19
BMP,JPEG,GIF,TIFF,PNGなどの色々な形式の画像ファイルを読込んで、
HDCで描画したいのですが、複数の画像ファイル形式を読込むことが出来る
便利な関数はないでしょうか?(TIFF,PNGは無理そうな気がします。)
HDCって時点で、MFCとは激しく無関係な悪寒。
>>433
CImage
system("susie ***.png");
>>433
ImageMagickとか?

tiffだけならlibtiff、pngだけならlibpng+zlibって手もあるが。
>>433
CImage
GDI+
OleLoadPicture()
CImageってフリーソフトですか?
440デフォルトの名無しさん:04/04/15 10:52
MFCを使って、Excelのシートのようなもの(コピー&ペーストができたりなど)を
ウインドウに組み込むにはどうすればよいのでしょうか?
>>440
/support.microsoft.com/default.aspx?scid=kb;ja;179706
442440:04/04/15 12:21
ありがとうございます。
そこを読んでやってみます。
>>439
とりあえず最新のVCを買いなさい。
MFCの入門書なら
潟Aンク
最新 これからはじめるVisual C++
はどう?
IDEの使い方がわからないレベルから始めてるよ。
>>443
ってことは有償ですか。高いなー。
>>445
安っぽい理由で諦められるんなら、そもそもWindowsプログラムなんでするなと。
By ゲイツ
447デフォルトの名無しさん:04/04/16 18:27
でも、VCって高いよな。

ACでシェアってよかったけ?
ACって何?
449デフォルトの名無しさん:04/04/16 18:53
アカデミックのことだろ?
誰が諦めたの?
451デフォルトの名無しさん:04/04/16 21:47
>>447
おまえらの話聞いてると金銭感覚があるようで実は無茶苦茶だな
趣味であろうと仕事であろうと共通してるのは動機が希薄ってことだ
その観点じゃ1円でも高すぎなのを
さも投資予算が決まっていそうな口ぶりで難癖つけるだけのハリボテ野郎が
gccだのborlandだののDLにかかる回線使用料が親の金だったらお笑い草だな
むしろ回線使用料に比べて高いって意味じゃ
馬鹿みたいな話かもしれないが、知識のある奴はそれなりの出費をしてるからね。
これをMSへのお布施と思うか、自分への投資と思うかはそれぞれだが。

それを、高価などという理由で「教えてクン」する奴は、やっぱ腹立つもんだと思うよ。
何一人で怒ってるんだ。
教えてくんてどのレスよ?
VCのパッケージは安いものでも一万円オーバーするんだから
特定用途向けツールへの投資としてはちょっと大きいってのはあるだろう

回線は汎用インフラだからな

まあでもその話と「教えてクン」ってのがどうつながるのか全くわからんが・・・
(MFC 限定かというとちがうかもしれませんが)
#import についての質問です。
vbscript.dll\3 を指定したい場合はどうしたらよいでしょうか。

#import "C:\WINDOWS\system32\vbscript.dll\3" とすると、
コンパイル時にエラーになる。

#import "C:\WINDOWS\system32\vbscript.dll" とすると、
コンパイルできるが、これは目的のものではない。
ごめんいみがわからない。
なんでエラー内容書かないんだろう
\をディレクトリと見ているに
100モグモグ
というか、456は、「vbscript.dllというディレクトリ下の3」以外の
何を期待しているのか。
461デフォルトの名無しさん:04/04/17 02:12
>>447
つーか、常識で考えたら分かるだろ。
なんでVCを他人とシェアして許されると思うのかが不思議だ。
そっちのシェアじゃぁないと思う
ACでシェアウェア作るって言いたいのかな?
まぁ、やめとけ、といいたい。
つーか、学校の端末を使って作ったら問題ありだろうしね。
ダイアログベースのプログラムでDIBビットマップを表示したいのですが
どのようにすればよいのでしょうか?
よろしくお願いいたします.
>>464
まず、googleへ行って"DIBの表示"でぐぐる。
「googleに行ってぐぐる」とはあまり言わないね
頭痛が痛い
MFCのピクチャーを貼り付けて,そこに好きな画像を書きたいのですが
サンプル等在りませんでしょうか?
>>468
画像のサンプル?
470468:04/04/17 14:36
>>469
お絵かきソフトを造りたいです
>>470
>>468の書きぶりから全く外れてるんだが・・・
やりたいことと手段の方向性が見えてないような気がする
そのレベルだったら初心者向けのソースコード付きの解説本でも一冊最初にやったら?
ピクチャボックスに任意のビットマップを張りたいだけ?
その上にキャプション書いたりしたいんでしょ
>>470の書き方からするとドローかペイントのグラフィック・ソフトのように思えるが
>>474
俺もそう思う。しかもピクチャボックスがそれをサポートするコントロールだと勘違いしてるような気も・・・
まあ最終的にはグラフィックソフトなんだろうけどとりあえずはピクチャボックスを
どうしたいんだろ?
だから結局>>471ってことだな
strstr関数で、英字の大小を区別しないみたいなやつってありますか?

例:strstr("abcdefg.WaV", ".wav") != NULL
が true となるような関数が欲しい
マニュアルくらい読めばぁ?
CStringクラスにありました。。
481sh:04/04/19 10:50
SDIでペインを作成しペインから他のペインにあるコントロ−ルにアクセスする
方法はどうするのでしょう?
AfxGetMainWnd())->m_wndSplitSub.GetPane() ですか?
482sh:04/04/19 11:35
自己レス。
AppクラスにCWnd のメンバを作ってペインのOnInitUpdate() に
thisポインタを入れて、
他のペインからそのメンバのCWndを参照すればアクセスできました。
みなさんはどうやってるのでしょうか。
俺だったら this->GetParentFrame() で親フレームを拾って、
そこに定義しておいた子ペインにアクセスするメソッドを呼び出す。

まあ、操る人が一番迷わない方法でいいんじゃないの。
既に解決してるみたいだし。
484sh:04/04/19 12:33
どうも。試してみます。
いろいろな方法があるみたいで、それはそれでおもしろいですね。
IEのお気に入りのように、プログラムからメニュー項目を
追加したいのですが。どうやればよろしいんでしょうか?
>>485
CMenu
AppendMenu()
InsertMenu()
487デフォルトの名無しさん:04/04/21 00:37
MFC関連でいい書籍って無い?
林晴彦みたいな、ぬるいのは嫌です。
>>487
いい書籍っていってもあなたの基準が明確でないと返答に詰まる。
ヒントはぬるいのはだめってことだけらしいけど、もう少しどんな感じの
ものが欲しいのか明らかにしたほうがレスがつきやすいと思う。
489487:04/04/21 01:23
>>488
新しい仕事でMFCを使用しているんです。
主に、ダイアログベースで細かいデータ表示などをやるプログラムを量産しています。
ダイアログベースと言うのは、間違っていると思うんですが、
そこの会社が昔からこのやり方なので方法を変えたくないらしいです。

CListCtrlを継承させてセル単位で背景色を設定や入力できる物や
コントロール2つ以上を同期で選択とか、ダイアログなのにスプリットバーや
その他いろいろ
基本的に、クラスをそのまま使うことがないんです。


あと、私がWindowsプログラミングにあんまりなれてなくて
細かいメッセージの流れとかがよくわかってない時もあったり
単純なウインドウならわかるけど、ListViewとかのコントロールのメッセージや
MFC独自の物とかのメッセージが、いまいち。
時間をかけて調べればわかることなんですが、
そういうことを書いてある本が欲しかったり

C++のテンプレートなどは理解できています。
ジェネリックプログラミングも多少わかります。Boostもいろいろ使ったり出来ます。
WTLに興味があるんですが、会社で使えるのかわからないので
現在深くやる予定はありませんが、多少知っておきたい。


まあ、結構深く突っ込んだり、コアなTips系とか
いろいろ書いてある本が欲しいです。

現在飼おうと思ってる本は、
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3143-3.html
です。
この本っていい?
本ばかり追いかけてると、財布がつらいので、
WEB上で検索かけてサンプルコードを拾ったりしてる。
そのほうがすぐ使えるし。
CodeGuru とか CodeProject 見た方が良いと思うよ。
492487:04/04/21 02:16
webページもいいんだが、
仕事場が、すぐにネットにつなげれる環境じゃないんです。

あと、通勤時間が結構あるし
本も欲しいかなと。

なんかないのー

買っちゃうおー
>>492
>仕事場が、すぐにネットにつなげれる環境じゃないんです。

先ず、その環境を何とかせにゃならんと思う。
まさか、会社でダイアルアップでもないでしょ?
確かにネット環境は必要だね。
ちゃんとした情報を得るには書籍やMSDNが一番だけど、ヒントやサンプルはまずGoogleって感じ。
クルグリンスキーと言ってみるデバッグ
496デフォルトの名無しさん:04/04/21 05:16
APIの関数名で検索しても、関連サンプルは出は出るわ。
使わない手は無い。というか、使えないのは明らかに損!
497433:04/04/21 11:10
>>434-438
ありがとん。返事が遅くなってスマソ。

GDI+で問題解決しました。
ttp://www.kumei.ne.jp/c_lang/sdk4/sdk_336.htm
498デフォルトの名無しさん:04/04/21 19:17
コンテナ上にExcelを貼り付けて、
そのExcelから既存のExcelファイルを開くにはどうすれば良いのでしょうか?
また、その時マクロを実行するにはどうすれば良いのでしょうか?
CListCtrlで”選択マーク”を外したいのですが、
 SetSelectionMark(-1)
ってのありでしょうか?
>>499
ん?それで何が問題なんだ?
501sh:04/04/23 16:36
ファイルの権限を変えるのどうするのでしょうか。
アドミンだけ書込みを許可するなどです。
502デフォルトの名無しさん:04/04/23 18:38
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
レジストリのこの位置に登録すると自動起動しますが、
MFC6.0 で登録するにはどうやるのでしょうか。
H_KEY_CURENT_USER 以外には書き込めないとか..?
そりはMFCとは関係ない。
>>502
MFCでなぜ?

RegOpenKeyEx
RegQueryValueEx
RegSetValueEx
RegCloseKey
>>501
AtlSetDacl()とか調べて頑張れ
pMenu->CMenu::AppendMenu(TRUE, IDM_DINAMIC_MENU, NULL);
とやると
error C2668: 'AppendMenuA' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
とエラーが出てしまいます。対処法を教えてください
508506:04/04/24 13:11
オーバーロードの意味を聞いてるのではなく、MFCの使い方が知りたいのです。
ありえないけどCMenuを書き換えるか、
CMenuを継承したクラスに書き換えてメンバーも修正?
それ以前になんでAppendMenu関数が実装されてないの?
AppendMenu関数作るとしたらどんな風に書けば良いのですか?
ということです。
SDKなら何とかなりそうですが、MFCは変更がしづらくて分かりいにくいです。
>>506
関数の仕様から調べなおしたほうがいいでそ。
>>506
馬鹿だねぇ。オーバーロードをちゃんと理解してれば
コンパイラがオーバーロードを解決できない場合がどんな場合か
わかるだろ。
>>506
書き換えとか言う前に、MSDN見れ。
512デフォルトの名無しさん:04/04/24 22:43
今日からMFCの勉強を始めました。(WIN32SDKで今まで全てを行っていました)
今までは全部手打ちでVSの機能はビルドとデバッグぐらいにしか使っていなかったのですが
MFCやるのだし、と思って色々やってみました。
そこで、ちょっと嫌だなとおもったのが(MFCの話じゃないですが)
メンバ変数の追加、やメンバ関数の追加でコードをジェネレートして追加すると
ヘッダファイルがえれー汚くなります。
これってもう自分で書き直す(コピペで)以外に解決策ってないんでしょうか。
>>512
自分で治せる余地が提供されてるんだから、それでいいと思うんだが。
>>512
自分で書き直すのが最善策だと思います。
つーか、最初から「メンバ変数の追加」なんて使わなければいいのでは?
516デフォルトの名無しさん:04/04/25 08:50
>>512
「メンバ変数の追加」は俺も使わない
インデントもへったくれもない行儀の悪さに加え
極めつけはテンプレートインスタンス型をサポートしていない点

「メンバ関数の追加」にも不満はあるものの
ヘッダとソースの連動修正をやってくれるので
まあ使ってやることもあるが
517デフォルトの名無しさん:04/04/25 14:16
.net使っています。
for文で、
for(int i = 0; i < x; i++)
みたいに書くと、標準C++では、変数iはfor文ブロック内が
スコープなはずですが、.netだとそうじゃないんですよね。
これってコンパイラで切り替えることってできるのでしょうか?
>>517
できます。以上。
519デフォルトの名無しさん:04/04/25 16:19
>>518
どうやるの?以上
調べる。以上。
>>517
そうじゃないのはどういうことかの説明が不足している。いじょ。
>>521
そんなことはない。以上。
そうじゃないの具体的な説明が無いので反応しようが無い。いじょ。
なにこのスレ?(AA略
具体的も何も、そこで求められている物が一つしかないのは明らかだ。胃腸。
状況がつかめなければアドバイスの仕様が無い。いじょ。
人にものを聞くのに、高飛車な態度になってる香具師に、
まともに答える義理は微塵も無い。以上。
528デフォルトの名無しさん:04/04/25 18:24
>>527
必ずしも高飛車でなくたって低姿勢な香具師にも答える義務がない点に違いはないんだが
529525:04/04/25 18:30
しかも高飛車な漏れ(525)は、質問者では無いし。非常。
知らない間に、このスレを荒らしている俺たちは逝ってよし。いじょ。
妹は処女
アタシは痴女
533デフォルトの名無しさん:04/04/25 20:04
C言語初心者ですが
「これはいい!」って参考書ありませんか?
本屋さんにはたくさんの参考書が置いてあり
どれがいいのかとても選ぶことはできません。
どなたかおすすめな本を教えてください。
Cマガジンを年間購読する。
日経ソフトウェアを年間購読する。
536デフォルトの名無しさん:04/04/25 20:55
>>520
どうやって調べりゃいいの?いじょ
>>536
自分で調べ方を調べろ。以上。
このスレ異常
>>533
参考書っていっても、一冊や二冊で済むもんじゃないからな。
色々買って金を無駄遣いして、数冊に一冊くらいの割合で自分にとっての良本見つけるって感じだし。
何なら、「Cを覚えるまでにいくら消費しましたか?」って聞いてみ。
きっと、すごい額出てくる思うよ。
>>539
悪い、漏れ入門書の類が嫌いなもんで、K&Rとリファレンス本以外は
殆ど金使ってないんだよね。
5414ce ◆WVdtysP8L2 :04/04/26 10:28
アケ板から締め出された。
>>541
よくわかりませんが誘導しておきますね

シューティングゲーム製作技術総合 2機目
http://pc5.2ch.net/test/read.cgi/gamedev/1073736474/
543デフォルトの名無しさん:04/04/26 13:06
イジョウッシュ
おかげさまで、レジストリの登録できました。
ありがとう。関数名が分かったので検索しまくったら そのままの
ソースがありました。

545デフォルトの名無しさん:04/04/28 22:24
エクスプローラの、上のアドレスバーの下くらいにある(詳細表示時に)
名前 サイズ 種類 更新日時......
みたいな、押すとソートをかけてくれたり、それぞれの表示領域をかえれたりするのは
いったいどのように実現するのでしょうか?
なにか、それ専用のコントロールがあるのでしょうか・・・
>>546
CListCtrl

但し、ソートは自前で用意する必要がある。
548デフォルトの名無しさん:04/04/29 13:23
VC6++から、VC.NETへ移行するためのよいページはありますか?
MFCで書いたやつが、結構、コンパイルとおらないんですけど...
>>548
無理^^;;;;;;;;;;;;;
VC6++
551デフォルトの名無しさん:04/04/29 15:36
>>549
漏れも、VC6しか知らないんだけど、何が変わったの?
どうせ、MFCはいつものウィザードなんでしょ?
553デフォルトの名無しさん:04/04/29 22:52
CreateWindowEXでコントロールを作ろうと思うのですが、
CWndのどのメッセージハンドラで呼び出せばよいのでしょうか?
コンストラクタで呼び出すとウインドウができていないのかエラーがでてしまいます。
554デフォルトの名無しさん:04/04/29 23:18
SDIでこう、Viewがスクロールできるようにするにはどうすればよいでしょうか?
スクロールビューっていうそのものずばりなものがあるじゃないか、なあ。
556デフォルトの名無しさん:04/04/29 23:28
でないと、出来ませんか?
557デフォルトの名無しさん:04/04/29 23:37
あのCViewで作ってしまい、CScrollViewに基本クラスを書き換えて
OnInitialUpdateを編集したのですが、
スクロールできないんです。
558デフォルトの名無しさん:04/04/29 23:38
>>556
WM_SCROLL捕まえて自分でスクロール実装する
>>556
お手軽にダイアログにコントロールをぺたぺた貼って
みたいなのなら CFormView というのがあることはある。
560デフォルトの名無しさん:04/04/29 23:51
>>557
スクロールバーを引っ張っても
元に戻るんですが。

              /:::::::::::::::::::/:::::::::::::::::::::::::::/:::::::/:/::::::::::::ミヽ
                /::::::::::::::::/:::::::::::::::::::::::::::::/::::::::::/::::/:::::::::/:/:ハr'ヽ
            /::::::::::::::::/:::::::::::::::::::::::::::::::/::::::::::/::::/::::::/:/:::レ::イ::T:l
              /::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;ィ:::|:::::ハ::::::|::|::/|::::::|:::::::|
           /::::::::::::::::::::::::::::::::::::::::__::::::::::::::://|::ト、::L|::::|!:||:!/::::/::::|::!
           |:::::::::::::::::::::::::::::::::::::r'rヘヽ::::彡   |:! v!|--,.、`゙//:::::/リ
           |:::::::::::::/::::::::::/:::::::{ (⌒ |:r'´       ` 、l:/ ///l:/〃
          /:::::::::::/::::::::::/::::::::;ハヽ. |:!             |'´  '′
          /::::::::::/:::::::::::/:::::::/:::::::L°            ゙、
         /::::::::/:::::::/:::/::::::/::::::::::| l            _ ヽ
           /::::::::/:::::::/:::/::::::/::::::::::::|  l         ____r'´   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         /:::::/:::::::/::::::::::::/::::::::::::::|          `7′  <  よくわからないモノを
     /::::::/::::::::::/:::::::::::::/ :::::::::::/           /      |  無理して使うからよ
    /:::::/::::/::::/::::::::::::::/ :::::::::::/二`ヽ、  `iヽ 、____/       \_________
   /:::::::::/:::/::::::::/::::::::::::彡.:::::::::::/三ミヽ、 ``=ヽ
   |:::::::::|::/::::::::::::/:::::::/:::/彡:::::∧`ヽ、 \三ミr'ヽ、
   |:::::::::|/:::::::::::::|!::::::::::::::/イ/::::/::::::ヽ  \ \/ ̄`ヽ\
   |:::::::/::::::/::/::リ::::::::::::/:::/:::::/::::::::ノ /\ \\   \\
>>560
少しはヘルプ嫁
>>560は自分にレスしてないか。
仮に>>558へのレスなら自分で実装するということが理解できないのか。
それともどこか別の星と交信してるのか。
564553:04/04/30 00:02
ないんですかね?
OnCreateでやれコノヤロウ
春休みより酷いな。こりゃ。
567553:04/04/30 00:42
もちろんOnCreateはもう試してるんですがOnCreateに入ってこないんですよ。
やってることがActiveXコントロールのラップクラスがCWndクラスから派生してるので、
CWndの基本クラスとしたクラスを作って、そのCWndをそのラップクラスにあるクラスに
置き換えるということをやってるので普通じゃないんですが、自分でいい方法探すしかないか。
分かる人がいればアドバイスよろしくお願いします。
なんかえらく必死だけど……宿題っすか?
569553:04/04/30 00:52
仕事ですな
570デフォルトの名無しさん:04/04/30 00:58
>>553
スクロールの位置はとれているんですか?
GetScrollPositionで試してよ
それか値をScrollToPositionに入れるのではだめかなぁ
>570
スクロール関連は553じゃ無いと思う
573デフォルトの名無しさん:04/05/02 00:40
CFormViewをいっぱい切り替えたい。
お手軽にダイアログにコントロールをぺたぺた貼った
画面がいっぱいほしい。
コードのアリカを教えてください。
(現役:悪セス房)
いちいちスクロール書いてられるか。
 ついでに教えてくれ、べたべた張るやつの制限は
全部で255までか、それとも
ボタン255とエデット255とラジオ255でもOK牧場
>>573
( ゚д゚) ・・・・・
全部で255まで
CodeProjectに言って二度と戻ってくるな
577デフォルトの名無しさん:04/05/02 01:12
やぱり、255(16列×16行)か ありがと 
 コードのアリカを教えてください。
高度ぐるやM$はCVIEW(SDI,MDI、分割)ばかり。


578デフォルトの名無しさん:04/05/02 01:13
576 お前に相談してない。from573
GWだねぇ。
573は(゚⊇゚)ガイジソー だろ!
>>573
CreateWindowEX()
htmlから読み込んだら文字コードがUTF-8で文字化けしてしまうんですが、
文字コードを変換して表示するには、どのようにすればいいんでしょうか?
>>582
そういう質問ができる時点で、答えはもう出てるでしょうに。

UTF8からS-JISに変換するプログラムを作ればいい。アルゴリズムはGoogleで検索すれ。
584582:04/05/03 00:42
>>582
時間がかかるんで・・・
ライブラリなどで簡単に変換する方法はないですかね?
>>584
http://tricklib.com/cxx/ex/babel/
これでいいかな。
MultiByteToWideCharで CP_UTF8して、得られたUTF-16文字列に
対して、WideCharToMultiByteでCP_932でもしとけばええやん。
587582:04/05/03 17:09
>>586
そういう答えがほしかったんだよ。サンクス
アップロードボタンを押すたびに、<wininet.h>を
使用してFTPでファイルアップロードをする
プログラムを作っているのですが、
アップロードボタン3回までは正常に
動作するのですが、4回目から接続に
失敗してしまいます。
このような状況をご存知の方おられましたら、
解決法を教えてもらえないでしょうか?
589588:04/05/06 14:13
ソースはこんな感じです。

hInternet = InternetOpen("upload",
INTERNET_OPEN_TYPE_DIRECT,
NULL,NULL,0);
if(hInternet == NULL){
InternetCloseHandle(hInternet);
MessageBox("ネットワーク接続に失敗");
goto end;
}
hHost = InternetConnect(hInternet,distip,
INTERNET_DEFAULT_FTP_PORT,
dlg.m_uid,dlg.m_passwd,
INTERNET_SERVICE_FTP,
INTERNET_FLAG_PASSIVE,0);
if(hHost == NULL){
InternetCloseHandle(hHost);
InternetCloseHandle(hInternet);
MessageBox("接続に失敗しました。\n");
goto end;
}
if(!FtpPutFile(hHost,uppath, upfile, FTP_TRANSFER_TYPE_BINARY,0)){
InternetCloseHandle(hHost);
InternetCloseHandle(hInternet);
MessageBox("アップロードに失敗しました。\n");
goto end;
}
InternetCloseHandle(hHost);
InternetCloseHandle(hInternet);
590588:04/05/07 09:11
自己解決しました。
FTPアクセスの後、Socket通信をしていたのですが、
WSAStartupを呼んだ直後にWSACleanupをしていました。
WSACleanupを通信終了時でだけ実行するようにしたら、
現象が起こらなくなりました。

スレよごしスマソ
591デフォルトの名無しさん:04/05/08 04:06
質問です
CWhd::MessageBoxのボタン(ハイ、キャンセル等)を任意のメッセージに
変更したいんですけど一番スマートな方法を教えてください
今は、
1.MessageBoxを呼び出す前にフラグを立てる
2.MessageBoxを呼び出す
3.WM_ACTIVATEをハンドリングして、フラグが立っていた場合MessageBoxの
ウインドウハンドルからボタンのウインドウハンドルを取得
4.ボタンのウインドウテキストを変更
という、良いんだか悪いんだか分からない方法で変更してます
もっとスマートなやり方を知っている方いらっしゃいましたら教えてください
>>591
自作MessageBox作れば?
>>592
俺もそう思う。
>>591
MessageBoxっていうのは出来合いのダイアログとして雛形で用意された
パターンを選択して使うもの。ボタンの数とかパターンはいくつかあって
変えられるが、あくまで用意されているものを使う。それでwindows標準形式
に沿うものができるわけだ。

ボタンのメッセージからオリジナルのものに変えたいなら、そういうダイアログ
を自分でクラス化して作る。
595デフォルトの名無しさん:04/05/11 16:28
質問があります。

以下のようなコードを記述した場合、DrawLine関数の内部でも古いペンに
戻してやることは必要ですか?
DrawLineを抜けた時点でスタック上のpenは消滅するので、SelectObjectされた
デバイスコンテキストの状態が気になっています。
この例ではDrawLine()の後すぐに古いペンに戻していますが、Draw関数内の
コメントアウトされた行を実行した場合はどうなるのでしょうか?

void Draw(CDC *pDC){
  CPen *pOldPen = pDC->GetCurrentPen();
  DrawLine(pDC);
  // pDC->LineTo(100, 0);
  pDC->SelectObject(pOldPen);
}

void DrawLine(CDC *pDC){
  CPen pen(PS_SOLID, 1, RGB(255,0,0));
  pDC->SelectObejct(&pen);
  pDC->MoveTo(0, 0);
  pDC->LineTo(100,100);
}
SelectObjectの戻り値が何か考えたことはあるかね?
MFCでドキュメントビューを使わないソフトを作っているのですが、
CSplitterWndの上にCTreeCtrlとCListCtrlを作成しまして
リストにアイテムを追加しようするとNULLが返ってきます。

CtreeView/CListView/CDocumentを使わずに
同じ動作をさせるにはどうすればよいのでしょうか?
>>597
頑張れ
Cの入門用のテキストをマスターしたくらいのレベルのC++未経験者です。
最近Windows用のアプリに興味が出てきたのでVC++にチャレンジしてみたいと思っているのですが、
初心者に分かりやすく解説してあるオススメのサイトはありませんか?
やはり本屋で一冊買ってきた方が早いのでしょうか。
うん。
601デフォルトの名無しさん:04/05/11 23:37
CPenってDeleteObjectしなくても消滅するんだっけ?
>>599
>>601
うん。
>>597

CViewのソースをよーく見てみるべし
605595:04/05/12 00:20
>596 解答ありがとうございます。きちんと選択を戻せということですね。

私がやりたかったのは、抽象化されたボタンクラスを作成して、派生したクラスでGDIオブジェクトの
置き換えに気を使わないでも良い作りにしたかったのです。

virtual void DrawInnerFrame(CDC *pDC) = 0;
virtual void DrawOutsideFrame(CDC *pDC) =0;
virtual void DrawContents(CDC *pDC) = 0;
void Draw(CDC *pCD) {
 // 実際にはペン以外にも使用されるGDIオブジェクトを取っておく
 CPen *pOldPen = pDC->GetCurrentPen();

 // 描画は派生するクラスによって異なる
 DrawOutsideFrame(pDC);
 DrawInnerFrame(pDC);
 DrawContents(pDC);

 pDC->SelectObject(pOldPen);
}

このようなコードの場合は各仮想関数の実装で選択を戻す必要は無いかもしれませんが、
万が一があるかもしれないのでキチンと選択しなおすことにしました。
(使用するのが私だけとは限らないので)

失礼しました。
>>605
>このようなコードの場合は各仮想関数の実装で選択を戻す必要は無いかもしれませんが、

SelectObjectされたGDIオブジェクトを破棄するのはダメだった希ガス
607606:04/05/12 14:05
MSDNに書いてあった

>Do not delete a drawing object (pen or brush) while it is still selected into a device context.
608595:04/05/12 14:48
>606 解答ありがとうございます。

>SelectObjectされたGDIオブジェクトを破棄するのはダメ
そうなんですが、追ってテストしてみたところ

void Draw(CDC *pDC)
{
  CPen pen(PS_SOLID, 10, RGB(22, 18, 86));
  pDC->SelectObject( &pen );
  pDC->MoveTo(0, 0);
  pDC->LineTo(100, 100);
  CPen *pPen2 = pDC->GetCurrentPen();
}

void CViewTestView::OnDraw(CDC* pDC)
{
  CPen *pPen1 = pDC->GetCurrentPen();
  Draw( pDC );
  pDC->LineTo(100, 0);
  CPen *pPen3 = pDC->GetCurrentPen();
  VERIFY( ::DeleteObject( pPen3->m_hObject ) );
  VERIFY( ::DeleteObject( pPen3->m_hObject ) );
  VERIFY( ::DeleteObject( pPen3->m_hObject ) );
  VERIFY( pPen3->DeleteObject() );
}

このようなコードが平然と動いて、もうワケワカメな状態です。
ちなみに
pPen1->m_hObject != pPen2->m_hObject
pPen2->m_hObject == pPen3->m_hObject
でした。
結構そーゆー感じでAPI CALLは失敗しないことがあるんで、
プログラマが注意してSelectObjectする必要がある。

あと、SelectObjectじゃないけど、第三者提供の描画関数呼び出したら
マッピングモードやら目茶苦茶にされたまま戻ってきてワヤになった
経験があるんで、それ以来 SaveDC/RestoreDCも愛用している。
595さん、OSは何ですか。9XとNTで動作が違います。
VS2003付属のMSDNにありました。

Platform SDK: Windows 9x Programming
Windows 95/98/Me Graphics Device Interface

There are platform differences in the way drawing objects are deleted.
In Windows NT/Windows 2000, if a drawing object (pen or brush) is deleted
while it is still selected into a DC, the DeleteObject function fails.
In Windows 95/98/Me, the function succeeds,
but the result is a nonfunctioning object.
This nonfunctioning object is automatically destroyed when the DC is deleted.
612595:04/05/13 10:57
開発環境はWindowsXPですが、Windows2000でもテストを行ってみたところ
>608のコードでデバッグしてもエラーにはなりませんでした。
残念ながら95/98/Meで確認できなかったのでこれ以上の追求は出来ませんでした。

>611さんに報告していただいた内容とは異なりますが、OSによって挙動が違う
ようですのでSelectObjectは怠けずに行うことにします。

皆様、ありがとうございました。
>>612
怠け者にはSaveDC()とRestoreDC()がお勧め
RestoreDCも、Create->SelectしっぱなしのGDIオブジェクトの面倒は見てくれない。
SelectObjectでの戻しだけは必須。
615デフォルトの名無しさん:04/05/14 09:24
>>614
MSDNライブラリには、SaveDCは選択されているオブジェクトの状態を保存すると書いてあるが?
616デフォルトの名無しさん:04/05/14 23:03
すみません。くだらない質問なんですが、
みなさんはC++をどれくらいの期間で習得しましたか?
         一日どれくらい時間勉強しましたか?
     さらに、何歳から勉強しようと思いましたか?
>>616 スレ違いだな
>>616
最後は本人のやる気次第じゃないかな。
619デフォルトの名無しさん:04/05/15 19:21
CMDIChildWndに、メニューを設定したいです。
CMDIChildWndを継承したウインドウのOnPreCreate()で、

CMenu m;
m.LoadMenu(IDR_MYAPP);
this->SetMenu(&m);
m.Detch();

とやると落ちます。
デバッグして追ってみると、SetMenuでハングしています。
どうすればよいのでしょうか。
>>619
子ウィンドウにメニューは付けられないはず。
出来るよ
高橋の過去ログで検索すれば出てくる
622デフォルトの名無しさん:04/05/16 03:26
CPen::CreatePenで作ったペンでビットマップに線を引きたいのですが、
線の色を、描画するビットマップの色の反転したものにするにはどうしたらいいでしょうか?
>>621
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/menus/aboutmenus.asp

>Only an overlapped or pop-up window can contain a menu bar; a child window cannot contain one.
624デフォルトの名無しさん:04/05/16 16:18
ジョイパッドのグローバルフックをしたいんですけど
どのようにしたらよいのでしょうか?

ジョイパッドのボタンが押された時に
とんでいくメッセージは何になるんでしょうか?
625デフォルトの名無しさん:04/05/16 17:26
>>624 DirectInput使わずにオレも制御しようとしたことがあったけど、
メッセージもあったはず。
mmsystem.hを読むとよろし。mmlib32.libのリンク忘れないように
626624:04/05/16 18:22
>>625
なるほど
mmsystem.hを読んでみます
627デフォルトの名無しさん:04/05/16 20:05
mmsystem.hをみると
Joystickのメッセージは
MM_JOY1BUTTONDOWN
MM_JOY1BUTTONUP
MM_JOY2BUTTONDOWN|
MM_JOY2BUTTONUP
のようだったので
WH_CALLWNDPROCのフックプロシージャを作って
そこで(CWPSTRUCT *)lParam->message が
上記の値なら処理するようにしたのですが
接続してるゲームパッドを叩いてみても無反応でした(´;ω;`)ウッ…
俺のジョイスティックは最近元気が無くて。。。
>628
ちゃんと接続されてるか確認しような。
>628
俺もだ。歳のせいかな。
エディットボックスをクリックしたら以前入力した項目が出てくるようにするには
どうすればいいでしょうか?
オートコンプリートを付ける。
>>632
もう少し詳しく教えていただけないでしょうか?
>>632
「オートコンプリート」って機能実現のために出来合いの関数群が用意されてる?
ヒストリを実装したエディットコンボボックスで必要十分だと思うんだけど。
>>635
「ヒストリ」とは?
「エディットコンボボックス」ってあったっけ?
中身を編集できるコンボボックスはあるよね。
638635:04/05/17 22:22
>>636
>「ヒストリ」とは?
History。履歴。

>「エディットコンボボックス」ってあったっけ?
>>637の事。
639デフォルトの名無しさん:04/05/18 01:59
お前らは、IAutoComplete も知らないのか。
COMを理解出来るほど上達してない。
COMのメンバ関数につける長ったらしいプリフィックス?が嫌い。
オレ用語使うヤシがいるがそれじゃプログラミング・サポート系スレのレスに
ならないよ・・・。短文レスにするならちゃんとしたライブラリ用語とか使えよ。
じゃなかったらやり方をきちんと説明汁。
643デフォルトの名無しさん:04/05/18 11:19
>>642 (°Д°)ハァ?
IAutoComplete をキーワードにヘルプ見たら一発だろうが。
「エディットコンボボックス」のことだべ。
>>644
それは訳分からんな。
「CBS_DROPDOWN」で説明すべきだな。
>>643
普通に考えて>>635だろよ
>>643
...
648デフォルトの名無しさん:04/05/21 18:22
ここMFC限定ですか?VCスレってことで質問です
VC6.0sp6で、以下のように宣言するとC2059エラーが出ます。
どこか間違っていますでしょうか?

template<class T>
class B
{
};

class A{
template<class T>
friend class B;
}

650648:04/05/21 18:47
>>649
スレ違いすいません
VC6じゃコンパイル出来ないんですね
ありがとうございました
651デフォルトの名無しさん:04/05/21 20:04
自分の作った常駐プロセスをユーザに停止させないようにする方法はどうするのでしょう。
二つ起動させておいてお互いを監視しあって停止させられたら起動かける
方法にしましたが、タスクマネージャから「プロセス ツリーの終了」で
綺麗さっぱり なくなってしまいました。
悪用されるので教えられません。
653デフォルトの名無しさん:04/05/21 20:47
あれれ、そうなんですか。
サービスという方法もありますが難解ですし時間もないので困ってます。
プロセス ツリーの終了 と プロセスの終了 はどう違うのでしょうね。
子プロセスも停止させるのかな。
(ちなみに社内用でデータの持ち出しを防ぐためのツールを作っています)
>>653
停止させられないワームとかウイルスをコードのコピペでお手軽に作られると嫌でしょ。
ユーザの権限ではUSBとかFDDとかのデバイスを使用不可にしとけば?
>>653
そういうのは物理的に持ち出せないようにしないとまずいと思う。
例えば外付けドライブからCDブートのLinux等を
起動させられたりするとどうしようもない。
>654の言うとおりかな。
最低限のハードウェアしか積んでおらず、外部のネットワークと
接続されていない専用端末を用意すればよろしいかと。
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
  int a;
  a=textBox1->Text->ToInt32;
}

4行目を↓のようにしてもうまくいかず・・・どうやれば上手くいくのでしょうか?
a=atoi((char)textBox1->Text);

これこのスレで質問してもいいのですか?
C/C++スレで聞いたらスレ違いらしかったので
atoiの引数はchar型のポインタじゃなかったか?
そのtextBox1とやらがどんなものなのかわからんから何とも言えんが
キャストするなら( char* )にしないと。まあ元のデータが
char型のポインタじゃ無ければ駄目だけど。
textBox1->TextがCStringならatoi(textBox1->Text)で医院で内科医?
>>658
error C2440 'System::String __gc*'から'char*'に変換できません。
と出ました。CString変数使わずにダイレクトでintにする方法は無いのでしょうか?
>>659
error C2446 'atoi': 一番目の引数を'System::String __gc*'から'const char*'に変換できません。
となります色々試しているのですがヒント程度でも何でもいいのでお願いします。
662正解大魔王:04/05/23 20:14
CString str="53653";
int b=atoi((LPCTSTR)str);


>>662
それはヒントなのでしょうか?
a=atoi((LPCTSTR)textBox1->Text);
とするもエラー4つ

これは LPCTSTR型 にキャストすれば atoi で変換できるということなんでしょうか?
(LPCTSTR)(textBox1->Text)
strtolとか
strtoulとかもあるぞ
657です
.NET Visual C++プロジェクト Formアプリケーションから作ってますがその辺と関係があるのでしょうか?
CString 宣言すると定義されてない識別子と出るので何かおかしい・・・
>>664
error 2065/2378 LPCTSTRが定義されてません/識別子がtypedefとして再定義
エラーが2つ
>>665
今から調べて使ってみます
>>665
a=strtol(textBox1->Text,NULL,10);
のように使えばいいのでしょうか?
これだと >>661 同様のエラーが出ました
やはり型のところで何か問題があるようです
それから textBox1.Text はデザイン時に "10" としています
671デフォルトの名無しさん:04/05/23 20:45
char *stop;//<<---これを書いてから
int i=strtoul(str,&stop,10);//<<--こうする
managedの話をいつまで続ける気だ?
>>671
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
  int a;
  char *stop;
  a=strtol(textBox1->Text,&stop,10);
}

error C2664 一番目の引数を'System::String __gc*'から'const char*'に変換できません。
でした。因みに char *stop は宣言だけ使用してるので中身は NULL ということなんでしょうか?
何れしても問題は一番目の引数のようです。
>>672
managedについて調べてみました
MS VisualStudio .NET 2003 での Visual C++
は所謂従来の Visual C++ とはかなり違うもののような雰囲気のようですね
managed C++ という表現があるようですが、それが今自分のやろうとしてるものなんでしょうか?
最初の引数がポインタであることが原因
ポインタじゃなければ(LPCTSTR)でキャストして
atoiに放り込める。
>>675
>>664 で教えられて >>667 のような結果なのですが、これとは違うのでしょうか?
ここ、MFC限定ですが。
>>677
すいません。
徐々に自分がスレ違いのような気がしてきました。

managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
こっちのスレに移動します。
お力になって頂けるのであればお願いします。
最初から思いっきりスレ違いだろ・・・
680デフォルトの名無しさん:04/05/23 22:46
カーソルキーで画像うごかそうとしてるのですが
上 下 左 右 はうごくのですが
斜めにうがしたいのですが
どうすればいいでしょうか?
GetKeyboardStateとか使えば逝けるかな
682デフォルトの名無しさん:04/05/23 23:10
AI知っている人、手えあげて
683デフォルトの名無しさん:04/05/23 23:37
<<681
GetKeyboardStateでいけますか?
上下左右に動くんなら、ナナメ移動も出来ると思うわけですが…
コードが悪い気が。

ただ、ハードウェア制限により、
キーの同時取得が出来ない組み合わせもあるけど。
まことに初歩的な質問で恐縮ですが、MFCアプリで終了コードを
設定して終了する場合はExitInstanceをオーバーライドして
int Cほにゃらら::ExitInstance(){
  return( 123 );
  // return CWinApp::ExitInstance(); // ←元々あったコード
}
のようにすると思うのですが、この場合に元々呼び出していた
CWinApp::ExitInstance()の呼び出しを行う必要はあるのでしょうか?
あるよ。
>>685
CWinApp::ExitInstance()のソースを読めば分かるんだけど、アプリ内で設定されたMRUなどを
保存しているので、無いと色々と不都合が出てきそう。

int Cほにゃらら::ExitInstance(){
  CWinApp::ExitInstance(); // ←元々あったコード
  return( 123 );
}

どうせなら、こうした方が無難カモ。
688685:04/05/26 16:04
レス、ありがとうございます。

他社からメンテナンスで引き継いだソースだと、元々のExitInstanceが
コメントアウトされたままの物があったのでどうなのかと思いまして。

しかし、このアプリ既に全国展開で何年も動いているんだよな。ガクブル
動いているなら大丈夫。改変さえしなければね (;´Д`)
「動いている間は触るな」と言う素晴らしい格言がある。触るな。
あるVC5で作成されたアプリが、なんだかソースはすごく変なのに動いてました。
(初期化していない変数に平気でアクセスしている)
そのままVC6に持っていったら、案の定まともに動きませんでした。
しょーがないので、そのままVC5で保守しています。
動いているので触りません。
>>691
手遅れだな
俺も昔は、よく爆弾仕込んだもんだ(爆)
694デフォルトの名無しさん:04/05/27 09:39
VC++6.0 MFC

すみませんが、教えてください。

入力画面1>入力画面2>入力画面3>結果画面

といったような画面がどんどん遷移していくアプリを作成したいのですが
これを実現するにあたって標準的な方法はどういったものなのでしょうか?
(画面遷移は一方通行です。結果画面のあと入力画面に戻ります。)

1.SDIで作って画面ごとにコントロールの表示/非表示を切り替える。
2.画面ごとにダイアログを作成し順番に表示する。
3.MDIで作って画面ごとに子ウィンドウを作成する。
4.その他

よろしくお願いします。
どういう内容を入力させたいのか分らないけど、
ダイアログが一番簡単でユーザーにも分りやすいでしょう。
下手にSDIとかMDIで画面を切替えたりすると、どれがメイン画面か
分りにくくなるし。感じとしてはAppWizardみたいなものになるんだと
思います。
>>694-695
MFCだと、CPropertySheetでSetWizardModeするのがやりやすいかね。
この場合、ステップ毎にCPropertyPage(ほぼダイアログ感覚)を作っていく。
697デフォルトの名無しさん:04/05/27 15:43
APIのSetTimerで時間ごとにメンバ関数を呼び出すにはどうしたらいいでしょうか?
SetTimerの第4引数でメンバ関数のアドレスを渡しても呼び出してくれませんでした。
>>697
どこから SetTimer 呼び出してる?
なせ、CWnd::SetTimer を使わない?
699697:04/05/27 16:19
CXXXView::InitialUpDate()内でCWnd::SetTimer(1 , 1 , TimerProc);を実行し
void CALLBACK EXPORT CXXXView::TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime){}
としたのですが無理でした
APIでもCWnd::でも同じようです
エラーは下のようになりました
'SetTimer' : 3 番目の引数を 'void (struct HWND__ *,unsigned int,unsigned int,unsigned long)' から
'void (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,unsigned long)' に変換できません。
スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません。
FAQ
さすがにコンパイル出来てないのに
呼び出してはくれんだろ。
702デフォルトの名無しさん:04/05/27 19:52
現在スレッドの勉強をしているのですが、
サンプルソースの中に、

CUdpThread ->m_pThreadParams = NULL;


class CUdpThread : public CWinThread
{・・・・・・・・};

という、部分があり、何のために書かれているのか解かりません。
m_pThreadParamsでMSDN・GOOGLEとうで検索してみたのですが
MSDNにいたっては、データ メンバ にすらのっていませんでした・・・。

m_pThreadParams は何の設定を行うものなのでしょうか?

703702:04/05/27 19:56
追加

http://www.cppdoc.com/example/mfc/classdoc/MFC/CWinThread.html

海外のページには、のっていたのですが、目的がかかれていませんでした。
>>702
スレッド起動時のパラメータ、AfxBeginThread の第2引数が入る。
705デフォルトの名無しさん:04/05/28 00:06
処理がいつ終わるかわからないんで、
実行中だというのを示すために、
アニメーションを表示させようと思ってます。

で、たまにみるプログレスバーみたいなのは
自作したものなのでしょうか。
左から右にプログレスバーのブロックが
繰り返し流れていくやつです。

---------------------------------
|→→→→→→■■■■■→→→→→|
---------------------------------

XPのエクスプローラで検索するとでてくるのに似てます。
(検索コンパニオンをOFFにしてるとでないかもしれません)
質問です
コンボボックスをオーナー描画にすると、なぜか高さが大きくなってしまうのですが
これを通常時(オーナー描画しないときと同じ)高さにする方法はないですか

VC6sp6
Windows2000
707デフォルトの名無しさん:04/05/28 01:33
age
708706:04/05/28 01:57
自己解決しました
お騒がせしました
709702:04/05/28 16:56
704さん
ありがとうございました
710デフォルトの名無しさん:04/05/28 21:17
質問させて頂きます。

カーソルがウィンドウ外に出た時にメッセージが欲しいのですが
そういうウィンドウメッセージはありますか?
711710:04/05/28 21:28
SetCapture()
ReleaseCapture()
で自己解決しました。
712デフォルトの名無しさん:04/05/29 14:35
VC6です。
エクスプローラと同じように、フォルダを一覧するツリーを作成しています。
表示は出来るようになったのですが、動的な更新に対応したい.と思って困っています。
つまりエクスプローラなどで、フォルダを作成したり、削除した.りしたときに、その変更を検知して、自分のツリーも更新を.かけたいのですが、その変更をどうやって検知すればよいか.がわからなくて困っています。
エクスプローラからブロードキャストされるようなメッセージが.あるのでしょうか?
よろしくお願いいたします。
>>712 マルチやめれ
厨房、いや、新人必死だな
>>712
初心者板で解決いたしました。お世話がセ氏真下。
715デフォルトの名無しさん:04/05/29 22:06
すまそ。
アプリケーションでよく見るファイルの参照ボタンって、
どうやって作るの?
どっかのコントロールにあるんですかね?
CFileDialogだったかな。
「参照ボタン」という事だから、CButton だろ。
718デフォルトの名無しさん:04/05/30 00:54
ダイアログベースのアプリを作成して,
起動時に最大化させようと思っているんですが,
うまくいきません.
起動後に「最大化ボタン」を押すと最大化
できるんですが...
719デフォルトの名無しさん:04/05/30 01:21
つか、悪いこといわないから、Winアプリ作ろうと思ってる人は
とりあえずWin32APIをある程度理解してからとりかかったほうがいいよ。

わけもわからずスケルトン生成
→なんかソースがたくさんできる
→どこ変えたらいいかわからない

みたいな質問ばかりだけど。
720デフォルトの名無しさん:04/05/30 01:43
>>718
STARTUPINFO::wShowWindowあたり調べたか?
721718:04/05/30 01:53
BOOL CXXDlg::PreCreateWindow(CREATESTRUCT& cs)の中で,
  cs.style |= (WS_MAXMIZE | WS_VISIBLE);

としてもダメだったので,WM_CREATEのメッセージハンドラを作成して
以下のようにしました.

int CXXDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)内で
  ShowWindow(SW_SHOWMAXIMIZED);

これで最大化されるようになりましたが,これでいいんでしょうか?
最初の方法でもいいような気が... あっ720さん どうも


722デフォルトの名無しさん:04/05/30 01:56
PreCreateWindow
InitInstance
724718:04/05/30 02:36
>>722さん
PreCreateWindow内でShowWindowをよんでも最大化しませんでした.

>>723さん
InitInstance内での使用方法が分かりませんでした(すいません)

色々やってみると,

BOOL CXXDlg::OnInitDialog()内で,
  ShowWindow(SW_SHOWMAXIMIZED);

でもOKでした.こっちの方がいいのかな
725デフォルトの名無しさん:04/05/30 02:41
ダイアログベースのアプリからHTTPプロトコルをつかってサーバーサイドのアプリのActionしたいのですがそんな関数有りますか?
726デフォルトの名無しさん:04/05/30 03:12
初心者ですいません。
MFCでボタンを作って、それを押すことで何かの処理をするってときに
計算に時間がかかるような処理だったりすると、ほかのボタンを受け付けなくなります。
ボタンを押すことによって計算を一時中断したいけど、皆さんはこういうのはどうやってるんですか?
マルチスレッドとか。
>708
自己解決って、どうやったの?
729デフォルトの名無しさん:04/05/30 10:09
>>724
>PreCreateWindow内でShowWindowをよんでも最大化しませんでした.

そりゃ無理じゃん Pre だぜ?
そこでやるならCREATESTRUCTの修正だよ
>>724
OnShowWindow
>>724
最初は初期化関連処理はOnInitDialog()内で一通りやるように覚えておけば良いよ
それが無難
>>726
マルチスレッドを使う。
プログラム本体の動作はそのままにそれと別に裏で処理を行う場合は、
その処理用のスレッドを作成してそこで処理する。管理が面倒なので
若干高度なプログラムになるよ。何か適当にソースを拾ってきてマネする
ところから始める。
>>726
中断ボタンが押されたらフラグを立てるようなメッセージ処理を作っておく。
処理ループ中では、上記フラグの監視(フラグが立ったら強制終了)と、
PeekMessage,TranslateMessage,DispatchMessaheを使ってボタンコントロールの
メッセージを受けられるようにする。

こうすっと、シングルスレッドでもできる。
ウインドウの初期設定はCREATESTRUCTでやるってことを知らないから
>>718みたいな質問が来るんだろうな。
>>734
ダイアログって CREATESTRUCT だっけか?
ニヤニヤ
737726:04/05/30 20:58
>>727,732,733

ありがとうございました。早速勉強して作ってみたいと思います。
738デフォルトの名無しさん:04/05/30 21:21
タイマーの処理にInvalidate();を入れたのに画面が更新されません。
なじぇ?
InvalidateはメッセージキューにWM_PAINTをPostするだけ
だから。
UpdateWindowですぐに描画させる。
再描画は、RedrawWindow()ってやってるけど
それじゃいかんのでしょうねぇ…。
741デフォルトの名無しさん:04/05/30 22:47
>>739
Invalidate自身はポストしないよ
Windowsがポストする条件の1つを真にするだけ
742739:04/05/30 22:53
>>738,741
ごめん。
× InvalidateはメッセージキューにWM_PAINTをPostするだけ
○ Invalidateはクライアント領域を無効にするだけ
ですた。PostするのはOSですた。逝ってくる。。。
下手すると、無限ループに陥るは仕様です。
744デフォルトの名無しさん:04/05/31 00:05
void CShadowDlg::OnButton1()
{
//ボタンが@が押された処理
if(){


//ボタンがAが押された処理
}else if(){

}


}
押されボタンによって処理を分けたいのですがどのように判定すればよろしいですか?
>>744
合理的な方法はない。イベント分けろ。
>>744
IDで判別するとか?
wizard使わずに自分でメッセージマップを書く必要があるかも。

ON_COMMAND_RANGEだろ。
OnCommand()なら、パラメータからIDが取得できる。
あとは744の好きなように料理すれ。
>>745は嘘つき
>>745
ニヤニヤ
751デフォルトの名無しさん:04/05/31 23:38
ダイアログにポップアップメニューが表示されるようにしているのですが
ポップアップメニューの項目のチェックのON,OFFが出来ません…
UPDATE_COMMAND_UIもダメですし、直接 CheckMenuItem()してもダメでした。
もう、分けがわかりません。
誰か分かる方が居たらお願いします。
WM_INITMENUのハンドラで更新
こういうの見るとMFCって罪作りだと改めて思う今日この頃。
754752:04/06/01 02:28
>>751
CDialogには「WM_INITMENU」に対応する関数が無いみたいです。
あったとしても、CheckMenuItem()で変更が出来ないんですよね…
OnContextMenu()の中で、CheckMenuItem()しても、全く変化なしです…
755754=751:04/06/01 02:31
スミマセンレス番号と自分の番号を間違えました…

>>752
CDialogには「WM_INITMENU」に対応する関数が無いみたいです。
あったとしても、CheckMenuItem()で変更が出来ないんですよね…
OnContextMenu()の中で、CheckMenuItem()しても、全く変化なしです…
OnInitMenuPopupだろ。

少し前からわからんくせに回答してる奴が紛れてるようだが何かあったのか?
757755:04/06/01 11:12
>>756
いや、ダイアログには無いですよ…
AppendMenu()で追加は出来ても
CheckMenuItem()でチェックは付けれないんです…
>>757
なかったら、メッセージのフィルタを変える。
ダイアログリソースエディタ上で右クリ→イベント→クラスで使用可能なメッセージ用フィルタ→「ウィンドウ」
CheckMenuItemでチェックできないはずはない。第二引数をTRUEにしてたとかは初心者にありがちだが(MF_CHECKED)
759デフォルトの名無しさん:04/06/01 13:21
ダウンロードのダイアログとか
インストーラのダイアログとかの
バーば伸びていくタイプのメーターチックな実装を実現するクラスはなんですか?
>>759
CProgressCtrl

バーばっ
761デフォルトの名無しさん:04/06/01 14:22
>>760
サンクスコ
バーばっパパ
763755:04/06/01 18:13
>>758
「MF_CHECKED」を完全に見落としてました…
なんでこんな事が分からなかったのか…
本当に何度もすみませんでした!!
お陰で上手くチェックできますた!!
764755:04/06/01 18:23
CheckMenuItem()の、nCheckパラメータってビットのフラグだったんですねぇ…
完全に見落としてました…
普通に型がUINTだから、分かり難いです…
パラメータがビットのフラグを取る時は
いっその事 型を「BITFLAG」とか「BITVECTOR」とかにして欲しい。
わかったから、仕事に戻れ。
766758:04/06/01 22:08
>>763-764
まあ、俺は一回しかレスしてないけどな。
こじれてきたら該当箇所を晒してみればサクっと解決することも多いよ。
昔こんなことあったなって思いついて付け加えたのがたまたまハマって良かったが。

フラグに型か・・・次の仕事はDelphiを押せ
質問っす。
CEditのコントロールにフォーカスが来ると、自動的にカーソルが末尾に行くようにしたいんですが、なにかいい方法ないでしょうか?

void Cxxx::OnEnSetfocusEdit()
{
m_Edit.SetSel(-1, -1, FALSE);
}

調べたところ、これで出来るという風なことなんですが、うまくいきません。。
質問の仕方としては最低の部類だな
769デフォルトの名無しさん:04/06/03 12:31
現在のダイアログ上に埋めたままのCProgressCtrlなら使えるのですが
ダイアログのウィンドウとは別あのバーだけ表示させてさらに背後のダイアログ上で処理を進めるにはどうしたらいいですか
>>769
プログレス持ったダイアログ表示させれば良いだけだろ。
DoModal ではなく Create で作る。
771デフォルトの名無しさん:04/06/03 13:35
>>770
サンクス
CForProgfp;
ってやって
fp.Create(IDD_DLG_FOR_PROG,NULL); // 失敗?
fp.DoModal();//成功
失敗しているのかどうかしらんけども窓が出てこない
DoModalでやったらちゃんと表示される
なんでかわかんない
772デフォルトの名無しさん:04/06/03 13:43
ちなみに
CForProgfp;
fp.Create(fp.IDD,NULL);
でも駄目ですね
一緒か
>>771
ShowWindow しないとダメ。
念のため書いておくけど、
↓これ含んだ関数を抜けちゃうと、破棄されてしまうオチが。
CForProg fp;
ShowWindow入れてみようというくらいの知恵は働かんのかなー
775デフォルトの名無しさん:04/06/03 15:07
うまくいきました
ShowWindowなんてものがあることをしりませんでした
ところで僕はいまVisualStudioを使ってグラフィカルなプログラムをかいているのですが
それの各要素にIDというのが振られていますが
動作中のプログラムはどこにこれを保持しているのでしょうか?
勘違いだったらすんません
勘違いだ。
777デフォルトの名無しさん:04/06/03 15:33
void のポインタをキャストしてインクリメントしたいのですが、
コンパイルの段階でエラーになります。(gccでは出来るのに。)
void *vp= aiueo;
(int *)vp ++;
これって文法的にはどうなんでしょ?
VCがそういう仕様なんでしょうか?
そもそも、Cの文法(ANSI C?)で規定されていないんでしょうか?
778デフォルトの名無しさん:04/06/03 15:38
そうですか
IDを持っていないウィンドウとかをClassっぽく使うにはどうしたら良いのですか?
要はダイアログとかのエディット画面を使わずに座標指定だけで
CProgressCtrlを使いたいのですがどうすればいいのかさっぱりわからんのです
CProgressCtrl *p=new CProgressCtrl();
p->Create(...);
なんでわざわざMFC限定って書いてるのにCの質問する奴がいるんだよ

あとVC++初心者スレもあるから、なんつーか・・・察すれ
>>780
そういう気遣いすらできないから、初心者なんだろ?
この場合、「ネット初心者」っつうプログラム以前の問題になってくるけどな。
782デフォルトの名無しさん:04/06/03 21:03
MDI tabs を実装したいのですが、どうしたらいいのでしょうか?
783777:04/06/04 00:27
スレ汚してすいませんでした。急いでいたのできちんと
確認しないまま書き込んでしまいました。
784VC++:04/06/05 15:01

struct Flg{
int flg;
//flg = 0;
int getFlg(){
struct Flg f ;
return f.flg ;

} ;

void setFlg(int updown){
struct Flg f ;
f.flg = updown ;

} ;

} ;


785デフォルトの名無しさん:04/06/05 15:01

//784の続き
void CShadowDlg::OnButton5()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
Flg l;
int a = l.getFlg();
l.setFlg(2);
a = l.getFlg();
UpdateData(TRUE);
m_ie2.Format("%d",a);
UpdateData(FALSE);
if(a == 0 || a == NULL ){
setFlg(1);
UpdateData(TRUE);
m_e1.Format("テスト2");
UpdateData(FALSE);

}else if(a == 1){
setFlg(0);
UpdateData(TRUE);
m_e1.Format("テスト1");
UpdateData(FALSE);

}

786784:04/06/05 15:05
ボタンが押されるたびにエディットボックスのテキストを交互に変更したいのですが784,785のようにやったら構造体Flgのflgの値が、「-858993460」と、なってしまいます。
なにかいいほうほうはないでしょうか?よろしく願いします。
>>784
struct Flg{
  int flg; ← [A]
    //flg = 0; ← このコメントもわけわからんが...
  int getFlg(){
    struct Flg f ; ← これはもっとわからん...
    return f.flg ; ← まさか、[A] の値を返しているつもりか.... ?
    } ;
788デフォルトの名無しさん:04/06/05 15:27
そうです・・・Aの値を返してます・・・・・
まずかった?
すみません私JAVAあがりなもので・・・・
JAVAもわかってないような...
すごいもの見ちゃった。。。
普通に

OnButton(){
  static int f = 0;
  f ^= 1;
  if (f){
  }
  else{
  }
}

じゃだめなの?
792784:04/06/05 15:39
javaのゲッターとセッターのつもりで書いたんですが・・・・


class Flg{
 privete flg;
 
 public int getFlg(){
   retrun flg
 }

 public void setFlg(int i){
   flg = i;
 }

}
javaでかくとだとこんなかんじにしたいです。C++オブジェクト指向でしょ・・・・?
フラグにいちいちクラス用意するやつはじめて見た。
なんでJAVAのそのコードがC++になると
上のようになって
「C++オブジェクト指向でしょ・・・・? 」
なのかが全くわからない
たぶんオブジェクト指向を理解できていない、もしくはとんでもな方向に理解してるやつだな。
796784:04/06/05 15:49
>>791
ありがとうございます。できました
「すみません私JAVAあがりなもので」
高倉健みたいなセリフでつ
798784:04/06/05 15:49
高倉健です
無礼なこと言って失礼しますた
誰かに「javaのclassはC/C++のstructと同じだよ!」見たいなこといわれたのかな?
801高倉健:04/06/05 15:53
いわれた・・・・
802デフォルトの名無しさん:04/06/05 15:56
厳密にいうとclassじゃなくて「javaのBeanとC/C++のstructはおんなじだよ!!!」っていわれました
>>792のpriveteやretrunには触れないところがおまえらの優しいところだ。
804高倉健:04/06/05 16:43
あ、すぺるまちがってた・・・
805デフォルトの名無しさん:04/06/05 17:03
wavファイルやbmpファイルなどの音声やイメージを
exeファイルに全て入れて配布したいのですですが、
どうすればいいのでしょうか?
それって自己解凍圧縮ファイルじゃねぇの?
リソースに持てば?
EXEだと起動時に全てメモリ上に読み込まれるんじゃなかったっけ。
809805:04/06/05 19:17
リソースにもつというのはどういうことですか?
Windowsは実行ファイルのなかに、画像、文字といった
情報(リソース)をセクションを作って持つことができる。
811デフォルトの名無しさん:04/06/05 22:07
  if(m_e5.GetLength() != 0){
   m_b1.EnableWindow(FALSE);
 GetDlgItem(IDC_RADIO1)->EnableWindow(FALSE);
 GetDlgItem(IDC_RADIO4)->EnableWindow(FALSE);
 GetDlgItem(IDC_EDIT5)->EnableWindow(FALSE);
 GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE);
 
 UpdateData(TRUE);
 m_e1.Format("準備完了");
 UpdateData(FALSE);
 }
エディットボックスに入力されてるかどうかを判定したいのだけど、これでうまく判定されないのはなぜですか?
またどのように判定すればいいのですか?
UpdateDataの前後でm_e5の中身を見比べてみよう。
>>811
入力判定ってのは、最初の「if(m_e5.GetLength() != 0){」のこと?
なら、その前にUpdateData(TRUE);がないとダメなのでは?
MFCワカンネ

授業で夏休み前までにグラフィックエディタ作るとか言ってるよ
漏れには2時間かけてサンプルに
ステータスバーに座標表示を追加するのが精一杯でした…
Doc/View どうにかならんものか・・・
>>815
テンプレ作った後、自分ではずしちゃえば?
SDIだったら、フレームだけですべて制御できるとオモタ。
>>814
ソースを見てみるのも一つの手。
俺はそうやって理解した。
>>814
デキる奴に作ってもらえ。
MFCわからんっていってる人はWin32プログラミング自体を知らない人が多い。
Win32知れば、MFCわかってくるし、ある程度便利なライブラリって事もわかるよ。

つーわけで近道せずにWin32からはじめることを勧める。
(激しくスレの趣旨に合ってないがごめんちゃい)
>>819
才能ないやつは、どっち先にやったところで同じ。
才能あれば、MFCだろうがWin32だろうが容易に理解できる。
>>820
確かに。
漏れも仕事でMFC使う羽目になって、デバッグモードでトレースかけながら
MFCとAPIも一緒に勉強できたよ。
漏れ程度でも判るんだから、MFCわからねなんて言ってる香具師は工夫が足りないね。
今のガッコは勉強の仕方を教えてくれんらしいからの。
MFCでダイアログを作っているのだけれど、一つ質問。
大雑把にこんなダイアログがあったとする。
┌───┐
│■□□│
└───┘(注:□はStaticフレームとその中のコントロール部品群)
このダイアログ、リサイズすることになったのだが
そのときは■を大きくしたい。

縦方向の伸びに対してはなんとかなった。
しかし、横方向の伸びに対応するのがなかなか巧くいかない。
何かいい手立てはないもんだろうか。
>>823
どうデザインするか、あなたのセンスが問われるところ。
これといった答えはない。
>>823
MFCだと自前だねえ。
他の開発環境ならアンカー(anchor)とかそんなプロパティがあって、相対的なウィンドウの配置を決めることができる。
上下左右辺(top,bottom,left,right)毎にウィンドウのサイズに合わせてリサイズや移動するような仕組みで、
その図で■がleftはanchor=falseになっているがright=true、そのとなりの□はleft=true, right=trueな場合、
┌───―┐
│■■□□│
└───―┘(■は二つじゃなくて拡大されている)
ってな動きになる。
と、まあ、こんなのは考え方の一つだけど、参考にはなるんじゃなかろうか
>>823
┌───┐
│3 2 1 │
└───┘
この順番で計算していく。

cx = ウィンドゥの大きさ、として。

1.right = cx - {1と右端の隙間の幅};
1.left = 1.right - {1の幅};
2.right = 1.left - {1と2の隙間の幅};
2.left = 2.right - {2の幅};
3.right = 2.left - {2と3の隙間の幅};

rightとleftは各コントロールのGetWindowRect、MoveWindowに対応する値と思ってくれい。
>>826
1つの方法だな。
こーゆーのは理屈で書けんか?
2,3の幅は固定して、窓幅に応じて1幅を可変にする とか。
WTLだと一発なのにね
830823:04/06/08 07:47
ふーむ、なるほど。
幅を固定するブロックも位置は変えなきゃいけないわけだし、厄介だねぇ。
いやさ、Motifに慣れているとどうもね。
CodeGuruも参考にして、今日の午後にでもクラスをこさえてみるよ。
情報感謝。>ALL
>>830
俺もMotifから入ったから、Winの不便さはようわかる。
枠の大きさに応じてパーツの大きさを自動可変してくれる、
あれは便利だぁね。
832>>823:04/06/08 14:12
手書きでもいいから、絵に描いてみて、
各コントロールの位置と大きさを、クライアント(ウィンドウ)サイズから
計算して、OnSize()内あたりでSetWindowRect()かMoveWindow()でも使えば
うまくいくかと。
その手のウィンドウ・サイズ変更で引っかかるところなんだけど
GetWindowRect()とGetClientRect()の区別を意識しておいた方が良い。

Windowsのデスクトップ・デザインはユーザーによって可変のものだから
ウィンドウ境界線の太い細いが環境によって違うことがある。GetWindowRect()
で取ってクライアント領域だと思ってると、場合によっておかしなことになるので
注意が必要。
>>833
座標の取り扱いは非常にやっかいだね。
Get と Set で基点が違うから、わざわざ座標変換しないとあかん。
その辺の意味が分からないから、サンプルや便利ツールに逃げたりするんだろうな。
>>832のSetWindowRectには誰もつっこまないのか
837830:04/06/08 22:50
CodeGuruにあった、Resizerってのが便利そうだったんで
それを「参考にして」クラスを製作中。

>>831
だよね〜。尤もMotifにも不満はあって、RowColumnの使えなさは泣けたけど。

>>833
お約束のように、どっちか5分間悩んだ。

>>835
只逃げるのでは癪だから↑の如く製作中ですよ。

>>836
Resizerを見ると、予めサイズを計算しておいて最後にSetWindowPos()してますね。

Resizer、依存関係の定義にちょっと癖があるけどそこそこ便利。
#余り続けると日記にするなって怒られそうなので名無しに戻ります。
VisualStudio.Netです。
MFC C++でダイアログベースでアプリを作ってるのですが、
CStirngに格納されたデータ(\r\n入り)を印刷するときに、
DrawTextを使って印刷してるのですが、
複数枚にわたる印刷が出来ません。
どうしたらいいのでしょうか?
自分でページを管理
mfc-mlでも同じ投稿が
841デフォルトの名無しさん:04/06/09 22:33
OnPaintを作るとOnDrawが作れなくなりますが、どっちかしか使えないのでしょうか?
この二つの関数の長所と短所はなんでしょうか?
両者択一ならば長所と短所を教えていただければ、これ幸いです。
OnDraw=ドキュメント上でビューを表示するため
OnPaint=Windows またはアプリケーションがアプリケーション ウィンドウの一部の
再描画を要求するとき
OnPaintはイベントハンドラで、OnDrawはそうでないってことですか?
ちょっとMFCのソースを見て、OnDrawがどこから呼び出されているか
見てみようとか、そんな気は
さ ら さ ら 無 い よ う で す ね
MFCのソースというのはどこにありますか?
なるほど。
じゃあこの辺で次の質問にいってみましょう。
>>838
ロール紙を使いなさい
>>845
VSのセットアップ。
あとは、普通に参照するだけで、簡単に閲覧できる。
>>845
適当にブレーク張って、MFC関数内にステップイン するのが一番簡単。
VisualStudio6.0、Windows2000、ドキュメント/ビューアーキテクチャを使ってます。
メニューバーが必要ないので、PreCreateWindowで「cs.hMenu = NULL」を追加して
メニューを削除したのですが、メニューバーの境界線(水平線?)だけ残ってしまいます。
これって消えないんでしょうか?
OnPaintって、OnDrawがあれば事足りるのか?
OnPaintの利点がさっぱり分かりません。
マジレスすると、新Visual C++6.0入門ビギナー編 林著221ページから
OnPaintとOnDrawの関係について詳しく書かれているから
本屋へ行って読んで来い。
854デフォルトの名無しさん:04/06/11 16:14
ダイアログバー(CDialogBar)作ったらトップレベルのウィンドウ(CMDIFrameWnd)にマウスメッセージがこなくなってしまいました。
マウスメッセ−ジゲットするにはどうしたらいいですか?
アプリケーションクラスでゲッツすればいいんじゃね?
856本田:04/06/13 16:21
>OnPaintって、OnDrawがあれば事足りるのか?
>OnPaintの利点がさっぱり分かりません。

CXXViewクラスを使う時には、OnDraw()を使って、
CXXWndクラスを使うときには、OnPaint()を使う。
857デフォルトの名無しさん:04/06/13 18:04
はじめまして
突然の質問ですが、ワーカースレッドで処理を行うライブラリを書いていたのですが、
1処理1スレッドを起動するので、とりあえずテストとしてスレッドが起動できなくなった
とき、どうなるのかなーテストをやってみました。
で、
pThread = AfxBeginThread(WorkerMain, pCommand, ...);
てな感じのものを2000回ほどやってみました。

すると、まぁ予想通りNULLが返ってきたので、ふむふむ、と納得していたのです。

が、タスクマネージャーをみてみると「1スレッド起動できない」あたり2個のハンドルが
増えていくではありませんか!

で、質問ですがこれはどうにかできないのでしょうか?
MSDNには、失敗時にはうまく開放する、うんぬんといった記述があったようなのですが。
>>857
...
>>857
OSは何?
860デフォルトの名無しさん:04/06/13 20:19
>>859
XP Professionalです。
861デフォルトの名無しさん:04/06/13 22:32
え〜と、別スレですれ違いとのご指摘を受けてしまったので、
こちらで質問させてください。

ダイアログベースでウインドウを作っているのですが、
もうひとつのダイアログを呼び出すにはどうしたらいいのでしょう?

それと、ボタン押下でアプリケーションを終了させるときは、
DestroyWindowでよいのでしょうか?
リソースビューのツリーで右クリック→挿入→Dialog
ダイアログをダブルクリック→ClassWizard→好きな名前つける
ダイアログを呼び出したいクラスで作ったダイアログクラスを宣言
表示したい場所でDoModal
モーダルじゃないダイアログを呼び出したければ
メンバで宣言して適当にCreateしてShowWindowで呼び出す
863デフォルトの名無しさん:04/06/13 22:48
>>861
>アプリケーションを終了させるときは

PostQuitMessage
864デフォルトの名無しさん:04/06/13 23:37
>>862,863
どうもありがとうございます!
助かりました!
865デフォルトの名無しさん:04/06/14 22:48
ダイアログボックスから、
ボタン押したらもう一個ダイアログが立ち上がるアプリケーション
作ってるんですけど、
ダイアログが起動した時に、一度だけ行いたい処理があるんですが、
どうやったら実現できますか?

Activateのメッセージを使ってみたんですけど、
Activeになるたびに処理が走るので、これじゃ駄目だな。と。
VBで言うところの、FormLoadや、Initみたいなものってないでしょうか?
>>865
OnInitDialog()
867デフォルトの名無しさん:04/06/14 23:34
お〜。
もう一個の方にもハンドリングできたんですね。
まぁ、当たり前っちゃ当たり前ですね。

あと、最後に一個だけお願いします。
ダイアログボックスで、escキーを押すとウインドウが閉じてしまいますが、
これを無効にするにはどうしたらいいですか?
>>867
PreTranslateMessageあたりを使ってEscキーだったらTranslateを中止するのが無難。
具体的なやり方はぐぐれば出てくるかと。
他には、OnCancel()を自前で処理してCDialog::OnCancel()しないようにする手もあるが、
その場合はEscキー以外の手段でも(例えばAlt+F4)終了できなくなるので要注意。
#勿論OnOK()はできる。
870デフォルトの名無しさん:04/06/15 21:54
>>868
>>869
そうか!このページがあったんだ!
ありがとうございます!
871デフォルトの名無しさん:04/06/15 22:14
void W(CString &str)
{
str = TEXT("Hello"); //ここで例外
}
みたいな関数を呼んだ場合、同じEXE内の関数だったらOKだけど
DLLの関数を呼んだ時、例外になるんですけど何故だか分かりますか??
ちなみに、EXEの方をデバッグ版でMFC共有DLLでビルドした時だけ
動きました。
他は例外になります。
まず引数が正常かどうか、とCStringのソース追う
>>871
根本的にCStringの使い方を間違えている。クラスとして作られていて機能を
与えられているところがどうなのかをちょっと考えてみた方が良い。
874デフォルトの名無しさん:04/06/16 00:05
ListBoxコントロールって、MS Pゴシックで表示されてしまいますよね?
これって、外観を変えることできないのですか?
プロパティみてもそれらしいものはないし・・・。
>>874
どこから言っていいのかわからんが、CWndの使い方覚えれ。
派生クラスはわかってるだろ?
SetFont
それ以前の問題かと
878デフォルトの名無しさん:04/06/16 06:56
CImageクラスを使用しています。
イメージをJpeg形式で保存したいのですが、圧縮率が変えられません。
Imageクラスなら変えられるんですが、DIBじゃないので困っております。
CImageでエンコードの設定ってできないですか?
どなたかお助けを・・・
879デフォルトの名無しさん:04/06/16 10:36
VCでソフト作ってて疑問に思ったんだけど
メニューで

新規作成(N)
開く(O)...

のように、ショートカットキーの後ろに
...
が付くものと、付かないものとあるんだけど
これってどういう意味があるんですか?
メニューから 直に実行 と ダイアログを経由して実行 の違い
>>880
これってトリビアになりませんか?
常識的に知っている
そう作れというガイドラインがあるわけで
こんなことも知らねーとわ、情けなくって父ちゃん涙が出てくらあ
884デフォルトの名無しさん:04/06/16 14:10
質問です。

自作メッセージを識別するためにウインドウメッセージでは WM_USER
+独自番号のような形で使用すると思いますが
自作コントロールにおいて、コマンドメッセージを作りたい場合に
コマンドメッセージのユーザー定義初期番号のようなものはありますでしょうか?
コマンドメッセージ?
886デフォルトの名無しさん:04/06/16 14:27
>>885
勝手な日本語ですいません。
正確に言うとWM_COMMANDで通知があったときの
WPARAMのHIWORDの値のことです。
例えば、ListBoxコントロールだと選択の変更が発生すると
WM_COMMANDメッセージのWPARAMのHIWORDにLBN_SELCHANGEが入ってくると思います。
独自コントロールで通知をしたい時に、LBN_USERNOTIFYのようなことをする必要が出てきます。
この番号を勝手につけてしまって良いのかどうか?ということです。
もし、WM_USERのように独自定義したければこの番号以降を使えというようなものがあるので
有れば、それを教えていただきたいと思いまして・・・
>>886
MFCだとすでに決まってるものもいくつかあるので、変な数値使うと問題あり。
WM_USERに相当するものは残念ながら知らないけど、
普通にやってれば重複したのは注意してくれるから問題ないんじゃない?
ていうか、LBN_〜とかって、NotifyメッセージのIDじゃん。
Notifyだとウィンドウのidとかと組み合わせて重複しないようになるから
ウィンドウクラスが違ってると同じ値使ってる場合もあるね。
888デフォルトの名無しさん:04/06/16 16:18
よく、範囲指定の際に、破線の囲いが出てきますけど、
MFCでそれを実現したいのです。
そこで、前回描画した線を消すにはどうしたら良いでしょうか?
一番いいのは、XORで線が描画できると良いのですが・・・
>>887
返答ありがとう御座います。
MFCのCCheckListBoxで、独自につけているくだり(CLBN_CHKCHANGE)
があったのでここの値は重複しないように勝手につけて良いと勝手に解釈
することにしました
890デフォルトの名無しさん:04/06/16 17:00
>>888
CDC::DrawFocusRect
891888:04/06/16 17:17
>>890
今ちょっと、SetROP2でも試してみたんですが、
DrawFocusRectの方が断然イイです!
感謝感激!
駄問ですみません。現在 .NET 2003 使ってるんですが
ClassWizardはどうやって表示させるんでしょうか?
キーワード検索してみると、「ClassWizard の使い方」の中に
"ClassWizard ([表示] メニューの [ClassWizard] を選択) "って
あるんだけど、どこにもないんですが・・・。
ClassWizardつかえるのはWizardで作ったClassだけ
894デフォルトの名無しさん:04/06/16 19:33
895884:04/06/16 20:07
>>894

今まで結構色々ソフト開発してきましたけど
ずっとWM_USERを使ってました
紛らわしいなぁMS
896デフォルトの名無しさん:04/06/16 20:27
MFCで新規クラス追加するときって基本クラスなし
ではつくれないのでしょうか?
897デフォルトの名無しさん:04/06/16 20:38
>>896
「一般C++クラス」でできるじゃん
つーか、それ以前にWizardの類を無視して
勝手にclass書けばいいだけの話
898デフォルトの名無しさん:04/06/16 20:40
MFC自体にだってCObjectから派生してないクラスとかごまんとあるし
MFCに5万もクラスがあったとは・・・
900デフォルトの名無しさん:04/06/16 21:13
一般C++クラスってどこにあります?
901デフォルトの名無しさん:04/06/16 21:24
クラスビューから右クリックで[追加]

・・・ここまで面倒みてやるのは本来なら有料
今日は妙に機嫌が良いがこれが限度
質問なのですが…
CTreeCtrlで全てのルートのアイテムを取得するにはどうすればよいでしょうか?
CTreeCtrl::GetNextItem()で取得できそうなのですがどうしてもうまくいきません。
どなたかご存知でしたらご教授お願いいたします。

以下、参考にしたマイクロソフトのサンプルをです。
HTREEITEM hCurrent = pCtrl->GetNextItem(TVI_ROOT, TVGN_NEXT);
↑の箇所で失敗してしまいます…
[sample]-------------------------------------------------------------
CTreeCtrl* pCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE1);
HTREEITEM hCurrent = pCtrl->GetNextItem(TVI_ROOT, TVGN_NEXT);
while (hCurrent != NULL)
{
 // 何らかの処理
hCurrent = pCtrl->GetNextItem(hCurrent, TVGN_NEXT);
}
903デフォルトの名無しさん:04/06/16 21:35
追加っていうのがないんですが
右クリックすると クラスの新規作成はあるのですが
基本クラスを選ばなければ追加できないのですが
MFCって何ですか?
>>895
同意

>>894
ありがと
906デフォルトの名無しさん:04/06/16 21:55
>>904
コンビニで売ってるやつか?
>>904
Microsoft Foregroud Constructionの略。
使いやすさを全面的に出してプログラミングにおける
プログラマの負担を軽くしようという発想から
開発されたらしい。今ではMFCも肥大化してしまったけどね。
                |
                |
                |
                |
     /V\       J
    /◎;;;,;,,,,ヽ     >>907
 _ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'
あぁ、釣りだったのかマジレスしそうだった。
さり気無くスペル間違えてる辺りとか高度だなw
910デフォルトの名無しさん:04/06/18 02:51
ActiveXの取り込みを行って、MSFlexGridを使ってるのですが、
セルの自動幅調整はどうやって行ったらよいのでしょうか?
911デフォルトの名無しさん:04/06/19 01:48
>>910
ちと難しいな。
試してみたが、うまくフォントのサイズがとれなかった。
わかるひとフォロープリーズ
912デフォルトの名無しさん:04/06/19 14:33
SDIで簡単なペイントソフトを作っています。マウスで矩形を描いたりできるのですがマウスを動かすたびに再描画しているので画面がひどくちらつきます。
なんとか解決したいのですが、どうすればいいでしょうか?
>>910
MSFlexGridはよくわからないのだが、姉妹品(おねえさん?)
のvsFlexGridには列をパラメータにしてAutoSizeという
メソッドがあったが。。。
>>912
ラバーバンディングで検索汁!
>>912
再描画時の背景消去が原因

>>915
再描画時に背景消去をさせないにはどうすればいいですか?
>>916
OnEraseBkgnd をオーバーライドしる!
>>916
InvalidateRect(NULL,FALSE);
2番目の引数をFALSEで背景消去抑制
>>911
フォントサイズをとる方法なら
MSFlexGrid.GetCellFontSize
で各セルのフォントのサイズが取れる
viewからMainFrameのポインタを取得するにはどうすればいいですか?
921デフォルトの名無しさん:04/06/19 17:31
>>912
CRectTracker
>>920
AfxGetMainWnd
923デフォルトの名無しさん:04/06/19 18:59
SDIにスクロールバーをつけたいのですが最初のAppWizardとかで設定しておかないとだめですか?
そんなことないよ〜
>>923
あ、簡単なペイントソフト作ってる人じゃないか?
>>923
新規プロジェクトでCScrollViewにして作成して
今のCViewプロジェクトと変化している部分を変えたり追加するのが
一番簡単
気をつけるのは、基底クラスを呼び出している部分とか
メッセージマップの基底クラス部分とかね
C++.net使用しています。
質問なんですが
for(int i=0; ...
みたいにiを定義すると標準C++ではfor文のブロック内のみが
スコープになると思うのですが、.netだと外側からも見えるようです。
これを標準C++仕様にするにはどうしたらいいのでしょうか?
forの外にも定義しておく
929デフォルトの名無しさん:04/06/19 23:11
>>927
#define for if(false) else for
>>927
そうそうfor文のスコープはなにかがおかしい。オレもこれではまったことがある。
for( int i=0; ...) {statementA}
for( int i=0; ...) {statementB}
ってやると、statementBにAのiが影響していた。詳しく調べなかったのでこれ以上のことは判らない。
>>930
詳しく調べてくれ、気になる・・・
後のfor文のi=0の初期化は無視か?
932デフォルトの名無しさん:04/06/19 23:28
/Zc
{
 for(int i=0;...){ }
}

コンパイルオプションでも直せるらしいけど、
それはそれで不都合があるらしいので、
こうするといいよ。
934デフォルトの名無しさん:04/06/20 00:04
MFC でwebブラウザつくりたいのですが
わかりやすく載ってるサイトとかないですか?
おかしいと思ったら、曖昧な記述じゃなくて、
はっきりコーディングレベルで明快に書けばいいのに。。。
なんで、そんなに書き方にこだわるんだろう。
936デフォルトの名無しさん:04/06/20 00:08
>>935
んだな
組み込み用のクロスとかローカルルール満載の処理系はよくある
割り切らねーと仕事にならん

int i=1;
for(int i=0;;){break;}
std::cout << i; // iは0

二重定義でエラーにはならないけど
同一のiを意味するという・・・なんとも不可思議だ
938サザエサング:04/06/20 00:24
>>934
マジレスすると、ウィザードで基本のビュークラスを
CHtmlViewにしてスケルトンを作ったら、
すぐにビルドして実行しろ。
それでブラウザは完成だ。
939デフォルトの名無しさん:04/06/20 00:26
>>938
せめてアドレスバーつけたいんですけど
>>939
じゃ、ダイアログバーにコンボボックスあたりつければOK
941デフォルトの名無しさん:04/06/20 20:09
あらかじめ用意されているDLLを、
自分のプロジェクトで参照して、DLLの関数を使用したいのですが、
どうしたらよいでしょうか?

プロジェクト設定のリンクにDLL名を入れたのですが、
ファイルが無効か壊れているってメッセージがでてしまうので、
やり方が間違っているようなのですが、
どうやって参照させたらよいでしょうか?
942デフォルトの名無しさん:04/06/20 20:16
>>941
インポートライブラリ
>>941
DLLの使い方は、起動時に自動的にロードして使うやり方と自分でロードして使うやり方がある。
起動時にロードするためには、DLLと一緒に配布されているlibファイル
を実行ファイルにリンクしないといけない
もしDLLにlibファイルがついていないならば、自分でロードして使えということだろう
その方法についてはLoadLibraryというAPIを調べてみればよい
944デフォルトの名無しさん:04/06/21 01:57
> プロジェクト設定のリンクにDLL名
・・・LIB名(拡張子=.lib)

持ってない場合
A.>>943 の方法
B.DLLの提供元にねだる
C.DLLの作り損ない
SP6にしてからリソースエディタでダイアログのサイズをドラッグして変更
しようとしても、輪郭のところをマウスで掴めなくなってしまったのですが
どうしたらマウスで掴めるようになるでしょうか。
ShiftKey+矢印Keyで一応サイズ変更はできるのですが、いったい何が
どうなっているのか・・・
946デフォルトの名無しさん:04/06/21 23:29
ダイアログフォームを最大化した時に、
ListBoxやTabコントロールも一緒にリサイズさせたいのですが、
GetClientRectでフォームのサイズをとったあと、
どうやって設定させたらよいでしょうか?
SetClientRectってないし・・・
movewindow
948デフォルトの名無しさん:04/06/21 23:48
>>947
OnSizeでは、CX,CYしか取れないのですが、
MoveWindowを使うときにはX,Yも必要らしいのですが、
X,Yはどうやってとったら良いでしょうか?
自分で計算しろ
>>946
まともなリサイズ処理ははそれなりに複雑だよ
codeguruとかcodeprojectで、resizable dialogの
言葉に引っかかりそうなソースを読んでみたら?
GetWindowRect、GetClientRect、ScreenToClient
この辺の意味をちゃんと理解しておれば、リサイズなんて怖くねーべ。
私ゃCodeGuruで見つけたResizerってのをベースに使ってるよ。
953829:04/06/22 03:43
WTLだと一発なのにね
954950:04/06/22 09:31
>>951
単純な拡大縮小ならそれほどでもないけど
コントロール同士の関係を含めてのリサイズの場合結構複雑になるよ
946がどこまで求めているかは知らないけれど
955デフォルトの名無しさん:04/06/22 16:03
CListを入れ子にして使ったら
c:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include\afxtempl.h(1159): error C2582: 'operator '=' 関数を 'MDB' で使用できません。
と言われました
CListから生成したオブジェクトの中でCListを使うことはできないのでしょうか?
以下のような感じでソースをかいてみました
956955:04/06/22 16:04
typedef struct Seqnoinfo{
int Seqno;
int Rcvsize;
int Type;
}Seqnoinfo;

typedef struct MDB{
int No;
int Done;
CList<Seqnoinfo> Silist;
int Mtopaddr;
int Msize;
int Rcvsize;
}MDB;

957955:04/06/22 16:04
class CMemBuf
{
public:
CMemBuf(void);
~CMemBuf(void);
int Send(void);
int Run(int startaddr);
int Add(CCmdBuf&CmdBuf);
int Getcmdlen(DWORD cmd);
char* Getcmdname(DWORD cmd);
void Clear(void);
void Reset(void);
DWORD* TmpBuf;
DWORD* SendBuf;
int BufN;
int Maddr;
int Up;
CList<MDB,MDB&> MDBlist;
};
958955:04/06/22 16:05
何かアドバイスなどありましたらご教授お願いします
MDB構造体に
operator=を定義して
CList間の=を明確化してあげればいい
960955:04/06/22 20:45
ありがとうございます。
うまく出来ました
961デフォルトの名無しさん:04/06/22 21:41
>>950-954
どもです。
コントロールを含めてのリサイズだったので、結構参りましたが、
なんとかなりました。
情報ありがとうございます。
962955:04/06/23 01:48
>>959
ありがとうございました。

>>960,961
どなた?
すみません、VC++.Net2003でソリューションのmakefileをエクスポートしたいんですがどうすればよいですか?
964デフォルトの名無しさん
CStringの文字を数値に変換するのにatoiを使ってるのですが、
これの例外って、どうやって取ったらよいでしょうか?