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

このエントリーをはてなブックマークに追加
1的場フミオ
             / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ∧_∧   <  MFCなんかやってないで
     ( ´_ゝ`)   \ おまいら全員TCKに集合
    /::☆::::☆::\   \___________
   /:/\:::::☆::/ ̄\
 _| ̄ ̄ \☆/  ヽ \_
 \ ̄ ̄ ̄ ̄ ̄ ̄ \__)
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
■ 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
2デフォルトの名無しさん:03/03/18 10:19
CListCtrl系のDrag&Dropについて参考になるサイトを教えて下さい。

Googleで引っかからん・・・
3デフォルトの名無しさん:03/03/18 10:43
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

http://www5b.biglobe.ne.jp/~ryo-kyo/osu.html

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
4デフォルトの名無しさん:03/03/18 14:35
禁煙パピコ
5おまいら!:03/03/18 14:37
CStringからconst WCHAR*型に変換する方法を教えてくれ。すぐ教えてくれ。
65:03/03/18 14:38

いや、まじでお願いします。
7デフォルトの名無しさん:03/03/18 14:41
MFCでWebブラウザコントロールを用いてそれを印刷したい場合、
// Verify the Web Browser control is valid.
LPDISPATCH lpDispApp = m_web_view1.GetApplication();
if(lpDispApp)
{
// Get the HTMLDocument interface.
LPDISPATCH lpDispDoc = m_web_view1.GetDocument();
if (lpDispDoc != NULL)
{
// Get the IOleCommandTarget interface so that we can dispatch the command.
LPOLECOMMANDTARGET lpTarget = NULL;
if (SUCCEEDED(lpDispDoc->QueryInterface(IID_IOleCommandTarget,(LPVOID*) &lpTarget)))
{
// Execute the print preview command. The control will handle the print preview GUI.
// OLECMDID_PRINTPREVIEW is defined in "docobj.h".
lpTarget->Exec(NULL, OLECMDID_PRINTPREVIEW, 0, NULL, NULL);
lpTarget->Release();
}
lpDispDoc->Release();
}
lpDispApp->Release();
}
みたいなコードで出来ますが、URLが印刷されちゃいますよね。
それを隠す方法があれば、ご教授ください

よろしくお願いします
>>6
GetBuffer()
MultiByteToWideChar()
95:03/03/18 14:54
あったYO!

http://www.codeguru.com/mfc/comments/27238.shtml より。

CString temp = "Test.jpg";
WCHAR* filename = new WCHAR[temp.GetLength()+1];
mbstowcs(filename, temp, temp.GetLength()+1);
Image image(filename);
delete filename;


105:03/03/18 14:55
>>8
サンクス。それも試してみるっす。
11デフォルトの名無しさん :03/03/18 19:40
void CPgmDoc::Serialize(CArchive& ar)
の中で
int max = 255;
int H = 640; int V=480;
ar.Write("P5\n",3);
ar.Write(&H ,1);
ar.Write("" ,1);
ar.Write(&V ,1);
ar.Write("\n" ,1);
ar.Write(&max,1);
ar.Write("\n" ,1);
ar.Write(image_data, H*V);
って書き込んだら、ファイルに
P5\n
640 480\n
255\n
data[0]data[1]...
って書き込まれますか?

>>11
試 せ ば い い だ ろ ?
1311:03/03/18 20:16
ダメなのですが、
変数をファイルのストリームに書き込む方法は
どうすればいいでしょうか?
>>13
MFCのシリアライズはバイナリーファイルになる。
if (ar.IsStoring()){
 // TODO: この位置に保存用のコードを追加してください。
 CString str = "P5" ;
 ar << str ;
 ar << h ;
 ar << v ;
}else{
 // TODO: この位置に読み込み用のコードを追加してください。
 CString str ;
 ar >> str ;
 ar >> h ;
 ar >> v ;
}
こんなかんじにしろ。文字列はCStringな
テキスト出力にするならSerializeは使わないほうが楽
1511:03/03/18 21:17
>>14
hとかの変数の値が入らないのですが・・・。
16デフォルトの名無しさん:03/03/18 21:39
オブジェクトの挿入とかの「Microsoft Excel ワークシート」みたいな文字列を
ID から取得する方法はありますか?
17名無し~3.EXE:03/03/18 21:59
Cに関する雑談のできるIRCチャンネルはありませんか?
18:03/03/18 22:21
誰か教えてよ・・・>>2
>>15
どんなコード書いたんだ?
22デフォルトの名無しさん:03/03/19 00:09
誰も7の疑問わからないのか?
答えてやれよ
>>22 == >>7
24デフォルトの名無しさん:03/03/19 02:51
レジストリに関連付けの変更や定義アイコンの変更を施した後、
実際にデスクトップ上のアイコンにも適用を施す処理ってありますか?

どうもそのままだと、アイコンが更新されないのですが・・・
すいませんが教えてください
>>24
SHChangeNotify( SHCNE_ASSOCCHANGED, ... );
これ何だろ?
ダイアログベースアプリ終了時に出力ウィンドウに出て来るんだが・・・
子ウィンドウのモードレスダイアログがあるからその関係かな・・・

Warning: calling DestroyWindow in CDialog::~CDialog --
OnDestroy or PostNcDestroy in derived class will not be called.
自己レスだけど、メッセージそのままの意味だった。
親ウィンドウのOnDestroyで、明示的に子ウィンドウをDestroyWindow
してやると消えた。

つーか明示的に破棄すんのが普通だわな。確かに俺が悪かった。
意図しないデストラクションとか起こったときのために、これwarningで報告するんだね。
今日は.netくんにメモリリーク報告してもらったし。いつもありがとう.netくん。
28デフォルトの名無しさん:03/03/19 15:03
>>7

ええとね、たしかあったと思うよ
プリントアウト結果に表示されるURLを消すんだよね?
うーーんと、失念してしまった

ちょっと覚えている方、ヘルプよろしく!
>>7
IEのページ設定のヘッダー・フッターどうかするんじゃないの
自分のプログラムだけなら一時的にそのへんのレジストリいじるとか
30デフォルトの名無しさん:03/03/20 17:54
MDIでプログラミングをしたいんだけど、
子ウィンドウを複数種類作りたいんです。
デフォルト以外の子ウィンドウを足すにはどうすればよいでしょうか?
参考になるサイトか方法を教えてください。
31デフォルトの名無しさん:03/03/20 17:56
まずは本買いなさい。
話はそれからだ。
32デフォルトの名無しさん:03/03/20 19:20
ふつーそんなこと書いてませんよ。
3332:03/03/20 20:43
本当にどう書けばいいのでしょう?
VC++のように、ソース、リソースダイアログ etc.
のようにしたいのですが。
34デフォルトの名無しさん:03/03/20 21:37
このスレッドで消化されていない7の質問
誰もわかるやついねえのか?
そろそろ教えてあげなよ
>>32
ハァ?(顔文字略

>>34
正直、知らん。
>>30
前スレを読めと。
37デフォルトの名無しさん:03/03/22 11:18
CListCtrlをレポートビューで使っています。
コラムの幅より長い文字列をInsertItemすると略されて「hogehoge...」
と表示されますよね。これを全て表示するようにする方法はありますでしょうか。


>>37
コラムの幅を増やせば良いとおもうが...。
自分で計算するのがめんどかったら
ListView_SetColumnWidthでLVSCW_AUTOSIZE
CTreeCtrlでCImageListで画像を関連づけて
その画像を表示することはできるのですが
画像の背景の色を透過できないんですが
どうすればできるでしょうか?

CImageListの方でSetBkColor(CLR_NONE)あたりを使うと思うのですが
マスクを使うというのがいまいちよく分かりません
41デフォルトの名無しさん:03/03/22 21:21
MFCの仕事はまだあるんですか?
これからもあるんですか?
42デフォルトの名無しさん:03/03/22 21:23
>>41
部長に聞け。
>>41学生でつ。
先生はパーでわかってません。
4443 == 41:03/03/22 22:18
>>41は学生という意味です。
部長いません。
パソコン部長ですがなにか?
46質問:03/03/23 12:06
すいません質問です。
PlatformSDKの最新をインストールして、新たにMFCアプリを作ろうとしてビルドしたところ、
意味不明なエラーが出てきました。

↓エラー
「d:\microsoft sdk\include\exdisp.h(1119) : error C2061: 構文エラー : 識別子 'SHANDLE_PTR' がシンタックスエラーを起こしました。」

これってどうやれば解決できるのですかね?
だいたいその'SHANDLE_PTR' というのが何なのかがわかりません。

PlatformSDKを入れる前は、問題なくMFCアプリがビルドできていました。

開発環境はVC++6、WinXPPROです。
だれかご存知な方はいますでしょうか?
MFCアプリ(ダイアログベース)を作ってるんですが、
エンターキーを押すとアプリが終了してしまいます。
終了しないようにするにはどうやったらいいのでしょうか?
>>47
PreTranslateMessageでキーをトラップしてreturn false;
ちなみにESCキーでも同じ現象が起こる
4947:03/03/23 23:52
できました。ありがとうございました。
>>49
ただそれだとtabによる移動や
改行許可のエディットボックスが上手く動かなくなるはずだから
↓みたいな感じで書くといいかも

BOOL CMainDialog::PreTranslateMessage(MSG* pMsg)
{
 switch(pMsg->message){
 case WM_KEYDOWN:
  switch(pMsg->wParam){
  case VK_RETURN:
   const CEdit* pcEdit;
   pcEdit = dynamic_cast<const CEdit* >(this->GetFocus());

   if(!pcEdit || !(pcEdit->GetStyle() & ES_AUTOVSCROLL))
    return TRUE;

   break;
  }

  break;
 }

 return CDialog::PreTranslateMessage(pMsg);
}
>>ただそれだとtabによる移動や
おっとこれは大丈夫だね
52デフォルトの名無しさん:03/03/24 00:07
すいません。MDIの新規作成の子ウィンドウの追加の方法はわかったのですが、
VC++がツリーをクリックすれば、子ウィンドウを作るように
メニュー以外で必要なダイアログを必要な情報(ファイル)を足して
子ウィンドウを作るにはどうすればいいのでしょうか?
>48-52
void CHogeDlg::OnOk()
{
//do nothing
}

の方がよくね?簡単だし。 ま、解決してるならいいか。
× void CHogeDlg::OnOk()
○ void CHogeDlg::OnOK()
>>53
DoModal()で作るならそれでいいけど
Create()で作る場合もあると考えるとPreTranslateMessage()を使う方がいい
Create()で作った場合はOnOK()使わんし
CreateでもOnOKでdo nothingには変わりないと思うが
ん? あれれ? Create()で作った場合ってOnOK()にメッセージdできたっけ?

飛んでこなかったから私はPreTranslateMessage()を使い始めたような・・・
以前はOnOK()のデフォルト処理をコメントアウトしてたけど
>MFCアプリ(ダイアログベース)を作ってるんですが、
OnOKに一票
>>52
質問が意味不明でわかりにくい。
何がわからないのかちゃんと書かないと?
CDocTemplate::OpenDocumentFileのことか?
>>55 >>57
モードレスでも OnOK呼ばれる。IDOKボタンがなくても呼ばれる。
6152:03/03/24 18:13
>>59
VCは、ツリーのダイアログバーをクリックすると、子ウィンドウが新規に作成されるじゃないですか。
で、必要に応じて、対応しているファイルを開いてエディットに表示するじゃないですか。
それから、メニューバーのファイル から、ワークスペースを閉じる で子ウィンドウを
終了できるじゃないですか。
そのような仕組みはどのようにすればいいのかな?
と質問しました。
わかりにくくてごめんなさい。
※急募!※
MFCのドキュメント・ビューアーキテクチャーにIShellBrowserをぶっこむ方法を知ってる人
63デフォルトの名無しさん:03/03/24 20:16
VC++/MFCは、UNICODEを簡単にASCIIというかSJISに変える方法も無いんで鹿?
>>61
MSDNに載ってる
6552:03/03/24 21:07
>64
どの項目をみればいいんでしょうか。
>>63
W2Aとかいうマクロがある
67デフォルトの名無しさん:03/03/24 22:32
>>66
なんか、定義されてないってコンパイルエラーだけど。
>>61
CMultiDocTemplate::OpenDocumentFile()でファイルが開けるんじゃないの?
子ウィンドウが閉じたかったら、アクティブなフレームにPostMessage(WM_CLOSE)

とりあえず『MFCアンサーブック』でも立ち読みしてくれ。
>>67
AFXPRIV.Hインクルード
70前スレの985:03/03/25 00:32
前スレの985ですが、思い出したので追記しておきます。
CDocTemplate::OpenDocumentFile(NULL) だと
ビューに加えてドキュメントも作成されてしまうので、
ドキュメントとビューの関係が 1 対 多 ではなく 多 対 多 になってしまっていました。
CDocTemplate::CreateNewFrame() と CDocTemplate::CreateNewDocument()
を分けて使うことで今度こそ期待通りの動作をするようになりました。

が、[ウインドウ | 新しいウインドウを開く] で新しいウインドウを開いた時と同じように、
ウインドウのキャプションに :1 とか :2 が付くようになってしまいました。
まぁこっちはそのうち何とかできればいいなぁと思ってます。

>>61
この発言が参考にはなりませんか?
また全てのウインドウを閉じるのは CloseAllDocument() というのがあります。
71デフォルトの名無しさん:03/03/25 09:10
ちょっと、変なこと聞くかも知れないんだけど、
コンボボックスとかリストボックスってデータの数が増えても対応するじゃん。
で、配列を動的に宣言して増やしてるんだと思うんだけど、
どうやってそういうのをかきゃいんですか?
有難うございました。>>69

ATLかMFCのバージョン違いみたいで、自分のバージョンでは、
CString str = CString(bstr);strcpy(cBuf, str);
みたいな感じになりましたが。
73デフォルトの名無しさん:03/03/25 10:17
UNICODE文字列の配列宣言教えてください。
>>71
CArray

>>73
WCHAR* aa[100];
7552:03/03/25 12:43
>>70
助言ありがとうございます。
騒がせながら、CMainFrame のなかで、Create()で作れました。
しかし、子ウィンドウを操作するに当たり、
子ウィンドウの持っている変数に値を代入したり
する方法がわかりません。MDIGetActive()ではアクティブな
ものしか取得できませんし。
何かご存じないですか?

76デフォルトの名無しさん:03/03/25 13:48
動的に作られたCEditにスクロールバーをつけたいんですが
どうしたらいいでしょうか?
ModifyStyle, ModifyStyleEx のとちらも試しましたがだめです、、。
77デフォルトの名無しさん:03/03/25 14:31
ListCtrl を派生させて色々作ってるんだけど
あるセルの値が変わった時に例えば1秒間
表示色を変えよう、と思ったらどういう手段がありますか?

全然思いつかないんだが・・・
>>77
タイマー使えばいいんじゃないの?
>>76
>ModifyStyle, ModifyStyleEx のとちらも試しましたがだめです
どんなスタイルを設定してダメだったか書けよ。
Createするときにちゃんと ES_ 系のスタイルを指定したか?
WS_HSCROLL や WS_VSCROLL を忘れてないか?
80デフォルトの名無しさん:03/03/26 03:14
>>79
コントロールをCreateしているソースの個所は私が見ることができないのでわかりません。
が、一旦作成されたCEditに対して、
ModifyStyleEX( 0, WS_HSCROLL|WS_VSCROLL)
を呼んでもスクロールバーがつかないというのはどういうことなのでしょうか?
m_edit.ModifyStyleEX( 0, WS_HSCROLL|WS_VSCROLL);
^^^^^^^
↑これが無いってオチじゃないよね
82デフォルトの名無しさん:03/03/26 03:42
>>81
m_zEdit.ModifyStyleEX( 0, WS_HSCROLL|WS_VSCROLL);
ってコールしてます。
むぅ。。。
>>82
>>79も書いてるけどES_ 系のスタイルは指定してんの?ES_MULTILINEとか。
>>82
m_zEdit.ModifyStyle(0, WS_HSCROLL | WS_VSCROLL, SWP_DRAWFRAME);
85デフォルトの名無しさん:03/03/26 07:28
>>84
ありがとうございます。でもだめみたいです。
CEditはリードオンリーモードになっていて、その内容が動的に
変わるようになっています。CEditが貼り付けられているメインダイアログ
のOnInitDialog()内と、テキストの内容を書き換えるごとに

m_zEdit.ModifyStyle(0, WS_HSCROLL | WS_VSCROLL, SWP_DRAWFRAME);

をコールしてみましたがだめです。ユーザの実務上クリティカルな問題なので
何とかしたいと思っています。何かアイデアがありますでしょうか、、、。
86デフォルトの名無しさん:03/03/26 07:45
>>84
あわわ、やっぱりそれで正しかったようです。
ES_AUTO*SCROLLとWS_*SCROLLを混乱していました。おっしゃるように
コーディングしたところ動作しました。ありがとうございました!
まとめ。
m_zEdit.ModifyStyle(0, WS_HSCROLL | WS_VSCROLL, SWP_DRAWFRAME);
SWP_DRAWFRAMEの指定がポイントでした。


87名無し@沢村:03/03/26 07:58
>>62
CHtmlView使え
8862:03/03/26 09:20
>>87
おお!ありがとうございます!
半分あきらめかけていたところでした!
タイムリミット9分前の劇的なレスにちょっとシビれています。

CHtmlViewですか。
さっそく調べてきます。
89デフォルトの名無しさん:03/03/26 18:14
スプリッタつかって縦3分割してるフレームをサイズ変更する際に
デフォルトではスプリッタ自体の位置が変わらないと思うのですが
真中のViewの高さだけを変える方法はありますか?
>>89
スプリッタを入れ子にする。
あ、90は勘違い。
自分で計算してWM_SIZEで変えたら?
スプリッタのsetrowinfoだったかでできなかったっけ?
(うろおぼえ)
93デフォルトの名無しさん:03/03/27 05:33
ファイルダイアログをセーブモードで使っていて、既存のファイルを指定して
保存ボタンが押された場合上書き確認のダイアログを出したいのですが、
フラグか何かでMFCにやってもらう方法はありますでしょうか。
それとも自前で実装するしかないんでしょうか。
>>93
CFileDialog でMSDN見たらそのまんま載っていると思うが。
95デフォルトの名無しさん:03/03/27 09:02
>>94
ありました。OFN_OVERWRITEPROMPTですね。
てめーで調べずにここですぐ聞こうとする癖を改めますです。
96デフォルトの名無しさん:03/03/27 11:30
>>91-92

できますた。ありがとうございませた。
97デフォルトの名無しさん:03/03/27 14:29
CFrameWnd でコントロールバーがDockingした時点を検出する方法はあります?
98デフォルトの名無しさん:03/03/27 14:43
Button1を押してファイル選択ダイアログを出し、そこで取得したパスを
エディットボックスに表示させ、エディットボックスに表示されてる文字を
out.txtに書き出したいのですがうまくいきません。
ダイアログボックスをださずに、エディットボックスに手入力した場合
out.txtに書き出されるのですが、ダイアログボックスを出すと
out.txtファイルさえ作られません。
m_filepathには、きちんとパスが入っています。
どこがおかしいのでしょうか?以下コードです。

void myProjectDlg::OnButton1()
{
CFileDialog dlg(TRUE, "exe", NULL, OFN_FILEMUSTEXIST, "実行ファイル (*.exe)|*.exe|", this);
if(dlg.DoModal() == IDOK){
m_filepath = dlg.GetPathName();
UpdateData(FALSE);
}
}

void myProjectDlg::OnOK()
{
UpdateData(TRUE);
CStdioFilefp("out.txt",CFile::modeCreate | CFile::modeWrite );
fp.WriteString(m_filepath);
fp.Close();
CDialog::OnOK();
}
>>97
自信ないけどCDockBar::DockControlBar(), CDockBar::ReDockControlBar()あたりか、
どちらも仮想関数ではないし、CDockBarを持ってるCMiniDockFrameWndもポインタでは
持っていないのでDockControlBar()などから検出するには書き足さないとむりだな、
CDockBarとCMiniDockFrameWndの派生クラスを作って、、、も、無理か
>>98
CFileDialogで指定したパスにout.txtが作られていると見た。
ファイル選択するときにカレントディレクトリが変わってんじゃない?
>>97
多分、CDockContext::StartDrag()で検出できる。これは仮想関数なので
派生して、オーバーライドすればよいはず。CDockContextを持っている
CControlBarはポインタでCDockContextを持っているので都合はよいが
CDockContextを生成するEnableDocking()が仮想関数で無いのでCToolBar
などを使用する場合には都合が悪い。ただ、EnableDocking()はプログラム中では
明示的に呼び出しているので(普通はCMainFrame::OnCreate())その後で
普通に生成されたCDockContextのCControlBar::m_pDockContextをdeleteして
CDockContextの派生クラスをnewしてm_pDockContextにいれればOKか
102101:03/03/27 15:24
これであってるのかは知らないけどな。
もっと簡単な方法があったらアフォですな。
さびれたねぇ。
たった四時間でか
10598:03/03/28 01:06
>>100 Σ(´Д`ズガガーン
大正解ですた。いたる所にout.txtが!!
これで成仏できます。ありがとう。ありがとう。
>いたる所にout.txt
ワラタ
107デフォルトの名無しさん:03/03/28 19:55
CTreeCtrlの選択されたアイテムのラベルをコンテキストメニューでクリップボードに
コピーできるようにしたいのですが方法がありますでしょうか。
>>107
あります。

ちょっと調べりゃ分かるだろ……
>>105
俺も昔それやった
スタートメニュー→ファイル検索でtest.txt検索したらあちこちのフォルダに保存されてた(w
MFCでアプリケーション作成しているのですが、midiを流す方法がわかりません。
DirectXの知識がないので、APIを使えばできるとか聞いたのですが。
まだWindowsプログラミングは初心者なものでどうしていいか・・・
アドバイスお願いします。
ダイアログベースのピクチャボックスにマウスクリックで線を引きたいんだけど
>>112
引けば?
>>112
何を聞きたいのか分からないんだけど。
入門書でも読んでろ。
115110:03/03/29 02:46
>>111

検索しろ・・・か。
それもそうだな。

じゃ、どうする?死ぬか?
ゴチャゴチャ言わずにサッサト教えろ。
ごめんなさい。もうゴチャゴチャいいません。氏にマス。
>>115
(゚Д゚) ハァ?
>>115
まず検索して、試行錯誤して、詰まってから来い。
、と釣られてみる。
119デフォルトの名無しさん:03/03/30 18:17
MFCのWebブラウザオブジェクトにホームページを表示させて
制御する際に、User-Agentを変更する方法ってありますか?

何がやりたいかというと、バナーページ(HTML)を表示させる際に
履歴が残らないようにしたいのです。

もし、いい代案があれば、ご教授ください
よろしくお願いします
Navigate()で変えられる。
121119:03/03/30 20:11
バナー処理とはまた別の話で、Webブラウザオブジェクトに表示させた
Webページ上から、別のページにリンクした際に、そのURLを
履歴に残さないようにする方法ってありますか?
>>121
キミは検索したのかね。
WebBrowser 履歴で検索したら重要なヒントが出てきたぞ。
ttp://www.microsoft.com/japan/msdn/weeklynews/webteam000825.asp
123119:03/03/31 03:02
>>122
ありがとうございます
そこでかかれているようなコンテンツ側ではなくプログラム側で
制御することはできないでしょうか?

Navigateで表示したページから張られているリンク先も
履歴に加えたくないのです


mciSendStringでmidiを鳴らそうとして、とりあえず1が入力されたらplayになるようにしたのですが鳴りません。
誰か助けてください

#include<stdio.h>
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")

void main()
{
int t=0;

mciSendString("open C:\test.mid alias mcitest",NULL,0,0);

for(;;){

scanf("%d",&t);

if(t==1){
mciSendString("play mcitest",NULL,0,0);
}
else if(t==2){
break;
}

}

mciSendString("close mcitest",NULL,0,0);
exit(0);
}
MFCちゃうやん
せっかくなんで聞くけど
mciSend***でmidi鳴らすときって
ハードで鳴らせればハード、
ない場合はソフトみたいに自動的に選択してくれてるの?

(´-`).。oO(何がせっかくなんだ?)
128124:03/03/31 05:11
MFCを使って、AAAviewクラス(プロジェクト名がAAA)のコンストラクタに
mciSendString("open 'C:\test.mid' alias mcitest",NULL,0,NULL);
mciSendString("play mcitest",NULL,0,NULL);
を書き
デストラクタでクローズするようにしました。
これでもならないのですが・・・
>>124
細かいつっこみはしないが、
mciSendString("open C:\\test.mid alias mcitest",NULL,0,0);
↑のようにすればいい。クラスは関係ない。

130デフォルトの名無しさん:03/03/31 06:04
mciSendString("open C:\test.mid alias mcitest",NULL,0,0);

type sequencer をファイル名のあとに挿入するとか?
『Winwdows 95 API パワフルテクニック大全集』より
131124:03/03/31 06:10
>129

(⊃Д`)ありがとう。できました
>>123
答えそのものが載ってるわけじゃないよ。
そこをヒントにすればプログラム側でも制御できる。
133デフォルトの名無しさん:03/03/31 17:01
>>121
OnBeforeNavigate2のフラグ制御は?

って調べてみたら、このフラグ、未使用なんだね
134デフォルトの名無しさん:03/03/31 19:11
mfcで選んだディレクトリにあるファイルやフォルダの名前やサイズを
全部取得したいんですが、便利な関数無いですかね?
いちおうMSDNで調べてみるとCFindFileというクラスが見つかったのですが、
ファイル名指定しないと行けないみたいなので悩んでいます。
>>134
ワイルドカード使えばええやん
関係ないけど_findfirstと_findnextの方が数倍早くね?
>>136
MFCと混在させるのはよくない
138デフォルトの名無しさん:03/04/01 14:30
CHtmlView上で左クリックを検知して親ウィンドウにイベントを発生させたいのですが、
どのようにして左クリックを検知すればいいのでしょうか?
>>138
過去ログを読めと。
140任意のIE履歴を消す:03/04/01 21:57
unsigned shortwStr[256];
MultiByteToWideChar(
CP_ACP, // ANSI code page
0, // 既定の変換方法
"http://www.microsoft.com", // 変換元文字列
-1, // 変換元文字列サイズ(-1指定で自動計算)
&wStr[0], // 変換先バッファ
256); // 変換先バッファサイズ
CoInitialize(NULL);
IUrlHistoryStg2* pUrlHistoryStg2 = NULL;
HRESULT hr = CoCreateInstance(CLSID_CUrlHistory,
NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg2,
(void**)&pUrlHistoryStg2);
if (SUCCEEDED(hr))
{
hr = pUrlHistoryStg2->ClearHistory();
hr = pUrlHistoryStg2->DeleteUrl((LPCOLESTR)&wStr[0],0);
pUrlHistoryStg2->Release();
}
CoUninitialize();
こんな感じで組みましたがうまく消えてくれません
どこに問題があるかご教授お願いします

本当に使いたいのはDeleteURLです。
試しにClearURLも使ってみましたが、
こちらもうまく機能しません。
(エラーコードは0なのですが・・・)

どなたか教えてください
141デフォルトの名無しさん:03/04/02 10:41
FAQかもしれませんが、IHTMLElement2が未定義と言われてしまいます。
#include <mshtml.h>
してもダメでした。
MSHTML::IHTMLElement2* pIHTMLElement2;
と書いたり、
CComQIPtr<IHTMLDocument2> pIHTMLElement2;
と書いても未定義と言われてしまいます。どうすれば解決できますでしょうか?
環境はWinXP+VC6SP5+IE6SP1です。
142名無し@沢村:03/04/02 12:58
>>141
ヌヒよ、#import "mshtml.idl" でどうだ。
>>141
mshtml.hが古いんじゃないの?
とりあえずGoogleでIHTMLElement2をキーワードに検索することを薦める。
144デフォルトの名無しさん:03/04/02 16:32
だれか>>140に教えてやれよ
せっかくコードまでのせてんだからさ
>>142
ありがとうございます。「.idl」では開けなかったのですが
#import "mshtml.tlb"
と書いたらコンパイル通りましたです。

>>143
ありがとうございます。
IHTMLElement2でググッてはいたのですが、どうも節穴だったようで
上に書いた #import の方法が見つかりましたヽ(´ー`)ノ

>>144
140必死だな
147140:03/04/02 18:26
>>146
わからない香具師は騙っててください。
>>147
回答を得られる可能性を自分で断ったな。
149140:03/04/02 21:43
>>708
お口添えありがとうございます
やっぱり特殊分野なので、さすがにみんなわからないんでしょうね

>>148
147は私ではありません

ちょっとせっぱ詰まっています。
解決できなければ上司におこられます
よろしくお願いします
>>149
怒られてください。

はい次↓
708は向こうのスレの「協力者」だな。
708てものすごいあからさまなコピペに笑った
スゲェよ!>>149!
あんた最高のネタ野郎だ!!
相互リンク
IEコンポーネントを使い倒すスレ
http://pc2.2ch.net/test/read.cgi/tech/982930049/l50
まぁ>>140のどこがMFCと関係あるのかという根本的な問題があるわけだが
つーか、>>7==>>22もだよな。
仕事で詰まったら全部他人にやらせるつもりか。
157デフォルトの名無しさん:03/04/03 15:00
まあまあ、みんな相談室の原点に戻ってさ、
140の質問も勉強だと思って、消化していこうよ
すでに「スレ違い」ということで消化されている罠。
c++でiso-2022-jpをデコードできるサンプルありませんか?
JIS>Unicodeの変換の例ならRougewaveのドキュメントが京大の鯖に転がってるが
だからMFCと何の関係があるのかと・・・
システムメニューのサブメニューにチェックを入れたいのですが
Debug Assertion Failed! とVCに怒られてしまいます。
サブメニューは CMainFrame::OnCreate 内で

CMenu mMenu;
mMenu.LoadMenu(IDR_SUBMENU);
pSysMenu->InsertMenu(4,MF_BYPOSITION|MF_POPUP, (UINT)mMenu.m_hMenu , _T("サブメニュー"));

のように作って表示もちゃんとされています。
ただ、CMainFrame::OnSysCommand で

nID = LOWORD ( nID ) & 0xFFF0;
if ( nID == ID_SUBMENUITEM )
{
  CMenu* pSysMenu = GetSystemMenu(FALSE);
  pSysMenu->GetSubMenu(4)->CheckMenuItem(nID, MF_CHECKED | MF_BYCOMMAND);
}

と呼ぶとダメなようです。
どのあたりが問題でしょうか?
163162:03/04/03 17:18
すみません。質問なのでage升
164162:03/04/03 18:10
OnCreate内のCMenuをグローバルで持たせたら解決しました。
首吊ってきます…
せめてメンバ変数に汁
166162:03/04/03 22:20
あ、メンバ変数にしてました。ひよっこで申し訳ないです。
167デフォルトの名無しさん:03/04/04 17:23
ドラッグ中にマウスのポインタを変えるにはどうすればいいですか?

ドラッグは検知できているとして
169デフォルトの名無しさん:03/04/05 19:08
突然で申し訳ありません。前も似たものをかきこしたのですが、
MDIで開く を自前で実装するにはどうすればいいのですか?
(実際はファイルが決まっているのでダイアログを表示しないでいいのですが)
ご存じであれば教えてください。お願いします。
170デフォルトの名無しさん:03/04/05 19:17
VISUALSTUDIO.NETっていくらするの?
171169:03/04/05 19:17
ものによってです。アカデミックの3万ぐらいから上は30万ぐらいまで。
172169:03/04/05 19:18
>>170
ものによってです。アカデミックの3万ぐらいから上は30万ぐらいまで。
174デフォルトの名無しさん:03/04/07 10:24
thread の中で、this ポインタを引き継いでって
SetWindowTextとはなら成功するんですが...
UpdateData が必ず 「Debug Assertion Failed!」って
失敗してしまうんですが、
そういう仕様なんでしょうか?
175デフォルトの名無しさん:03/04/07 11:13
VC++.NETにもMFCはあるの?
>>174
多分、SetWindowText()はウインドウメッセージを送るだけの処理なので
HWNDを生成したスレッドでなくても大丈夫で、
UpdateData()は普通のメンバー関数なので、別のスレッドから
呼び出せないようにASSERT()いれてあるんだと思う
>>174
仕様です。

>>175
あります。
178デフォルトの名無しさん:03/04/07 21:10
CListCtrlのヘッダ部分の高さを変えるにはどうすればいいんでしょうか?
CheaderCtrlでヘッダ取得してSetWindowPosで無理矢理変えたらヘッダだけは高さ変わったんですが
ヘッダの裏にあたる(?)リストの部分の高さが変わらずヘッダの部分が内容に被ってしまいますた。
179デフォルトの名無しさん:03/04/07 23:06
CImageList
180デフォルトの名無しさん:03/04/08 15:26
CEditであるキーが入らないようにするにはどうすればいいですか?
例えば「a」が入らないように・・・
>>180
CEditの派生クラスで好きなようにしる!
182デフォルトの名無しさん:03/04/08 15:39
             / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ∧_∧   <  OnCharで出来ました。
     ( ´_ゝ`)   \ アリガトー!>>181 
    /::☆::::☆::\   \________
   /:/\:::::☆::/ ̄\
 _| ̄ ̄ \☆/  ヽ \_
 \ ̄ ̄ ̄ ̄ ̄ ̄ \__)
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
183デフォルトの名無しさん:03/04/10 13:13
MFCでアイドルループどう書きますか?
const int kago = 1000;
for (int tsuji = 0; tsuji < kago; tsuji++)
{
・・・・
}
ワラタ
186デフォルトの名無しさん:03/04/10 16:16
複数ダイアログバーあるとき
親のフレームのサイズを縮めると
かってにはみ出たダイアログバーが
下に下がっちゃうんだけど・・・

下がって欲しくないときはどうするん?
187デフォルトの名無しさん:03/04/10 16:18
少しMFCと話題ずれるけど、EXEに関連づけられた
アイコンって、あとからbmpとかを読み込んで再定義とか
できるの?
本来なら、レジストリで、exeに埋め込まれたアイコンデータを
参照するようだけど。
教えてください
exeのリソース書き換えてアイコンを変更することはできる。
189187:03/04/10 17:34
>>188
うーん・・・
外部に画像ファイルとして持たせて、ユーザーが選択
できるようにしたいのですが・・・
exeのリソースを書き換えるプログラムを同梱すれ。
191デフォルトの名無しさん:03/04/10 20:01
ウィンドウの垂直位置をMoveWindowで負の座標にもっていっても
自動的に、タイトルバーが見える状態に下がってしまいますが
(デスクトップ上で移動で試しても確認できます)
これを禁止するか、座標が修正されたタイミングを取得する方法って
ありますか?
192デフォルトの名無しさん:03/04/10 21:22
CSocketやCAsyncsocketを使った場合、相手側もCSocketやCAsyncsocketを使った
アプリケーションじゃないと通信出来なかったりする事ありますか?
>>192
そのくらい自分で試せよ
>>191
>ウィンドウの垂直位置をMoveWindowで負の座標にもっていっても
>自動的に、タイトルバーが見える状態に下がってしまいますが
SDIでもダイアログでも下がりませんですた

Windows2000SP3 VC6SP5 MFC4.2
195191:03/04/10 21:59
>>194
要するにオリジナルスキンを持ったウィンドウのドラッグ操作の
部分なのですが、
MoveWindowを呼んだ直後は下がらないけど、その後(タイミングが不明)に
修正されます。

例えば、
WindowsMediaPlayerの下をドラッグして上に持っていくまでは
OK(MoveWindowでも負のy座標が適当される)だけど
マウスを放したときに、戻っちゃいます
タイトルバーを削除しちゃいかんのか?
197191:03/04/10 22:52
>>196
プロパティでタイトルバーはオフにしていますが
同じ結果です
198デフォルトの名無しさん:03/04/10 23:31
VC2003まだ〜
>>195
それはWindowsの仕様なんじゃないか……?
200191:03/04/11 00:14
うーむ、実はドラッグでMoveWindowしたウィンドウに追随させて
ほかのウィンドウも制御してるのですが、OSに勝手に移動されると、
つじつまが合わなくなりますね
>>191
MoveWindowというか、ユーザがドラッグや Alt+Space,M でウィンドウを動かした
ときの話でしょ?

LBUTTONUP や Enterで位置を確定した後、↓みたいにメッセージが飛んできたよ

位置の修正がないとき
WM_POSCHANGEING (移動した座標)
WM_POSCHANGEING (  〃  )

位置の修正があったとき
WM_POSCHANGEING (移動した座標)
WM_POSCHANGEING (修正された座標)
WM_POSCHANGED (  〃  )
202191:03/04/11 02:25
>>201
ヒント
ありがとうございます
無事解決できそうです
203:03/04/11 12:57
リストボックスが空の状態でリストボックスの内容を保存しようとすると
エラーのメッセージを表示させたいです。どのようなコードを書き込めばよいでしょうか?
ご教授お願いいたします。
>>203
中身があるかどうか確認してから保存する。
205デフォルトの名無しさん:03/04/11 22:44
ずっと疑問に思っていたのですが、デバッグウィンドウで
dllのロード後に
「○○.dllをロードしました。合致するシンボル情報は見つかりませんでした。」
ってどういう意味なんでしょ??
>>205
日本語わかりますでしょうか?
>>206
町に出て日本語知っている人に聞いて答えてもらえると思いますか?
あなたは質問の意味が理解できてないように思われます。
日本語わかりますでしょうか?
>>205
合致するシンボル情報(foo.dllに対してfoo.dbgあるいはfoo.pdb)
があれば、VisualC++のデバッガはそれを使ってDLL内の関数名とか
を表示することができる。それができませんよ、ってこと。
>>208
一番上に回答がくるようにしない奴はム板にむいてない
211205:03/04/12 00:29
>>209
ありがとう!!
よくわかりましたっ!!!m(__)m
>>210
ム版に最も適した人材

最近の厨房様は検索という言葉をご存知ないらしい
214214:03/04/12 05:24
シリアライズして保存したいのですが
保存する変数を配列で定義してるせいか
二項演算子'>>':型'CString[15][100]'の右オペランドを扱う演算子が見つかりません(または変換できません)
と出ます。ar >> m_id >> m_account >> m_name >> m_address >> m_day; ってな感じでやってるんですが
解決策ありますか?
>>214
イマイチ分かり辛いが、
配列ならをforで回して保存したらどうよ
216214:03/04/12 06:00
シリアライズしないってこと・・・・ですか?
あっぷしてみたので見ていただけるとうれしいです・・(爆
http://members.tripod.co.jp/aiton21/customer.zip
>>216
*.objはサイズが大きいから、次回うpするときは、削除してから
うpするよーに。
218デフォルトの名無しさん:03/04/12 17:49
と言うことで、誰も見ないから放置プレイ?
シリアライズできる配列クラスを作れってこったろ。
220214:03/04/13 04:37
>217
了解です。
>219
あほなのでよくわからんのですが
配列の変数でも保存が可能なシリアライズクラスを作れってことですか?
221214:03/04/13 04:52
こんな感じの作ってみたんですが構文エラー出ちゃいます。。。
ar << m_id;
for(i=0;i<m_id;i++)
{
m_account[][i] << m_name[][i] << m_address[][i] << m_day[][i];
}
222214:03/04/13 05:54
if (ar.IsStoring())
{
ar << m_id;
for(m=0;m<=15;m++)
{
for(i=0;i<m_id;i++)
{
ar << m_account[m][i] << m_name[m][i] << m_address[m][i] << m_day[m][i];
}
}
}
これでできました。何回もコピペすいません。。。
ですが今度は
error LINK2005:"class CData m_data"(?m_data@@3VCData@@A)は既にData.objで定義されています。
とでます。オブジェクト名を変えるとまたそのオブジェクト名でエラーが出るので
二重定義定義しているとは思えません。ググってみてもそれらしい物がでないので。。。よろしくです
>>222
とりあえず中間ファイルを消してリビルドすることをオススメする
>>222
……と、そのまえに>216の中のdata.hはギャグだよな?
data.hを2つ以上のcppファイルでインクルードすると当然2重定義になるわけだが……
ぬぁに!知らなかった。。。
二つ以上のcppファイルでdata.hを使いたいときはどうすればよい?
226214:03/04/13 10:18
あ、ヘッダファイルでインクルードすればよいわけか。
どっちにしてもエラー消えません(泣
>>226
indef
228214:03/04/13 10:39
>>227
検索しても何もでないです。。俺がへたれのせい?!
>>228
いや、ミスタイプしたものの誰かが訂正してくれるだろうと放置した俺の責任だ。スマソ。

ifdef
230214:03/04/13 11:09
>>229
#ifdefが条件付コンパイルってとこまでわかったんですがそこからがどうも。。。
他のヘッダファイルで定義したクラス使うにはどうすればよい?
いや、つーか、クラス宣言と切り離せよ
data.hでは
class CData
{
:
:
};

んで他のcppふぁいるで
CData data;
これでオブジェクトは1つだけ宣言される。
あとはヘッダファイルでextern宣言でもしとけ。
>>230
ヘッダファイルを#include

まさかとは思うが
class hogehoge
{
/* 変数とか関数とか */
} hage;
とかやってないだろうな。
233214:03/04/13 11:40
>232
もちろんやりました(笑)
>231
extern宣言見つけました!って書こうとしたら書き込みが。。。
感謝です。確かにcppで宣言した方がいいっすね。
そしたら今度は外部シンボルが未解決やら言い出しました。
エラーってつきないっすね(泣)一応メインフレームのオンクリエイトで
オブジェクトできるようにしたんですけど、何がだめなんだろ・・・
234214:03/04/13 11:53
>あとはヘッダファイルでextern宣言でもしとけ。
ってどこのヘッダファイルですか??
とりあえず全部のヘッダファイルに書いてみたけどだめでした。。。
>>233
MFCには関係ないようだな。
とりあえずその書き込みからわかることは

変数または関数の実体がない

エラー文のコピペとOnCreateのあたりのソースを見ないとなんとも言えん。
>>234
(;´Д`)
何がダメだったのか、どんなエラーがでるかくらい書けよ。

グローバルな変数だったら
プロジェクト名.cppに変数宣言して、
プロジェクト名.hにextern宣言しておけば大丈夫だと思うけど。
(全ファイルでプロジェクト名.hを#includeする必要があるが)

俺はグローバル変数嫌いだから、
アプリケーションクラスのpublic変数として宣言しておいて
CHoheApp *pApp = (CHoheApp *)::AfxGetApp();
pApp->data = ....
っていう風にするけど。
(それ以前にグローバル変数を使わない設計にするがw)
237214:03/04/13 12:04
http://members.tripod.co.jp/aiton21/customer.zip
に一番新しいのアップしました。エラー文コピペとかより
分かりやすいと思ったので。試行錯誤中です。。。
238214:03/04/13 12:07
あああ!グローバルじゃなかった罠。お騒がせしました。。。
>>237-238
とりあえずお前に学習能力がないことがよくわかった(>>217)

で、解決したのか。
そうか。
240214:03/04/13 12:13
ほんとすいません。。。分かってたんですが急いでたもんで(泣)
いちおう解決しました。どもでした。
(´-`).。oO(急がば回れ……)
242214:03/04/13 12:18
あれ。。。消せた。さっきはデバッグフォルダの中身にロックかかってて
消すのに一回.NET閉じたんですよ。また閉じるとなると相当時間かかるから
そのまま圧縮しちまいました
243デフォルトの名無しさん:03/04/13 14:03
>>241
ワラタ
244デフォルトの名無しさん:03/04/13 14:32
289件のビルドタスクエラーがでたので顔殴らせてください
DDXでコントロールしてる文字列があるんですが
その文字列のコピーの仕方が分かりません。
どうやればこぴれますか?
246教えてクン:03/04/13 17:32
モードレスダイアログのZオーダをアプリケーション内で最前面に固定するにはどうすれば?
(システムで最前面ではなく。)
>>246
SetWindowPos(&wndTop);
248246:03/04/13 18:01
>>247
固定、したいんですが‥‥。
>>248
俺の記憶が確かならウィンドウは親ウィンドウよりも前に来る
>>248
>>247であってるんでない?VC6だけど、ちゃんとなるよ。
何が不満なのよ?
>>214
2重インクルード防止に#ifdefなんてもう古い。
#pragma once 使え。
252246:03/04/13 18:25
>>249-250
???
以下のコードでm_bForeがドッチでもZオーダに関する動作は同じっぽいのだが?
何か間違ってる??

(ダイアログクラス)
  if ( m_bFore )
  {
    // 常に手前に表示
    SetWindowPos( &wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
  }
  else
  {
    // 手前でなくともよい
    SetWindowPos( &wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
  }
253246:03/04/13 18:26
あ、まさか。
254214:03/04/13 18:27
>251
どもです。とりあえず問題解決したので余裕ができたら調べます。
質問なんですが
あるcppファイルから他のヘッダを取り込んで
他のヘッダにあるクラスでオブジェクトを宣言しようとすると、
コンストラクタ関数を呼び出したことになってしまいます。
オブジェクトを新たに宣言できないんですがどうすればいいですか?
両方使え
>>252
>固定、したいんですが‥‥。

(゚Д゚)ハァ?
257246:03/04/13 18:32
アハハ。親をデスクトップにしてたyo!
>>257
吊ってよし。
259214:03/04/13 18:34
>>255
これが自分へのレスなのかすら分からない俺は馬鹿だ・・・
260246:03/04/13 18:38
   ||
 ∧||∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( / ⌒ヽ < みんなありがとー。
 | | 、, |  \__________
 ∪ ノ )〜
  | | |
  ∪∪
   : 
   : 
      
 ‐ニ三ニ‐ 
>>214
( ´ー`)y-~~.。oO(C言語について基礎からやったら?)
>>261
いくらC言語を勉強しても解決できない悪寒
263214:03/04/13 18:46
>261
基礎特訓中です。。。へたれですいません・・・。
なんでコンストラクタ関数になっちまうんだろぅ
>>262
ヘッダに

int Global_HOGE;

と書くわけだ。( ´_ゝ`)フーン…
わざわざVC++初心者スレがあるのに・・・
>>264
デムパゆんゆん
267214:03/04/13 18:58
>265
いってきまつ
268デフォルトの名無しさん:03/04/14 05:14
3つ質問させてください。締め切り間際で焦っております(つД`)

1.タスクバーのキャプションだけを変更する方法はありますでしょうか?
  タイトルバーと違うキャプションにしたいのですが・・・

2.アプリが完全に立ち上がるまでの間、
  砂時計をだすためにCWaitCursorを使っているのですが、
  アプリをバッチファイルから起動した場合砂時計がでてきません。
  (直接アプリを起動すると、最初から砂時計がでるようです)
  バッチファイルからの起動で砂時計を出すためには何か必要なのでしょうか?

3.signalをひろって、アプリを落とす処理があるのですが、
  そのときsignalの種類によっては、アプリケーションエラーのダイアログが出てきます。
  このダイアログを表示させない方法はあるのでしょうか?

どうかご教授お願いいたします。
>>268
低能プログラマはクビになってしまえ

1. ムリ
2. 別に?
3. エラーをなくす
270268:03/04/14 05:51
>>269
回答ありがとうございます。

2.はもう少し調べてみます・・・

3.に関しては私もエラーを無くすのが当然だと思うのですが、
仕様に含まれているため、処理を入れないといけないのです・・・。
アプリケーションエラーのダイアログはプログラムでは操作できないのでしょうか?
signalを無視するなど試してみたのですが、上手くいきませんでした。

271デフォルトの名無しさん:03/04/14 07:15
  _, ._
( ゚ Д゚)  ・・・
272去る:03/04/14 10:12
CFileDialogで詳細表示の項目にオリジナルの項目を追加したいのですが
どうすれば宜しいでしょうか?ご指導願います(名前、サイズ とか表示されているところです)
>>268
>アプリを落とす処理

ど う や っ て 落 と し て る ん で す か ?
274デフォルトの名無しさん:03/04/14 21:17
アホな質問でしみません。
デバッグ中にMFCのコードで止まるのですが、コードを修正しても
ステップ実行で無視されます。またMFCのソースコードを修正しても
いいものなのでしょうか?
アホな質問というか日本語的にどうかと。
>>272
自分でダイアログを作る
>>270
1に関してはVCLは実現していますね。
二つのウィンドウを使って擬似的に行っているようです。
APIスレから流れてきました。
http://pc2.2ch.net/test/read.cgi/tech/1047819779/546
フォルダのツリービュー(エクスプローラの左側にあるやつ)を手っ取り早く実装する方法ってありませんか?
フリーのライブラリの情報でもありがたいです。
>>278
そっちで答えでてんのにどうしてわざわざこっちへ?
>>278
有る。探せ。
それかPIDL(ITEMIDLIST)勉強しる。
ちなみに人に聞いて回ることは「勉強する」って言わないからね
282:03/04/15 09:23
>> 272 です。CFileDialogを拡張して
hList = GetListViewInner();// リストビューのハンドル確保
hHead = ::GetWindow(hList, GW_CHILD);// そのヘッダーのハンドル確保
LV_COLUMNを利用して項目を追加するも詳細表示の表示項目その他を選択すると
落ちてしまいます。どなたかよきアドバイスをお願いします。
やはり1から作成するしかないのでしょうか?
>>282
マルチポストかよ
氏ね
284デフォルトの名無しさん:03/04/15 10:51
RichEdit2.0の機能をつかってるサンプルソースを公開してる
サイトとかないでしょうか?

あのリンク機能とかバックカラー、アンダーラインなんかを使ってる
サンプルが欲しいんですが・・
285デフォルトの名無しさん:03/04/15 11:25
>>282
>>284
codeguruあたりに載ってない?
286:03/04/15 11:27
>>285
英語のサイトなんか教えられても、ちっとも嬉しくないんだよ。
287デフォルトの名無しさん:03/04/15 11:39
>>285
codeguruもcodeprojectも見てみましたが
RichEdit1.0のサンプルが主で、いくつか1.0の機能拡張とか2.0の単機能だけ
引っぱってきたサンプルはあるようなんですが
RichEdit2.0を前面につかったサンプルがまるでないようで・・・
>>286
英語も読めない低学歴か(藁
289:03/04/15 12:39
>>286 偽者が語るな
290:03/04/15 12:40
>>286 偽者が!! 人の名を語るな
あの程度の英語に学歴は関係ない。とにかく読め。
292:03/04/15 14:28
>>285 さん ありがとうございました
早速拝見させていただいたのですが
自分のほしい内容がありませんでした。
ほかに無いか再度探してみます
>>292
マジレスするが、エディタは自作が最強。
294278:03/04/16 00:16
>>280
それっぽいのが見つかりました。
レスどうもです。
295286:03/04/16 01:01
>>290
× 人の名を語る
○ 人の名を騙る
296デフォルトの名無しさん:03/04/16 02:50
唐突なんですが、携帯電話とPCとを接続するケーブルってありますよね。
で、それを利用するアプリケーションは、そのケーブルのドライバを内部で使用しますよね。

....で、このドライバ仕様..というか携帯電話とのインタフェースって、公開されているモノ
なんでしょうか。

って、要するに「ケータイ・エディ」のようなソフトを作ってみたいんです。

ちなみにIOデータの"USB-CDMA"に付属のドライバ、UCDMAM.SYSでは、当然内部で
USBD.SYSをimportしてるんですが、これの仕様もどこか(例えばMSDN等)で公開
されてるんでしょうか。
>>296
COMポートを使っている例なら……
ttp://osaka.cool.ne.jp/fillin/kmeback/index.html
2982chブラウザつくってるわけじゃないですが:03/04/16 07:51
静的分割ウィンドウの分割方向って変更でき……ないですよね。
ホットゾヌみたいに表示形式を変えたい場合はどうすればいいんでしょう?
  _______     _______
 |   |   B   |    |   |   |    |
 | A |______.|    | A. | B | C  |
 |   |       |    |   |   |    |
 |   |   C   |    |   |   |    |
   ̄ ̄ ̄ ̄ ̄ ̄ ̄      ̄ ̄ ̄ ̄ ̄ ̄ ̄
--
Windows2000SP3 VC6SP5
299298:03/04/16 07:59
ふと考えたのが
1. AとBをダイアログバーにしてしまう
2. CFormViewにしてA,B,Cをコントロールとして貼り付ける(VBみたいに)
……あんまりスマートじゃないな。
ヒントやキーワードがあったらお願いします。
300フルカラーアイコン:03/04/16 09:19
XP上のIEのように、ツールバーをフルカラーアイコンにしようと調べてるけど、
IEって、画面のプロパティの色設定が反映されないの。
ツールバーや、メニューなど。

同じようにプログラム側で固定の色にしようとやってみたら、
ツールバーとステータスバーは、SetBkColor()で出来るけど、
メニューやリストビュー、ツリービューのヘッダやスクロールバーなどの色を
固定化する方法が見つからないの。

どうすれば、IEのようにできるのでしょう?

フルカラーのツールバー用アイコンをアルファチャネルのデータを
反映させて透過色にできるのが本当は一番いいんだけど。
よろしくね。
オーナードロー
302デフォルトの名無しさん:03/04/16 09:56
>>298=299
垂直分割と水平分割の切り替えはやったことが無いんだが、
分割したViewの中身を後から入れ替えたことはある。

Googleで「CSplitterWnd 切り替え」でヒットする情報なんかが参考になるかと。
>>298
Janeのソース
304298:03/04/16 11:53
一眠りしたら頭がすっきりしますた

CCreateContext context;
context.m_pCurrentDoc = GetActiveDocument();
このcontectをCSplitterWnd::CreateView()で使えばよかったんですね。
CSplitterWnd::DestroyWindow()で一度壊してから、
改めて普通に分割ウィンドウを作るように組んだらできました。

>>302
キーワードありがとうです。
訪問済みリンク率は高かったんですが「切り替え」が思い浮かばなかった……

>>303
見る前に解決してしまいました。
レスありがとう。
305:03/04/16 19:27
>>282 codeproject内にて"Column Settings"で
検索すると見つかりましたのでここに報告します。
レスをいただいた方々にこちらにてお礼の返事とさせていただきます。
ありがとうございました。また何かありましたらよろしくお願いいたします
>>268
1.逆に、タイトルバーの方を自分で描画すればいいだろ。
どうしてもタスクバーの方を変えたいなら、
クラス名が"Shell_TrayWnd"のウィンヅゥの中のタブコントロールを探せ。
タスクバーはタブコントロールだから、
うまいことメッセージを送れば表示を変えられる。
>>268
クラシックスタイルまでは、SetWIndowText()でタスクバー、
WM_GETTEXTでキャプションだったのだが、
LUNAでこけてしまった。
私も知りたい。
>>270
例外を無視する・・・・んじゃ駄目なんだろうなぁ・・・。
309山崎渉:03/04/17 15:17
(^^)
310デフォルトの名無しさん:03/04/17 16:16
Spy++って便利だねぇ。
まさかデスクトップが
311デフォルトの名無しさん:03/04/17 17:32
CHtmlViewからCMainFrameの関数を使おうと
(CMainFrame*)GetParentFrame()->xxx();
のようにしたのですが、
「'CMainFrame' 定義されていない識別子です」
と言われてしまいました。MainFrm.hをincludeしてみたら、
「'xxx'(CMainFrameの関数名):'CFrameWnd'のメンバではありません」
と怒られます。どうやったら解決しますでしょうか?
((CMainFrame*)GetParentFrame())->xxx();
こうじゃねえか。
うう、本当だ。ありがとうございます。

MainFrm.hはincludeの必要ありでいいのでしょうか? CmainFrameの定義が書いてあるので
とりあえずincludeしてみましたが、Google等で調べたサイトなんかでは特にそんなことは書か
れていなかったのですが…。
問題ないと思う。俺はいつもそうしてる。
気になるようならCMainFrameに向かってSendMessage()すればいい。
AfxGetMainWnd()->SendMessage(・・・・);な感じ。
315313:03/04/17 18:06
ありがとうございます。安心しますた。
どうしてもダメだったらSendMessageしかないかなー、とは少し思っていました。
SendMessageか
最近つかわないなぁ

今はPostMessageの方を使ってる
こっちの方がなんとなく安全そうだし
その「なんとなく」ってのがコワイ
変数の生存期間とか考えてちゃんと使い分けないとダメだよ(^_^;)
>>316
もしかしてPostMessageでローカル変数のポインタとか渡してないか?
もしかしてPostMessageでローカル変数のポインタとか渡してないか?
320デフォルトの名無しさん:03/04/17 22:30
>>319
黒やぎさんたら読まずに食べた・・・
安全って面ではSendMessageの方が安全っぽい感じがするけどなあ・・・・
322デフォルトの名無しさん:03/04/18 00:02
cs.style |= WS_CLIPCHILDREN;
とすると、
CRect rc;
GetClientRect(&rc);
InvalidateRect(rc, TRUE);
で再描画されなくなってしまうのですが、
何か他に描画を促す方法ありませんか?
>>322
UpdateWindow()
324デフォルトの名無しさん:03/04/18 00:32
>>323
UpdateWindow駄目だったけれど、
RedrawWindowでいけました。
ありがとう。
325デフォルトの名無しさん:03/04/18 09:50
ダイアログベースアプリで
そこからCFrameWndとCViewを構築したんですが
ViewのON_UPDATE_COMMAND_UIが呼ばれてこないんですが
どんな問題が考えられるでしょうか?

ちなみにCFrameWndにはメニューはついてませんが
ツールバーはついてます。
>ダイアログベースアプリで
>そこからCFrameWndとCViewを構築したんですが
  _, ._
( ゚ Д゚)  ・・・
327デフォルトの名無しさん:03/04/18 10:38
>>326
ダイアログベースアプリから呼び出すダイアログを
CFrameWndの派生クラスから作った感じです。
単純にCFrameWnd::Createを呼んでOnCreateClientでViewを作っただけなんですが
そのCFrameWnd::OnCreateで普通に作ったツールバーのEnable/Disable更新のため
CViewの派生クラスにON_UPDATE_COMMAND_UIを作ったんですが
これが呼ばれてこないんで??な状況です。
一応ツールバーのボタンをクリックすればViewにあるON_COMMANDは呼ばれてます。
328bloom:03/04/18 10:53
ドキュメント・ビューについて勉強することをおすすめする
330325:03/04/18 11:52
すんません解決しました。
親ダイアログでWM_KICKIDLEをひろって
そこで子のCFrameWndに
SendMessageToDescendants(WM_IDLEUPDATECMDUI・・・を
送ったらViewのON_UPDATE_COMMAND_UIが呼ばれるようになりました。
331デフォルトの名無しさん:03/04/18 19:21
CxxxAppのInitInstanceでProcessShellCommandの
app filename → 開く
という場合だけ処理させないようにしたいのですが、どうすれば
いいでしょうか?
app → 新規作成
はそのまま残しておきたいのですが。あるいは、ProcessShellCommandの
行を丸ごとコメントアウトして、コマンドライン引数がないときのみ新規作成
処理をさせる方法も考えたのですが、方法が解らずです…。
お願いします。
>>331
ProcessShellCommand filenew
あたりでググってみれ
ところでおまえらもうMFC7に移行してる?
VS.NET2003のMFCが8になるのかどうかは知らんが、
やはりWin95(そろそろWin98も斬り捨てるのかなぁ)では動かないだろうから、
今のところMFC6から先に行かず、むしろATL/WTLに興味を持ち始めた
今日この頃の俺なんだが。
334山崎渉:03/04/20 03:05
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
335山崎渉:03/04/20 03:42
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
いいんじゃない?
>やはりWin95(そろそろWin98も斬り捨てるのかなぁ)では動かないだろうから、
95はすでにMSがサポート打ち切ってんじゃん。
98とNT4.0は6月までだっけか。
>>332
ハゲシク感謝です!
>>337
MSがWin95のサポート打ち切ったのとMFC7がWin95を斬り捨てたのはなんか関係あんの?
その論理で行くと次のMFCはWin98/NTを斬り捨てることになるが。
Win95のサポートが2001年3月まで、
MFC7(VisualStudio.NET)の発売が2002年3月末であることを考えると
MFC7は95をサポートしていない、と見ていいんじゃないかな……。
341新人:03/04/21 09:44
CFileDialog表示時
詳細項目表示状態画面にて
詳細項目の表示欄の項目をこちらの
希望どおりにプログラムにて
表示させる方法があれば
教えていただけませんか。
(例 CFailDialogを開く前に
  Aを選択すると
   名前 サイズ タイトル と表示
  Bを選択すると
   名前 サイズ 種類   と表示

ツールとOSは
VC++6 WIN2000です。
>>341
自分でCFileDialogみたいなダイアログを自作する
343デフォルトの名無しさん:03/04/21 13:59
フォトショップのツールの様なウインドウをMDIにて作成中です。

はじめにモードレスダイアログで作成したのですが、これだとダイアログを
アクティブにしたときにメインフレームがアクティブ状態でなくなります。

次に、ダイアログバーのフローティングを利用して作成してみました。
この場合はどのウインドウもアクティブ状態になるのですが
複数のダイアログバーを作成してダイアログバー同士が重なった場合
下のダイアログバーをクリックしてもウインドウのが前面に
出てきてくれないのです。

何か良い方法があればご教授いただけたらと思います。

>>343
ツールバーでしか試したこと無いからできるかわからないけど
まず、CDialogBar(これの派生クラス使ってるんだよな)の派生クラスを
別にこんな感じで作ってくれ。

ヘッダーファイル
class CMyDialogBar : public CDialogBar {
public:
 CMyDialogBar(){ ; }
 virtual ~CMyDialogBar(){ ; }
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point) ;
 DECLARE_MESSAGE_MAP()
} ;

cppファイル
BEGIN_MESSAGE_MAP(CMyDialogBar, CDialogBar)
 ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

void CMyDialogBar::OnLButtonDown(UINT nFlags, CPoint point)
{
 if(IsFloating()){
  CRectrect ;
  CWnd*pwnd1, *pwnd2 ;
  pwnd1 = GetParent() ;
  pwnd2 = pwnd1->GetParent() ;
  pwnd2->GetWindowRect(&rect) ;
  pwnd2->SetWindowPos(&wndTop, rect.left, rect.top
    , rect.Width(), rect.Height(), SWP_SHOWWINDOW) ;
 }
 CDialogBar::OnLButtonDown(nFlags, point);
}
345344:03/04/21 14:17
ぬけてた、class CMyDialogBar 内に
DECLARE_DYNCREATE(CMyDialogBar)
をついか、
346344:03/04/21 14:20
ああ、すまん345はいらなかった、無視してくれ。
347344:03/04/21 14:24
つぎはこれ
ヘッダーファイル
#include <afxpriv.h>
class CMyMiniDockFrameWnd : public CMiniDockFrameWnd {
 DECLARE_DYNCREATE(CMyMiniDockFrameWnd)
protected:
 CMyMiniDockFrameWnd(){ ; }
 virtual ~CMyMiniDockFrameWnd(){ ; }
 afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
 DECLARE_MESSAGE_MAP()
};

cppファイル
IMPLEMENT_DYNCREATE(CMyMiniDockFrameWnd, CMiniDockFrameWnd)
BEGIN_MESSAGE_MAP(CMyMiniDockFrameWnd, CMiniDockFrameWnd)
 ON_WM_NCLBUTTONDOWN()
END_MESSAGE_MAP()

void CMyMiniDockFrameWnd::OnNcLButtonDown(UINT nHitTest, CPoint point){
 if (nHitTest == HTCAPTION){
  CRectrect ;
  GetWindowRect(&rect) ;
  SetWindowPos(&wndTop, rect.left, rect.top, rect.Width(), rect.Height()
   , SWP_SHOWWINDOW) ;
 }else if (nHitTest >= HTSIZEFIRST && nHitTest <= HTSIZELAST){
  CRectrect ;
  GetWindowRect(&rect) ;
  SetWindowPos(&wndTop, rect.left, rect.top, rect.Width(), rect.Height()
    , SWP_SHOWWINDOW) ;
 }
 CMiniDockFrameWnd::OnNcLButtonDown(nHitTest, point);
}
348344:03/04/21 14:30
で、自分が作ってたダイアログバーの派生もとのクラスを
CMyDialogBarに変更して、CMainFrame::OnCreate()内の
EnableDocking()を呼び出している後ぐらいに
m_pFloatingFrameClass = RUNTIME_CLASS(CMyMiniDockFrameWnd) ;
を付け足して終わり
試したことないから報告よろしく
349344:03/04/21 14:36
ちなみに、やっていることは単にクリックされたら一番前に来るように
してるだけ。
ツールバーの時にはツールバー自体のウインドウとその枠の部分のウインドウ
になってたのでCMyDialogBarとCMyMiniDockFrameWndの二つが必要なはず
350343:03/04/21 15:00
>>344さん出来ましたどうもありがとう!

返事が早くて恐縮です。

351344:03/04/21 15:36
>>350
問題なしのようでなにより。
ちなみにツールバーの場合は(もうわかってると思うけど)
class CMyDialogBar : public CDialogBar {
のところをCToolBarにして、同様にすればOk
今回の例では右クリックは実装していないのでお好みで、

ダイアログバーでも使えることがわかったのでこちらからもサンクス
352デフォルトの名無しさん:03/04/21 19:35
DrawFrameControl で

DrawFrameControl(rc, DFC_BUTTON, DFCS_BUTTONPUSH);

とかやって、ボタンっぽいのを書いているんですが
これの表示色を変える方法はないですか?

SetBkColorとかじゃ変わらないのですが?
SetTextColorは違うのか?
>>352
ムリでしょ。
MDIで複数の子ウィンドウを表示させている時、特定のウィンドウだけをwndTopMostみたいに
他の子ウィンドウに対して常に前面に表示させるという事は出来ますか?
ちなみにその子ウィンドウに対し、SetWindowPosでwndTopMostを試して見ましたが駄目でした。
よろしくお願いします。
CPropertySheetを使って設定のプロパティーシートを作ってみたのですが、
どうしてもクラスの外(C〜View)からコンストラクタのみでCPropertyPage内の関数を呼び出したいのですが、
何かよい方法をご存じないでしょうか?

表示しないようにして関数を使いたいのです・・

やっぱりCreateとかを呼び出さないと無理なんでしょうか?
そのC〜ViewをShowWindow(...)で表示しないで
プロパティウィンドウを普通に表示すればいいと思うが・・・
おっとちょっと間違えたかな

>>コンストラクタのみでCPropertyPage内の関数を呼び出したいのですが
??? シートのコンストラクタからページの関数を呼び出すということか?
普通にできると思うが
>>357
レスありがとうございます。書き方が悪かったです。スミマセン。
もともとViewは表示してあって、プロパティーシートの方を表示したくないのです。
CPropertySheet sheet("設定");
sheet.m_Page1.関数();
これだとエラーが出てしまいます。
>>359
最近の厨房様は「エラーが出ます」と書けば回答者がエラーを推測して答えてくれるとお考えらしい。
361352:03/04/22 11:34
>>354
やっぱ、無理っすか。サンクス。
自前で描画すりゃいいのか。
362356:03/04/22 13:30
スミマセン自己解決できました。イベントハンドラの関数を呼び出していたのがいけなかったらしいです。
363356:03/04/22 13:37
やっぱりダメでした。GetDlgItemを呼び出すと
Debug Assertion Failed!
File: Winocc.cpp
Line: 94
というエラーが出てしまいます。
VS.NET2003出たね。ダウンロードだけど。
>>363
ウインドウハンドルを使用する関数などはDoModal()やCreate()の後でなければ
hwndが無効な値なので使用できない。GetDlgItem()もhwndを使用するので無理。
これはダイアログのときも同様。
MFCではダイアログ データ エクスチェンジ(DDX)でコントロールに変数に
int, CStringなどの値を設定しているときはその変数へのアクセスはDoModal()等
しなくても普通にできるが、コントロールクラス(CListBox等)を設定した場合は
DoModal()等の後でなければならない。GetDlgItem()等も同様。
これらのコントロールクラスにアクセスするタイミングは普通、OnInitDialog()の
中であるので、この関数をオーバーライドしてCListBox等の初期化を行う。
プロパティーシートの場合はシート・ページ別々にあるのが、普通はページのほう
をオーバーライドする。
366356:03/04/22 15:34
>>365
ありがとうございます。別の方法を考えてみます。
フレームにビューを使わず自作のコントロール(CXXXCtrlを派生したもの)
を直接張るにはどうすればいいですか?
368名無し@沢村:03/04/23 03:06
>>367
Create()
>>367
・ダイアログベースで作る
・ドキュメント/ビューを使わない
>>369
CViewにも子ウィンドウは貼り付けられますが?
コントロールから独自のViewを作れるよ。
>>371
大まかで良いからやり方を教えてください。または参考になる文書でもいいです。
CCtrlView絡みだとは思っているのですが、何回かやった時には出来ませんでした。
>>372
CEditViewとかCListViewのソースを見ればよろしい。
>>372
「MFCによるWindowsプログラミング」という本のP657に載ってる。
WEBでもCodeGuruやCodeProjectあたりにありそうだけど確認してない。
375372:03/04/24 04:41
>>373-374
ありがとうございます。ちょっと頑張ってみます。
>>370
ビューを使わず、って書いてあったからさ……
377新人:03/04/24 17:29
>>341 です。
できればCFileDialogを拡張して
動作可能な状態にしたいのですが・・・
CodeGuruやCodeProjectでも見つかりませんでした。
どなたか回答していただけませんでしょうか
よろしくお願いいたします。
リソーススクリプト(*.rc)のアイコン定義部分を
#define APP1
・・・
#ifdef APP1
IDR_MAINFRAME ICON DISCARDABLE "res\\app1.ico"
#else
IDR_MAINFRAME ICON DISCARDABLE "res\\app2.ico"
#endif

みたいにしてマクロの切り替えでアイコンを切り替えるようにしてみたのですが、
rcファイルのセーブを行うと、

IDR_MAINFRAME ICON DISCARDABLE "res\\app1.ico"

みたいに現在有効な行以外が全て消されてしまいます。
何かいい方法は無いでしょうか?
379デフォルトの名無しさん:03/04/24 22:10
>「MFCによるWindowsプログラミング」という本のP657に載ってる。
今でも買えるところ教えてください。
増刷してくれんかな・・・
>>378

app.rc2 とかに書いてインクルードすべし。
っていうか別に手で書かなくても IDE で出来るでしょ。。
なんだっけ、リソース(アイコン)を右クリックしてコピーの挿入とかそんなので。
381378:03/04/24 22:40
>>380
IDEが勝手に「#ifdef APP1」とかの記述を消してしまうんです。
#includeも試したのですが、結果は同じでした。
(#includeも消されます)
コンパイルオプションによってアプリのアイコンを変えるのが
目的なので、rcファイル以外の方法があれば・・・。
>>379
こっちが貼り付ける方法で
http://www.codeguru.com/doc_view/custom_view.shtml

こっちが独自Viewを作る方法かな
http://www.codeguru.com/doc_view/Control2View.shtml

CodeGuruやCodeProject探せって言われてるだろうに・・・
383デフォルトの名無しさん:03/04/24 23:02
MFCの場合、コールバック関数(WndProcとか)はどこに記述されているのですか?

デスクトップ上のウインドウを列挙したくてヘルプを見ると、
EnumWindows関数でウインドウハンドルをコールバック関数であるEnumWindowProcに
送り、その中で処理をしろと書かれているのですが、EnumWindowProcがどこに記述されて
いるのか分りません。
EnumWindowProcを適当に追加してみると、
「(?EnumWindowsProc@@YGHPAUHWND__@@J@Z) はすでに test1.obj で定義されています」
というエラーがでてしまします。VC++6.0です。
384デフォルトの名無しさん:03/04/24 23:07
>>383
その手の質問(単一のAPI関数の使い方のような質問)は、
まずGoogle行った方が確実な情報が見つかりますよ。
385デフォルトの名無しさん:03/04/24 23:08
>>382
いえ、私は以前の人とは別で、
あの本を探しているだけの者でして・・・
そういうことにしたいのですね
>>381

VisualStudio 6.x だと、アイコンリソースを右クリックして「コピーの挿入」、
出てきたダイアログの「条件」のとこにdefine 名(ReleaseとかDebugとか)を
書けばできますよ。.NET ではどうやるのかシランけど。
>>384
レスありがとうございます。質問前にgoogleでいろいろ調べていたのですが・・。
でも、見つかりました。ので、一応かいときます。

MFC でコールバック関数を使う
http://plaza2.mbn.or.jp/~yoshio2/vcmemo16-1.html
389378:03/04/24 23:26
>>387
できました!!!。
#if defined(APSTUDIO_INVOKED)
という記述で変更禁止をしているみたいです。

380さん、387さん、大変お世話になりました。
390デフォルトの名無しさん:03/04/28 10:21
MFCを使ったドトネトは流行ってますか?
391動画直リン:03/04/28 10:26
392デフォルトの名無しさん:03/04/29 12:56
すいません。(またですが)
ドッキングダイアログ上のリストボックス・ツリーボックスのクリックイベント
の取得と初期化と選択している項目の変更ってどうすればよいでしょうか?

393デフォルトの名無しさん:03/04/29 13:13
>>392
用語をもっと正確かつ具体的に!
ドッキングダイアログって?
ツリーボックスって?
>>392
ネタ質なら他所でやれYO!
サイズ変更可能なドッキングバーを作ろうとて
http://www.datamekanix.com/
を参考に作成していますが、
ドキュメント化されていないクラスの解説等をしているページや書籍を
知っていれば教えてください。
MFCのソース解読するのそろそろ疲れてきた。
396392:03/04/30 19:13
すまそ。
ツリービューとドッキングバーです。
397デフォルトの名無しさん:03/04/30 22:21
知ってる人教えてください
VC++をインストールしたら特定のWebを開くとランタイムエラーと表示されます
どうやったら消えるか分からないので
とりあえずインストールしたVC++をアンインストールしました
しかしまだランタイムエラーと出ます
これを表示させなくする方法知ってるひといませんか?
>>397
VCはだいぶ前の商品だから古いDLLが上書きされちゃったんでしょうね。
WindowsのSPを当てなおしてみるのとかどうですか?
それで動けば、またVCをインストしてその上からさらにSPを当てる。
まぁボクはその状況になってないので、正確な答えじゃないかもしれませんが。
でも、なんでMFC限定のこのスレに?(  ̄ー ̄)
>>395
日本語の書籍で説明してるのはMFCインターナルぐらいかな。。。
http://www.amazon.co.jp/exec/obidos/ASIN/4795296952/ref%3Dsr%5Faps%5Fb%5F/250-7262064-9913843
リサイズ可能ドッキングバーってCodeGuruあたりにサンプルなかったっけ
>>392
CTreeCtrlとCDialogBar?
ここMFCスレなんだから、クラス名で書いた方がレスつきやすいよ。

ttp://www.google.com/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&q=CDialogBar+%83%81%83b%83Z%81%5B%83W&lr=lang_ja
でどう?
402デフォルトの名無しさん:03/05/01 09:31
403デフォルトの名無しさん:03/05/01 12:45
SetWindowRgnについて質問があるのですが、
この関数を使ってウインドウのリージョンを変更する場合は、
ダイアログベースで作成するのが基本と思っていいでしょうか。

ダイアログベースで作成したCTestDlg::OnInitDlg(){ ・・・に記述したら
正常にリージョンが変更反映されましたが、
SDIやMDIで作成したCTestView::OnInitialUpdate(){ ・・・ に記述したら
通常のウインドウ枠が表示され、その中にリージョンも作成されるというなんか
ヘンな動作となってしまったのです。SDIやMDIだとCMainFrameやCChildFrameクラスが
あるからムリなのでしょうか?それとも私のコードの記述の仕方がまずかったのでしょうか?

CRgn* m_windowRegion;
void CTestView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
m_windowRegion = new CRgn;
m_windowRegion->CreateEllipticRgn(0, 0, 200, 200);
SetWindowRgn(*m_windowRegion, TRUE);
SetWindowPos(&wndTop, 0, 0, 200, 200, SWP_NOMOVE);
}
404デフォルトの名無しさん:03/05/01 13:54
>>403
ViewにRegionくっつけても
Viewの親にCFrameWndがいるからおかしな事になるんでないの?

やるなら、CTestFrameWnd::OnCreateあたりでためしてみたら?
OnInitDialogとOnIntialUpdateは動作的に別物と考えた方がいい。
406デフォルトの名無しさん:03/05/01 23:00
LoadBitmap関数を使ってCBitmapオブジェクトにBMPファイルをロードしたいのですが
MSDNを見ると
BOOL LoadBitmap( LPCTSTR lpszResourceName );
BOOL LoadBitmap( UINT nIDResource );
と、2つあります。リソースIDを使用してLoadBitmapする方法は上手くいきました。
が、私はファイル名を引数としてLoadBitmapしたいのですが上手くいきません。
「引数 lpszResourceName 
 ビットマップ リソース名を表す NULL で終わる文字列へのポインタ。」
と書いてあるので、文字列リテラルを渡せばいいと思うのですが、
何が間違っているのでしょうか?

CBitmap bmp;
BOOL bl;
// bl = bmp.LoadBitmap(IDB_BITMAP1); ←これだと上手くいく
bl = bmp.LoadBitmap("test.bmp"); ←これだと0=FALSEが帰ってきてしまう。
>>404-405

レスありがとうございます。
言われた通り、CMainFrame::OnCreate以下に>>403と全く同じコードで
希望のSDI/MDIができました!!!ヽ(´ー`)ノ
>>406
LoadBitmapはあくまでもリソースからロードする関数なので、
ファイルから直接ロードしたい場合はLoadImageで。
>>408

レスありがとうございます。
納得しました!!!ヽ(´ー`)ノ
MFCでフォーム作ると、1つの大きなrcファイルになるのでしょうか。
フォームを色んなシステムで使いまわししたいとき不便だと思うのですが、
どうなんでしょう。
411デフォルトの名無しさん:03/05/02 17:07
プロパティページのエディットボックスコントロールに
あらかじめ値を入れておくにはどこに記述すればいいんでしょうか?
PreCreateWindowは通らないみたいだし
PreInitDialogの中でSetWindowTextをやっても
「Debug Assertion Failed!」になってしまいます。
おしえてください。おねがいします。
412動画直リン:03/05/02 17:13
>>411
そのAssertion は ASSERT(IsWindow(m_hWnd)) みたいなのでは?
だとしたら、その意味をよく考えることですな。
OnInitDialog
>>411
OnInitDialog()でやれ、つーか値ならDDX使え
416411:03/05/02 18:21
>>413-415
ありがとうございました。
できるようになりました。

>>415
コントロールのメンバ変数が
CStringじゃなくてCEditでもできるんですか?
>>416
CEditの他にCString変数も作ればええやん
DDXやら CString はコードが肥大化するから、大して必要も無いならやめとけ
なんでやねん
420デフォルトの名無しさん:03/05/06 15:45
モードレスダイアログにリストビューを貼って、LVS_EX_INFOTIPスタイルを追加したのですが、
ツールチップがダイアログの後ろに表示されているようです。
ちゃんと前面に表示させるにはどうすればよいのでしょうか?
421420:03/05/07 03:59
プロパティシートでも同様の問題が起こるんだけど、みんなどうしてるのかな・・・
422 :03/05/07 11:13
>>418

EXEサイズじゃなくて?
>>422
オブジェクト「コード」のことだろ。
マジで>>420はどうすれば・・・
モードレスダイアログまたはプロパティシート状のリストビューコントロールで
m_list.SetExtendedStyle(LVS_EX_INFOTIP);
とするとツールチップが後ろに表示されてしまう・・・
>>422 EXEサイズ
426デフォルトの名無しさん:03/05/08 10:46
MFCのプロジェクトで、
throw std::runtime_error
しても、文字列も出ないしプログラムが終了してしまいまつ。
キャッチを自分で書かなきゃならないでつか?
それともMFC用のエラークラスがあるのでしょうか?

例えば、BCBとかだと、キャッチのコードが生成されてて、
throw Exception("")すると、
エラー系のメッセージボックスが出てプログラムが終了しませんけど。
427426:03/05/08 11:24
「MFCのWinMainがライブラリに閉じられてるがために、
アプリケーション全体のキャッチを記述出来ない」なんてことは無いですよね?

もしそうだったら、やっぱ、さっさとBCBにコンバートした方がヨサゲ。
428426:03/05/08 11:44
CWinApp::InitInstance()のオーバーライドのソースに
#include <iostream>を入れると、

>error LNK2005: "void __cdecl operator delete(void *)" はすでに
>libcpmtd.lib(delop.obj) で定義されています
>fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました
>link.exe の実行エラー

というエラーがでまつ。
MSDNでは、マルチスレッド対応してないライブラリが混ざってると。
MFCって本当にC++でつか?
>>428
リンクするライブラリ・使用するランタイムライブラリの指定を確認するか、BCBにカエレ
マルチポストするほど必死なのになぜ煽る?
>>426
強制終了させたいならabort()でも呼び出しとけば?
>>426
MSDNで「処理されない C++ 例外」とか。
>現在の例外に対して該当するハンドラ (または省略記号の catch ハンドラ) が
>見つからないと、定義済みの terminate 関数が呼び出されます。
>terminate のデフォルト機能は、abort を呼び出すことです。

MFCにもエラークラス(CxxxException)はある。
MFCでTHROW使ったときに関しても
>CATCH ブロックを用意していないときは、制御は Microsoft Foundation Class
>ライブラリのモジュールに移り、エラー メッセージを出力してプログラムを終了
>します。
433426:03/05/08 12:59
強制終了になるのを回避したくて、キャッチしたのですが、
>>428 に書いたようなコンパイルエラーです。
>>433 /MD(/MDd) or /MT(/MTd) かな?
435426:03/05/08 14:14
コンパイルは通るようになりました。有難うございまつ。

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
これがBCBでのコードです。これだとプログラムは終了しません。
が、MFCで、
BOOL CWinApp::InitInstance()
{
try {
int nResponse = dlg.DoModal();
} catch (const std::exception& e) {
MessageBox(0, e.what(), "catchされてないエラー", MB_OK);
}
}
だと、プログラム自体終わってしまいます。
もっと良いキャッチの場所は無いでしょうか?
>>435 それはSEH使わんといかんのかな?詳しい人きぼんぬ。
437426:03/05/08 14:40
>SEH
はつみみです。

で、ググったら、
http://www.microsoft.com/japan/developer/library/vccore/_core_exception_handling.3a_.overview.htm
>MFC プログラムでは、C++ 例外を使います。構造化例外処理 (SEH) は使用しないでください。
>SEH は、非 MFC プログラム内でだけ使用します。C++ 例外処理と SEH を混用しないでください。
とありました。
例外処理って言語どころかコンパイラやクラスライブラリレベル依存で困りますね。
>>424
まずソースを載せてみてはどうかね。
たったいま例外処理スレの方に書いたとこ。

>>435-436
ダイアログベースかー。
そのダイアログクラスのWindowProcをオーバーライドしてそこで
try-catchすればいける、かも?
でもオレならSDI とフォームビューで書き換えるな。

SEHは放っておいてワトソン博士に任せたい。
自分でコールスタック解析したりしたくないから。
440439:03/05/09 00:38
ところで>>435のVCのコードって、エラーメッセージボックスも出ないで
終わっちゃうの?
メインウィンドウが破棄されるとMFCがPostQuitMessageを
コールするので、メッセージボックスが出せなくなるってやつかな?
441435:03/05/09 10:47
>>440
エラーメッセージボックスは出まつ。

が、キャッチを入れずにdlg.DoModal();の後にメッセージボックスコールを入れも、仰るとおりメッセージボックスは出ません。
442435:03/05/09 10:48
>でもオレならSDI とフォームビューで書き換えるな。

すごい興味深い内容だけど、ソースコードで見たいな...
>>435
Wincore.cpp にある AfxCallWndProc() 関数内の CATCH_ALL に引っかかってる?
444デフォルトの名無しさん:03/05/09 20:39
超初心者でもうしわけないのですが、
Editコントロールに複数行をコードから表示したい場合どうすればいいのですか?
リソースエディタのスタイルでは複数行と改行を許可にチェックは入れています。

CString str1 = "aaaa\nbbbb" とすると
エディットボックスには、
aaaa
bbbb
と表示されてしまいます

aaaa
bbbb
と表示したいのです・・・。
>aaaa
>bbbb
>と表示されてしまいます

>aaaa
>bbbb
>と表示したいのです・・・。

何が違うのこれ。
>>445
ん?分かんない?環境が違うのかな・・・俺んとこじゃあ(ry
  _, ._
( ゚ Д゚) ・・・
よくわからんけど\r\nで解決。

俺んとこでも同じに見えるよ・・・
449444:03/05/09 22:33
>>445-448
レスありがとうございます。
あうっΣ(´Д`lll) カキコで変換されてしまってたようです。
aaaa・bbbb みたいな形で1行になってしまっていたのでした。

>>448さんの言う通り
CString str1 = "aaaa\r\nbbbb"としたら2行に表示されました。
ありがとうございました。
450デフォルトの名無しさん:03/05/09 23:59
すいませんが、もう1つ質問があります。
FormView上に貼り付けたEditコントロールのフォントを変更したいのですが、
どうにもよくわからないのです。ヒントでいいので教えてください。
SetFont
452450:03/05/10 00:43
>>451
上手くいきました。ありがとうございました。

(このくらい調べろと言われそうですが、、調べてSetFontとか
CreateFontIndirectとかわかってたのですが、どうにも上手く
いかなくて、もしやエディットコントロールは無理なのでは?Σ(´Д`lll)
といろいろ悩んで・・・レスが出たときにやっぱりできるのだと
もう1度試行錯誤して・・・なのでご了承を!ヽ(`Д´)ノ)
453435:03/05/10 01:20
>>442
ごめん。ソース書くのはめんどくさい。
あらすじだけで勘弁して。別に普通にこうするんだけど。

MFC AppWizardでSDIアプリを作って、
ビューの基底クラスをCFormViewにおきかえて、
そのビューのダイアログリソースは旧ダイアログアプリで
使ってたダイアログをコピってきて貼り付ける。
あとはごりごりとロジックを移植していく。

で、例外処理はInitInstance, ExitInstanceと
各ウィンドウのWindowProcの中をtry-catchして処理。
454デフォルトの名無しさん:03/05/10 21:23
CTreeCtrl で LVITEM と関連付いていないものがあるとします。
それで、ItemTextなどを指定してLIVTEM を取得する方法はありませんか?
455デフォルトの名無しさん:03/05/11 06:36
CTreeCtrlなのにLVITEM?
CListCtrlみたいなFindItemとかがなければ
ループで一つ一つ探すしかないんじゃない?
456デフォルトの名無しさん:03/05/12 00:26
すいません。HTREEITEMです。
457420:03/05/12 02:59
かなり遅れましたが原因がわかりました。全然違いところにありました。
メインのダイアログをSetWindowPosでTopmostに表示していたため、
リストビューにLVS_EX_INFOTIPスタイルを設定しても、ツールヒントが
メインダイアログの後ろに表示されていました。
これは仕様なんでしょうね・・・
458デフォルトの名無しさん:03/05/12 13:57
テキストをマウスでクリックしたときのイベントを
ClassWizzardで作成しましたが、起動されません。
どうしたら良いのでしょうか?
459458:03/05/12 14:01
具体的には、CTEXTのクリックイベントを作りたいです。
>>459
CStaticとかCEditではないの?
461459:03/05/12 14:59
ごめんなさい、ぐぐったらわかりました。
http://www.athomejp.com/goldfish/mfc/static/onclick.html

でも、このへんBCBに激しく負けてないことない?
BCBなら、
Text1.OnClickとかOnDblClickがプロパティになってて、
GUIのダブルクリックでイベントハンドラ開くか、または外から関数設定出来るし、
その関数にsenderっていう、Text1の実態が入ってて同じ処理ならイベントハンドラ使いまわしだし。
なんだ、それが言いたかっただけか
>>461
ダイアログだったらリソースエディターで通(略
某島社員も大変だな…
>>463
ちゃんと嫁。
ダイアログエディタでダブルクリックしただけじゃ、イベントハンドラできるけど、起動されん。
M$厨ったら...
BCBのTLabelのイベント調べたら、
>OnClick, OnContextPopup, OnDblClick, OnDragDrop, OnDragOver
>OnEndDrag, OnMouseDown, OnMouseMove, OnMouseUp, OnStartDrag
これだけあるし、派生でイベント足せるし。

それに対して、CTEXTは、BN_CLICKEDだけってどういうことよ?
>>465
そういうことだよ。
今更な話題をあえてもってくる理由とは
VC初心者のBCB信者も大変だな。
とりあえず、CTEXTってなんだよ…
CTEXT age
リソーススクリプトのCTEXTのことかな。
スタティックコントロールくらいは言って欲しかったね。
MFC プロジェクト作りますた。
何も変更せずビルドしますた。
そのままデバッグ実行しますた。
フリーズしますた。


   ど う す れ ば い い ん だ

>>471
そんな日は寝るに限る。
473471:03/05/12 20:29
ちょっとふざけた書き方でしたが、
ホントにどうすればいいのかサッパリで...。
何が原因なんでしょうか?
>>471
っで環境は?



















と煽って欲しいんですね。
>471
VS.NETproでそれなったことある。
漏れの場合、IISのインストールが正しく出来てなかった。
マニュアル見てIISだけ入れなおしたら、デバッグ通るようになった。
MFC7で追加されたクラスで何か便利だと思うものある?
よく言われるのはDHTML系のクラスとメッセージマクロだけど、
他にもこんなのがこんなふうに使える!とかあったらきぼん。
477471:03/05/12 21:04
>>474
経験したことのある人なら環境も分かるかと思いまして。
ちなみに、環境は Windows XP Pro. + Visual Studio .NET Academic です。

>>475
その線でチャレンジしてみたいと思います。
>経験したことのある人なら環境も分かるかと思いまして。

真の教えて君としてはなかなかの筋。
479デフォルトの名無しさん:03/05/12 21:39
CListCtrl(リストビュー)のことでお聞きしたいのですが、
エクスプローラなどでは、
選択→濃い青、未選択→白、選択(フォーカスなし)→灰 ですが、
CListCtrlを貼り付けて適当にアイテム追加して実行すると
選択→濃い青、未選択→白、選択(フォーカスなし)→白 となってしまいます。
これでは、未選択と選択(フォーカスなし)の区別がつかないのですが、
これは、フォーカスを自分でチェックしてその時に灰色で描画するように
ぐりぐりとコードを書かなければならないのでしょうか?
>>478
真の教えて君は必要なことを書かずについ余計なこと書いちゃうからね。
481471:03/05/12 22:29
>>475
IIS ではありませんが、
一部修復インストールすることで解決しました。
ありがとうございました。
482デフォルトの名無しさん:03/05/12 23:24
>>499
試してないんで違うかもしれんが、
LVS_SHOWSELALWAYSを追加したらどう?
483471:03/05/12 23:26
と思ったら、何かまた新規プロジェクトを作ったら
同様の症状が現れましたね。
とりあえず何かすれば症状が治まるようです。
まぁ、訳分かりませんが、とりあえずそれで我慢しときます。
484479:03/05/13 02:13
>>482
ビンゴです!エクスプローラと同様の表示になりました。
CListCtrl(リストビュー)のプロパティに「常に選択を表示」と
いうのがありました。o( 〃゜O゜〃)ゝアイタタタ・・・
ありがとうございました。
DDX/DDVってなんじゃ
これってpublicな変数とちゃうんか
わけわかめ酒
>>485 (;´Д`)
MFC Programmer's SourceBookの日本語訳のページが見つからないのですが、
どこにあるのか教えて下さい
488 :03/05/14 17:37
CReBar使った時の各コントロールバーの位置を
記憶しておく方法ってなんか無いですか?
>>488
GetReBarCtrl()とGetBandInfo()かな?
490 :03/05/14 18:47
REBARINFO のどこにその手の情報が入っているのですか?>>489
レバーコントロール。
語源:取っ手の形をしているから。
レバー = lever
>>490
REBARINFOじゃなくてREBARBANDINFO

UINT cxMinChild
UINT cyMinChild
UINT cx
UINT wID
UINT cyChild
UINT cyMaxChild
UINT cxIdeal
UINT cxHeade
あたりでどうにかならないか?

>>491
猫ではそう呼んでるね
494デフォルトの名無しさん:03/05/15 23:46
ReBarの様なフラットなビットマップボタンをダイアログ上で
利用するにはどうすれば良いのでしょうか?
ご教授お願いいたします。
495デフォルトの名無しさん:03/05/15 23:49
>>494
ツールバーでいいんでないの
496デフォルトの名無しさん:03/05/15 23:57
マルチスレッド@MFCの質問っす

MSDNには「CWinThreadオブジェクトを使わずにスレッドを作成したアプリではそのスレッドからMFCオブジェクトにアクセスできない」とあります。
これはつまり、たとえばスレッド関数内のローカル変数のCStringオブジェクトを作ったり使ったりしちゃまずいということですか?
AfxBegiんThreadでつくったスレドも上記の「CWinThreadオブジェクトを使わないで作成したスレッド」に該当しますか?

>>496
AfxBeginThreadはCWinThread オブジェクトへのポインタを返す
498494:03/05/16 00:29
自由に配置したいんです。
>>498
そういうボタンを自分で作るか、MFC7にあるCDHtmlDialgみたいな名前のクラス使ってはどうか。
>>498
CReBarCtrlをCreate()できない?
ダイアログ上でもできそうだけど
501デフォルトの名無しさん:03/05/16 00:33
>>494
CBitMapButtonかCButtonをオーナードローかけるか...
>500
そもそもReBarってコンテナだからボタンとは関係ないのでは?
503500:03/05/16 00:37
>>502
そうなんだけど、元投稿>>494でReBarって書いてたから。
なるへそ
505499:03/05/16 00:40
Dialgってなんだ。CDHtmlDialogね。
506デフォルトの名無しさん:03/05/18 01:08
自前で、スクロールバーのような機能を持つボタンを作成しています。
1.CMyButton::OnLButtonDown()の中でGetCaptureし、
2.CMyButton::OnMouseMove()の中でマウスを追跡&関連付けられたエディットの数値更新
3.CMyButton::OnLButtonUp()でReleaseCapture
という感じになっているんですが、2のエディットの数値を更新する所で、エディット
が再描画されず困っています。
なんででしょうか。エディットにWM_PAINT自体行ってないように見えます。
507デフォルトの名無しさん:03/05/18 01:23
今からMFC初めてもいいですか?
>>506
エディットってCEdit?
よくわからんが、とりあえず途中にTRACEマクロとか入れたりして、
どこまでがちゃんと動いてるかを確認しよう。

>>507
いいんじゃない?がんがれ〜
509506:03/05/18 01:48
>>508
>エディットってCEdit?
そうです、CEditです。

2.の中で、SetCursorPosを使って、マウスが動いた分を無かった事にしているのですが、
どうもこれが問題のようです。わけがわかりません。
GetCaptureじゃなくSetCaptureってのはどうでもいいのか・
511デフォルトの名無しさん:03/05/18 05:22
switch(result) {
case IDOK:
CString fullPath = dialog.GetPathName();
try {
CFile aFile( char fullPath );
}
catch(CFileException *e) {
e->Delete();
}
case IDCANCEL:
break;

っていうプログラムで

fullPath' の初期化が 'case' ラベルによって行われませんでした。

こんなエラーがでてくるのですが…
どうすればいいですか?(゚д゚;)
512372:03/05/18 05:29
>>511
CString fullPath;
switch(result) {
case IDOK:
fullPath = dialog.GetPathName();
以下略
>>512
どもありがとうございました〜〜〜〜〜!
解決しますた!
>>506
Invalidate() を調べてみるよろし
515508:03/05/18 12:34
>>509
あー、3Dモデリングソフトによくあるアレね。
<ボタン押してマウスドラッグすると、関連したCEditの値が変わる

OnLButtonDown,OnMouseMove,OnLButtonUpの
ソース上げてもらえれば原因わかるかもよ。
>>513
switch case文の中で変数の宣言をするとエラーになります。
場合によって変数が宣言されないということがあるためです。
517デフォルトの名無しさん:03/05/18 15:21
ドラッグしてからドロップするまでマウスカーソルが変わるというSpy++のような
動作を作りたいのですが、上手くいきません。
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
::SetCursor(::LoadCursor(NULL, IDC_SIZEALL)); // とりあえず4方向矢印カーソル(IDC_SIZEALL)でテスト

CDialog::OnLButtonDown(nFlags, point);
}

上記のように書いたのですが、ドラッグして少しでもマウスを移動させると
もとのカーソル形状に戻ってしまいます。
どうすればいいのでしょうか?
SetCursorのあとでSetCaptureしてみるとか。
519517:03/05/18 17:42
>>518
ありがとうございました。上手くいきましたヽ(´ー`)ノ
エディットボックスに書いた文字列を
振り当てたCEditの関数m_editを使ってdatというCStringに書きこむとき、

m_edit.SetWindowText(dat);

なのですが、読みこみはどうしたらいいのでしょうか??
GetWindowText
>>511
すでに解決した質問にレスつけるのもなんだけど……


switch(result) {
case IDOK:
{ //ここから
CString fullPath = dialog.GetPathName();
try {
CFile aFile( char fullPath );
}
catch(CFileException *e) {
e->Delete();
}
} //ここまで
case IDCANCEL:
break;

スコープ使うという手も。
523デフォルトの名無しさん:03/05/18 23:26
MFCのプログラムを見るとよくCWndから派生しながらCeate時には
AfxRegisterWndClass()で独自のウィンドウクラスを登録している
のを見かけますがこれってどんな意味があるのですか?
エディットボックス(edit1)に、00 1A CA 8D
の様に、ファイルのバイナリを表示させ、
もう一つのエディットボックス(edit2)に
8DCA1A00 hex
の十進数になおした整数を表示させたいのですが、

HANDLE afile;
BYTE buff[4];
CString buf;
CString path;
DWORD dw;
m_edit3.GetWindowText(path); ←これはパス所得用エディットボックスです。
afile = CreateFile(path,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(afile == INVALID_HANDLE_VALUE){
MessageBox("ファイルがオープンできません", "ファイルのオープンの失敗", MB_OK);
}
SetFilePointer(afile, 0, NULL, FILE_BEGIN);
memset(buff, 0, sizeof(buff));
ReadFile(afile, &buff, sizeof(buff),&dw,NULL);

ここの処理がわかりません…

m_edit1.SetWindowText(なにか);
m_edit2.SetWindowText(なにか);

どうしたらいいでしょうか
526 :03/05/20 13:03
DrawText で矩形に文字書くときに
左右にマージンとる方法ないですか?

文字列に空白足すとかはしないで
>>526
センタリングして表示すれば?
528 :03/05/20 13:42
>>527
センタリングはダメなんです・・・
数字なので、元々右寄せしてて・・・
>>526
マージン分だけ矩形を狭めればいいんじゃないの?
530 :03/05/20 17:27
>>529
DrawTextの前に、引数として渡すRECTに
InflateRect(-4, 0)したらできました。ありがとう。
>>525
すみません汗
いろんなスレの先輩達にさまざまな方法
を教えてもらいたかったんです…涙
>>531
もう二度と来るな
回線切って首吊って氏ね
533デフォルトの名無しさん:03/05/21 00:17
>回線切って首吊って

いまどき古いな・・・
>>533
そんなことをわざわざageて書くおまえに惚れた
>>531
むしろ、生きるな!
ウインドウメッセージが
全てのアプリケーションに送られる前に捕まえて、
加工するようなことは可能でしょうか。
(自アプリと関係ないウインドウメッセージを補足・加工)

 もし、可能でしたら、その実現方法(プロジェクトの種類など)も
教えていただけるとうれしいです。よろしくお願いします。
>>536
漏れは良く知らんが、DLLでフックじゃないかい?
そうだね。フックだね。
実は漏れもフックだと思った
逆にフックじゃないかな?
フックってなんだろう?



どうでもいいがピーターパンを思い出した
漏れはノックだと思う。
甘いな。サップだ。
モックンかもしれない。
545537:03/05/21 22:29
             /ヽ       /ヽ
            / ヽ      / ヽ
  ______ /U ヽ___/  ヽ
  | ____ /   U    :::::::::::U:\
  | |       // ___   \  ::::::::::::::|
  | |       |  |   |     U :::::::::::::|
  | |      .|U |   |      ::::::U::::|  ・・・・・
  | |       | ├―-┤ U.....:::::::::::::::::::/
  | |____ ヽ     .....:::::::::::::::::::::::<
  └___/ ̄ ̄      :::::::::::::::::::::::::|
  |\    |           :::::::::::::::::::::::|
  \ \  \___      ::::::
SDIのプログラムを作っているのですがダイアログベースのOnOKに相当する
オーバーライドできる関数はどれなんでしょうか。終了するときにダイアログを出したいんです。
ノックはセクハラだから違うと思うけど、逆に当たってるかも。
>>546
OnCloseでどうか。
パンチは引退したから違うな。
正解はファック
551546:03/05/22 00:39
>>548
ちゃんとできました。ありがとうございました。
ダイアログベースのアプリで
ShowWindow(SW_HIDE)したときのような
ウィンドウを表示しない状態で起動させるには
どうすればよいのでしょうか
>>552
マルチさんようこそ
>>552
非表示にして起動って、どういうUIなの?タスクトレイアプリか何か?
それによって答えが違う。
555552:03/05/22 14:55
>>553
コンヌツワ

>>554
そのとおりです
現状はボタンクリックでHIDE->アイコン表示としています。
でOnInitDialogでHIDEしたりしても無駄みたいなのでどうしたものかと・・
そもそもトレイに入れるときHIDEでいいのかという疑問もあったり・・
あー、前に試したけどDialogアプリケーションって非表示には出来なかった
気がする。
俺は非表示のウィンドウをメインウィンドウにして、必要なときにダイアログ
を表示するように組んだ記憶がある。
ウソ言え。簡単にできたはず。
558554:03/05/22 15:41
>>555
だったら >556の「非表示のウィンドウをメインウィンドウにして、必要なときに
ダイアログ」がよいでしょう。

>そもそもトレイに入れるときHIDEでいいのか
省リソースという点から言うとあまり良い方法ではないと思う。

>>556
>前に試したけどDialogアプリケーションって非表示には出来なかった気がする。
CWinApp::InitInstance()でDoModal()せず、モードレスにすれば実現可能。
559552:03/05/22 17:20
>>558
どもです
やってみます。

ところでモードレスにした場合すぐにアプリケーションが終わってしまいますが
使いどころは有りですか?
>>559
// ダイアログが閉じられてからアプリケーションのメッセージ ポンプを開始するよりは、
// アプリケーションを終了するために FALSE を返してください。
return TRUE;
CListCtrlにCImageListのアイコンを設定したのですが、InsertItemの時でなく、そのあとに
アイコンを変更する方法はないでしょうか。
>>560
なるほど〜

InitInstance()で
dlg = new CTestDlg; dlg->Create( ... ); m_pMainWnd = dlg; return TRUE;
デストラクタで
dlg = (CTestDlg*)m_pMainWnd; dlg->DestroyWindow(); delete dlg;
でいいんでしょうか?
(´-`).。oO(OK押したらウィンドウはどこへ行くんだろう・・・)
563デフォルトの名無しさん:03/05/22 19:29
ユーザー定義メッセージを使ってプロセス間でやり取りしたい場合、
受信側はCWnd::WindowProc()をオーバーライドしてそこで処理すればいいですか?
処理をしたらTRUEを返し、関係ないメッセージだった場合は基底クラスのWindowProcに渡す
でOKですか?
>>563
んなことしないでON_MESSAGE使えばいいのでわ?
>>562
消滅は違う。こんな感じ↓で ~CTestApp は何もしない。

void CTestDlg::OnCancel() { DestroyWindow(); }
void CTestDlg::OnOK() { DestroyWindow(); }
void CTestDlg::PostNcDestroy() { delete this; }
566562:03/05/22 21:05
>>565
なるほど・・ありがとうございます!
MDIアプリのCXXXDoc::Serializeでファイルを読み込み、
1.読み込みに成功したらMDI子ウィンドウのサイズを固定する
2.読み込みに失敗したらMDI子ウィンドウを破棄する
としたいのです。
(可能であれば、CXXXDoc::Serialize内での)MDI子ウィンドウのサイズ固定方法と破棄方法を教えて下さい。
>>567
ModifyStyle/ModifyStyleEx使えばスタイルの変更ができる。
破棄する場合はWM_CLOSEとかを送ればいいんでないかい?
569567:03/05/23 18:45
>>567
ウィンドウハンドルを得るにはどうすればいいのですか?
570569:03/05/23 18:46
×>>567
>>568
です。
571デフォルトの名無しさん:03/05/23 19:50
ドッキングウィンドウ(ダイアログバー)を使っているのですが、
その中のTreeViewからCMainFrame にイベントを受けたいのですが、
afx_msg void OnDblClickTree();
と、
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
//}}AFX_MSG_MAP
ON_CBN_DBLCLK(IDC_TREE, OnDblClickTree)
END_MESSAGE_MAP()
で、
void CMainFrame::OnDblClickTree()
{
}
では受け取れません。
どう対処すべきですか?
572サンプルです:03/05/23 19:55
女女女女女女女女女女女女女★2日間無料★
http://endou.kir.jp/betu/linkvp2/linkvp.html
>>571
ダイアログバーにメッセージをルーティングしてないんじゃ?
>>569
最近の厨房様は検索という言葉をご存知ないらしい
ttp://www.google.com/search?q=MFC+MDI+%E5%AD%90%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6
575デフォルトの名無しさん:03/05/23 23:06
>>574
調べてここまで行き着いてダウンしたんっす。
576デフォルトの名無しさん:03/05/24 00:20
スレッドの排他制御をしたいんだがCRITICAL_SECTIONをグローバルにしちゃ
ダメですか?
クリティカルセクションってグローバルで使うもんでないの?
>>577
んなことないだろ。
保護したいもんと同じスコープで使えばいいと思う。
579名無し@沢村:03/05/24 02:24
>>575
CDocument::GetFirsutViewPosition()
CDocument::GetNextView()
580567:03/05/24 15:47
>>579
>>575ではありませんが、ありがとうございます。
CXXXDoc内からCXXXViewにアクセスできました。
(既に、CXXXViewのOnInitialUpdateでGetDocumentして、CXXXDocに設定したフラグを得るように実装してしまいましたが)
581580:03/05/24 15:51
×CXXXDoc内からCXXXViewにアクセスできました。
○CXXXDoc内からCViewにアクセスできました。
です。
メインスレッドとワーカスレッドという本質的に異なる2つのクラス
の両方の間を取り持ち、インスタンスは一つしかないクリティカルセクション
どちらか一方のクラスのメンバにするべきかグローバルにすべきか。。
みんなならどうする?
すれ違いスマソ〜
>>582
すげぇ。理解できなかった。
簡単にいうと
クリティカルセクションのオブジェクトをどこに持たすか。
です。

グローバルに持たすかCDialogのメンバにして
そのCSを利用するスレッドにはCDialogへのポインタを渡して利用するとか。
どちらがより優れていますか?

585吉岡美穂:03/05/24 20:32
>>584
好みの問題
もしグローバルにCRITICAL_SECTIONのオブジェクトとか
イベント通知用のHANDLEを宣言しても
初期化処理とかはCDialogの初期化時にいっしょにしてしまうことになるから
CDialogのメンバにすべきかな。でもポインタ渡すのめんどいしな。
なやムー
CStringで10*10の配列に文字列を格納したいときにとどのように配列を作ればいいのでしょうか
int x = 10, y = 10;
CString* pTest = new CString[x][y];
このようにすると、文字列ではなく1文字だけしか格納できなくて困っています。
>>587
それコンパイル通るの?
589587:03/05/24 21:14
通りませんでした。
CStringArrayをnewしてはどうか?
591587:03/05/24 21:26
>>590
ありがとうございます。そうしてみます。
592吉岡美穂:03/05/24 22:09
>>587
std::vector<std::vector<CString> >
593デフォルトの名無しさん:03/05/25 00:17
>>587

CArray<CString,CString&>
594デフォルトの名無しさん:03/05/25 10:06
エディットボックスの変数がint型の時、変数に何を代入すれば
実行した時、表示を空白にできますか?
NULL入れたら「0」って表示されてしまいました。
CString型だったら「""」を変数に代入したら空白が表示されました。
>>594
空白表示したいんなら、int 型じゃまずいんじゃないの ?
int a; printf("%d", a);
さて、a に何を代入したら空白が表示されるでしょうか ? と聞いてるのと同じだと思うが。
素直に CString 型にしといて、普通は文字列に直して表図するようにすればいいと思う。

エディットボックス側でなんか強制的に空白を表示するような機能があるなら別だけど...。
>>595
エディットボックスにint型を割り当てても、変換してWindowTextを表示しているだけだ。
空白にしたければエディットボックス自体を操作すればよい。
>>594
int型、CString型なんてやめて、CEdit型で操作しれ。
598デフォルトの名無しさん:03/05/25 12:45
>>579
返事なってへんのとちゃう?
if( !m_iEdit )
 SetDlgItemText( IDC_EDIT, "");
>>582
シングルトンにして両方に持たせる
601デフォルトの名無しさん:03/05/25 13:37
別のプロジェクトで作成される DLL があって、その中のリソースと
して定義されてるダイアログを、自分のプロジェクト内からクラス
ウィザードで操作するのって、なんかいい方法ある?
アプリケーションを終了させる為に
::PostQuitMessage(0);
とすると、メモリーリークが出てしまうんです。(涙
どうしたら良いんでしょう? 助けてください。
603吉岡美穂:03/05/25 16:51
>>602
その質問で答えが出てくると思う?
その質問で答えが出てくると思う?
>>602
おもしろい質問だなあー(w.さすがの吉岡美穂でもむりだろ.
メモリーリークの意味から考えていったらいいと思います.
605デフォルトの名無しさん:03/05/25 21:01
>>599
やってみたけど、「0」って表示された。もう少し説明をお願いします。
ES_NUMBERスタイルがついてるんぢゃない?
IDがMFC4…
>>602
それはメモリリークしてるんだよ。
お前の頭含めて。
>>608
最近漏れの頭のなかのスタック領域の破壊が
進んで来ているようなんだが…
>>607
IDなど(ry
>>602
つかさ、命令を全角で書くなんざプログラマの風下にもおけないと思うわけよ
612デフォルトの名無しさん:03/05/26 11:34
どなたか教えて下さい、質問です。
C#では画面(DOS画面)のクリアの時にエスケープシーケンスで
printf("\033[2J");
とやれば画面のクリアができますが、C++ではどのようにコーディングすればいいのですか?
ちなみにOSはWindows2000を使用しています。
>>611

「命令」って...

ベーシッカーですか?、あんた
アセンブりゃーだろ
615デフォルトの名無しさん:03/05/26 13:23
普通に閉じてもリークしないなら、送るウィンドウが違うかかな
617デフォルトの名無しさん:03/05/26 16:36
ツールバーを使いたくてMicrosoft Toolbarコンポーネントをダイアログ上に配置しました
ボタンの追加やクリックイベントの検出までは出来たのですが、
どのボタンが押されたのかが判定出来ません…
皆様はどのようにしてるのでしょうか?
>>612
いつC#にprintfなんか出来たんだ?
619デフォルトの名無しさん:03/05/26 17:06
すんません、ちょっと質問させて下さい。
VC++ 6.0(MFC) & Win2000 SP3 & IE6 SP1です。

通常、アプリケーションを起動すると
タスクバーにそのアプリケーションのスイッチ(ボタン)が追加されますが、
これを右クリックした時に出るコントロールボックス?のメニューに
自分で作った項目を追加、あるいは既存メニューの削除をしたいのですが、
どのクラスのメンバを追ったらいいのかいまいち検討がつきません。

どなたかご教授頂ければと思います。
>>619
GetSystemMenu()
>>620さん
ありがとうございます。なんとかやってみます。
質問です。
VBで既に出来上がっているプログラムをVCに書き直す作業が必要です。
手っ取り早くやるにはどうしたらいいですか?
VCで書き直した後にいろいろと拡張したいのですが。
>>622
一から作り直す。
624デフォルトの名無しさん:03/05/27 00:33
VC6.0のIDEのツールバーですが、これはMFCのCToolBarを使って
ないみたいですがなんででしょう。
(VCはVC(MFC)で作られているんじゃ...)
625617:03/05/27 01:07
624の質問に便乗して、ついでに回答よろ。
VCのツールバーは全部クラスから作ってるんじゃ?
>>624
Spy++で覗いて見れ。
>>625
CodeGuruにある。URLは失念した。
628617:03/05/27 01:15
>>627
サンクスコ!
>>624
VC使ったからと言ってMFCつかわにゃならん義務があるわけじゃねぇし。
630デフォルトの名無しさん:03/05/27 16:12
どなたかご指南願います・・

VC++6.0+MFCなんですが、
コンボボックスのリストのアイテムを選択した後
エディット部分に表示される瞬間が取得したいのですが・・

CBN_EDITCHANGE
CBN_EDITUPDATE
の2つは、リスト選択時にはまったく動きません。

CBN_SELCHANGE
の方は、まだエディット部分にテキストが表示される前なので
やはりダメです・・

何か良い方法はないでしょうか?
【PC版】Ever17-the out of infinity【大失敗作】
http://www2.bbspink.com/test/read.cgi/erog/1053601941/
632デフォルトの名無しさん:03/05/27 16:31
よろしくおながいします。

実行したとき、ウィンドウも開かずフォーカスも移らずに
そっと内容を実行して終了する(例えばデータファイルを
開いてフィルタリングして終了する、など)、そんなプログラムを
VC++で作りたいのですが、ベストな方法は?

他のプログラムから呼び出して使いたいのですが、
フォーカスが移るとまずいのです。
633_:03/05/27 16:31
634デフォルトの名無しさん:03/05/27 16:31
◎よろしかったら見て下さい◎
http://endou.kir.jp/betu/linkvp2/linkvp.html
CBN_CLOSEUPは?
636630:03/05/27 16:43
CBN_CLOSEUPもマズイです・・
これも、まだエデット部分に表示される前なので・・
>>632
単にShowWindow()しなければいいだけかも

他のプログラムから実行するのであればコンソールアプリにして
呼び出すプログラムがCreateProcess()でコンソールを
作らないようにしてもいいけど
638630:03/05/27 16:49
も・もしかして不可能?・・(泣
>>630 何がしたいのかな?
>>630
>CBN_SELCHANGE
>の方は、まだエディット部分にテキストが表示される前なので
テキストを取得するのであれば、このときにGetLBText(), GetCurSel()
641630:03/05/27 16:58
>>639
コンボボックスのリスト選択時に、
選択された文字列が、エデット部分に表示されたますよね?
その表示された瞬間に、エデット部分の文字列を変更したんですよ・・
その為には、リストを選択されたあと、
エデット部分に表示される瞬間の取得が必要な訳でして、
その表示される瞬間が取得したいのですが、
630にも書いたとおり うまく取得できません・・
642630:03/05/27 17:02
>>640
ダメなんですよ、それも・・
CBN_SELCHANGEでイベントを受けとって
GetLBText()でテキストを取得して、テキストを変更したとしても
その時点では、リストで選択されたテキストが、エデット部分に表示されていないので
自分が変更した後に、再度変更されるんですよ・・(泣きじゃくり
>>630
CBN_SELCHANGE受け取った後自分に自前のメッセージをPostしなおせ。
644エデット:03/05/27 17:19
>>630
いっそのことコンボボックスの上に別のエデットボックスを上書きして
そのエデットボックスに表示するようにしたら
645632:03/05/27 17:50
>>637
回答ありがとうございます。

え?DOS窓抜きで実行できるコンソールアプリが
作成できれば理想的なんですが、そんなの出来るんですか?
(^_^;;

呼び出し側は実行するファイル名を指定できるだけで、
中のソースは書き換えられないのですが…
646637:03/05/27 18:16
>呼び出し側は実行するファイル名を指定できるだけで、
>中のソースは書き換えられないのですが…
呼び出し側のCreateProcess()でコンソールを出ないようにする方法しか
しらない。
起動直後にFreeConsole()しても多分一瞬コンソールが表示されると思うし、
このへんのことはここよりもWin32Apiスレのほうがいいと思う。
647デフォルトの名無しさん:03/05/27 18:25
CString cs;
m_combo1.GetWindowText(cs);
という記述をOnButton関数内で行ない、デバックしてみるとcsに関して以下のような
CXX0017: Error: シンボル "cs" が見つかりません
というようなコメントがでて、コンボボックス内に表示している文字を読み取ることができませんでした。
何故なのでしょうか。だれか教えてください。
648630:03/05/27 18:31
レスどうもです。

>>643
でも、リストからエデット部分に表示される前では
意味が無いような気がするんですが・・
エデット部分に表示された直後にメッセージを取得する事は可能ですか?
具体的に教えて頂けるとありがたいのですが・・

>>644
たしかに、その方法だとイケそうなんですが、
コンボボックスにアクセスするコードが大量にありますので
すべて書き直すのはちょっと・・
出来れば、コンボボックス自体でやりたいんですよね・・
>>647
そのコード自体は間違ってないとおもいますよ。
OnButton関数全体を書いた方がいいかも。
>>648
>出来れば、コンボボックス自体でやりたいんですよね・・
...サブクラス化せいよ
651632:03/05/27 18:41
>>646
ありがとうございます。
そっちで聞いてみます。
652630:03/05/27 18:45
>>650
なるほど・・ サブクラス化ですか。
こういう方法があるのか・・
ちょっと調べてみます。どうも。
>>648
SendとPostの違いはわかるよね。
654630:03/05/27 18:52
>>653
分かってなかったッス・・

サブクラス化にPostMessage、よい勉強になりました。
どうもです。
655デフォルトの名無しさん:03/05/28 09:33
AppWizard 使ってダイアログベースのアプリケーションを作成して、
App クラスの InitInstance() でやりたい事やって、FALSE で
抜ければいいんじゃん?
コマンドラインとGUIの両方から実行できるツールで、引数やらの
実行環境が正しい時のみ実行し、そうでない時はダイアログを
表示して…なんてやりたい時に、よくやる手だが。

A.exe が作成するプログラムだったら、こんな感じに

BOOL A::InitInstance()
{
   AfxEnableControlContainer();

   #ifdef _AFXDLL
      Enable3dControls();
   #else
      Enable3dControlsStatic();
   #endif

   { ←ここから
      // do whatever you want like if (2 == _argc) {
      // or CString csStrTmp(__argv[1]);
      …
      return FALSE;
   }←ここまで

   CWADlg dlg;
   m_pMainWnd = &dlg;

}
656デフォルトの名無しさん:03/05/28 09:36
↑632、637、646 の話ね。抜けてたけど。
657632:03/05/28 10:54
>>655
わざわざソースまで書いていただいて、ありがとうございます。
win32APIスレでも同じやり方を教えていただき、試してみた
ところ、上手く行きました。ありがとうございました。
勉強になりました。
現在大学の課題をやってます。ワケわかりません。
おまいら、助けれ。

<例>
#include<stdio.h>
double beki(int m, int n);
void main()
{
int i;
for(i=2;i>=-2;i--){
printf("3^%d=%f\n",i,beki(3,i));
}
}
double beki(int m,int n)
{
int i;
double p=1.0;
if(n>=0){
for(i=1;i<=n;i++)
p=p*m;
return p;
}
else
for(i=1;i<=-n;i++)
p=p/m;
return p;
}

<課題>
beki(m,n)関数を用いて、数列an=(1+1/n)^nが自然対数e=2,71828に近づくことを調べよ。

ってかbekiって何よ。
659デフォルトの名無しさん:03/05/28 11:42
べき乗だろ。
それがなにかわからないならC以前の問題。

あと宿題の質問はこっちな
http://pc2.2ch.net/test/read.cgi/tech/1053963794/l50
リストビューコントロールの表示をレポートにして、そのリスト内の
各アイテムをコンボボックスには出来まつか?
>>660
オーナードロー
662デフォルトの名無しさん:03/05/28 13:58
山崎渉のせいですごいことになってんな。
とりあえずage
質問です。
MSDNでは以下のようなことが記述されています
■マルチスレッド : プログラミングのヒント■
「非MFCのセカンダリスレッドからはMFCオブジェクトにアクセスできない」
ここで非MFCのセカンダリスレッドとは_beginthread()などのwin32apiで作成したスレッドとします
(ここで間違ってるかもしれませんが。。)

前述のことは以下のどれでしょう??
@非MFCのセカンダリスレッド内部ではいかなるMFCクラス、オブジェクトも利用できない
A非MFCのセカンダリスレッド内部では主スレッドで生成したいかなるMFCオブジェクトも利用できない
B非MFCのセカンダリスレッド内部ではハンドルラッピング系のMFCクラス、オブジェクトも利用できない
C非MFCのセカンダリスレッド内部では主スレッドで生成したハンドルラッピング系のMFCオブジェクトを利用できない
ここでハンドルラッピング系とはHWND→CWndみたいなハンドルをラッピングするクラスのことです。
アクセス違反で会えなかったキミと、

久しぶりに対面できたから、

今日はSpy++記念日

>663
(1)に一票。
AfxBeginThreadで起動したスレッドだとMFCに必要ななんやかんやを初期化してくれてる
んじゃなかったかな。
ハンドルラッピングっていうと単純に思えるけど、CWndなんてかなりいろいろやってるから
ちっとも単純なラッピングじゃない。
ま、使えるやつもあるかもしれないけど…。
666デフォルトの名無しさん:03/05/29 01:11
AfxMessageBoxの逆みたいに、ポンと文字列を尋ねるような関数ないすか
667名無し@沢村:03/05/29 01:17
>>666
gets()
668デフォルトの名無しさん:03/05/29 01:27
>>667
ダイアログでトリタイのです
ダイアログ自作すりゃいいじゃん。
Editコンポーネント貼り付けるだけだし。
>>665
レスありがとうございます。
自分はCかな〜(というか、Cならいいなー)と思ってるんですよ。(^^;)
実はCSringを非MFCセカンダリスレッドで使ってます。
stringに書き直すべきでしょうか?
みなさんならどうします??


671bloom:03/05/29 19:13
ひとまず寝てから考える。
ちょっと調べたら「終了時にリークする」とかあったけど。

この辺は CRTが使われている場合、CreateThreadでなく_beginthreadにしないと
リークする場合があるのと同じでないの?

ってか素直に AfxBeginThreadを...
_beginthreadex使え
CreateThreadなんて使うな
675デフォルトの名無しさん:03/05/31 00:13
初心者板から追い出されました。

質問です。VC++6.0 MFCでアプリを作ってるんですけど、
クラス外からもアクセスできる外部変数は普通はどのように宣言しますか?
やっぱりcppの先頭でグローバル宣言しておいて、他のクラスでextern宣言して
使用するのが普通なのですか?

今、あるクラスのpublicでメンバ変数(char [255])を宣言しておいて、他のクラスからは

CXxxx* pApp = (CXxxx*)AfxGetApp();

として、pApp->メンバ変数にアクセスしてますが、アサートを起こします。
やり方が間違っているのでしょうか?
それってグローバル宣言というより
単にCWinApp派生クラスのメンバでないの?
>>676
そうです。
派生クラスのメンバをあらゆるクラスから操作したいのです。
やはり問題あるコーディングでしょうか?
678デフォルトの名無しさん:03/05/31 00:24
>>677
問題も何も。
アサートってどこでどんなアサート?
>>675
>やっぱりcppの先頭でグローバル宣言しておいて、他のクラスでextern宣言して
>使用するのが普通なのですか?

あんまり良い事ではないみたいだけどそれで良いんじゃない?
漏れもそうしちゃってたりする(´ー`;)
>>678
アサートを起こしたり起こさなかったり。
ダイアログを切り替えた場合にアサートとなるようです。
今ちょっと再現しないので、内容がちょっとわかりません。。
問題はなさそうですか?
オーババッファフローを起こしてるんかな〜。。
>>678
でました。
File:appcore.cpp
Line:545

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

です。
>>679
やっぱりそれで良いですか。。
皆さんそうしてますか?
周りにVC使いがいなくて相談できないんです。
683デフォルトの名無しさん:03/05/31 00:40
CWinAppの派生クラスのメンバにして他のクラスからはAfxGetAppでポインタをとって
つーのはやり方としてはあると思われ。漏れはいつもグローバルにしちまうけどね。
多分別の原因じゃ。。
684デフォルトの名無しさん:03/05/31 00:43
>>681
いまMFCのソースみてみるね。
>>683
とりあえず、グローバルにして使ってみます。
その方が楽ちんですしね。
ども、ありがとうございました。
>>684
あっ、時間差が。。
ちょっと待ちます。
687デフォルトの名無しさん:03/05/31 00:48
680の文脈から
 アサート ≒ ワーニング、エラー
みたいな意味でアサートという言葉を使用しているけど、
一般的に通じるの?
ASSERTなんとかっていうチェックでエラーを起こしてるから
アサートという表現にしましたけど間違ってますか?
アサートって予期せぬエラーって感じですよね?

689681:03/05/31 00:57
>>686
VC6だよね。
#ifdef _DEBUG
void CWinApp::AssertValid() const
{
(略)
ASSERT(afxCurrentInstanceHandle == m_hInstance);←ココ
(略)
}

該当行は↑なんだけどよく分からん。力になれんなスマン
690デフォルトの名無しさん:03/05/31 00:57
ASSERT()だろ?
多分MFCの内部でハンドルとかを判定してそこでアサートが出たとかそんなんだろ?
別にエラーやわーにんぐをアサートという言い方はしないし、680も言ってないと思うが
691689=678:03/05/31 01:00
名前欄書き間違えた。>>678です。
>>689
うーん。m_hInstanceが0にでもなってそうですね。
ちょっと調査します。
ども、ありがとうございました。
693デフォルトの名無しさん:03/05/31 01:29
構造体についての質問です。
public内に
 struct set{・・・・・・・};
struct set mySet;

と宣言すると構造体を宣言する前はきちんとダイアログが表示されるのですが、構造体を宣言すると例外処理が行なわれダイアログも表示されないまま終了されてしまいました。
どうすればよいのでしょうか?
本当に宣言しただけ?
メモリ解放し忘れとかないよね?
>>693
デバッグしろ。
メモリは位置がずれて、バグが顕在化したんじゃないの ?
>>693
つぅかクラス内の構造体って合法なんでつか?
>>696
合法だよ。

クラス宣言のネスト
クラスは、別のクラスのスコープ内でも宣言できます。
このようなクラスを "ネストされたクラス" と呼びます。
ネストされたクラスは、これを囲むクラスのスコープにあるとみなされ、
このスコープ内で利用できます。
ネストされたクラスを囲むクラスのスコープの外から、このネストされたクラスを参照するには、
完全な限定名を使います。

(MSDNより)
>>697
昔仮に書いたスコープ違いの同名構造体がソースに残ってたりとかしてるんですかね?
699デフォルトの名無しさん:03/05/31 12:59
>>694
メモリ解放???
ソースの中でですか?それとも構造体自信のですか?

ホントに宣言しただけ・・・だと思います。
なんでなんでしょうね・・・
>>699
マルチポストすんな
氏ね
二度と来るなカスが
701デフォルトの名無しさん:03/05/31 15:04
>>700
答えられないからってカッカするなよ プププ
マルチポストが嫌われることぐらい常識だと思うが。
厨房様に常識はない

↓次の人どうぞ
宣言しただけでエラーが突然多発するようになった。
というタイプのバグはあります。
そういうバグはたいていメモリ関連です。
たとえば昔は構造体のメンバにアクセスするのに先頭アドレスから何バイト目とかいう形で
コーディングしたりする人も居ました。
この場合単純にメンバを追加しただけで(バイナリオフセットがずれるから
)エラーになるわけ。
そのほかにもメモリを壊してたけど程度がひどくないため表面化しなかったものが
コードが変化してメモリの使い方がかわってドカンとメモリを壊す→アプリ例外
とか。
>>704
かわいそうに・・・
706デフォルトの名無しさん:03/05/31 17:48
VC6++の初心者です。
タブコントロールのやり方がよくわからないので調べてたら、

[プロジェクト]→[プロジェクトに追加]→[コンポーネント及びコントロール]→[プロパティーシート]
でそれっぽいのが出来るというのを見つけて、
それっぽいのが出来たんですが、

リソースにはタブの部分のダイアログがなくて、
プロパティーに標準でついてると思われる
「OK」「キャンセル」「適用」「ヘルプ」ボタン
ってのが削除ができません。

「適用」「ヘルプ」とかは削除したいのですが、どうすればよいですか?
>>706
propSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
propSheet.DoModal();

で適用は消えるが、ヘルプが消せない(;´Д`)
propSheet.m_psh.dwFlags &= ~PSH_HASHELP ;
もダメ。
自分で作ってる他のアプリでは、ヘルプボタンは何もしなくても最初から
消えてるんだが...おかしいな。
708707:03/05/31 19:15
ttp://www.athomejp.com/goldfish/mfc/dialog/nonhelp.html
PropertyPageの HASHELPフラグも除去する必要があるのか。

CPropertyPage::CommonConstruct()
{
 ・・・
 if (AfxHelpEnabled())
  m_psp.dwFlags |= PSP_HASHELP;
}
が敗因だった。質問に答える側が勉強になってる罠
709706:03/05/31 19:20
>>707
ありがとうございました!

早速やってみます!
リストコントロールのメッセージハンドラ(カラムを押したときの)を呼び出したいのですが
うまくいきません。下は試しに書いてみたのですが、
LPNMLISTVIEW pNMLV;
LRESULT pResult;
NMHDR pNMHDR = reinterpret_cast<NMHDR>(pNMLV);// '型キャスト' : 'LPNMLISTVIEW' から 'tagNMHDR' に変換できません。
SendMessage(LVN_COLUMNCLICK, (WPARAM)pNMHDR, (LPARAM)pResult);// '型キャスト' : 'NMHDR' から 'WPARAM' に変換できません。
どうしたらいいでしょうか。
>>710
こうじゃないか?
NMHDR *pNMHDR = (NMHDR*)pNMLV;

LP〜っていう型はポインタ型だから、NMHDRではなくNMHDR*にキャストすべし。
下のエラーは上のエラーを直せば消える。と思う。
NMHDR pNMHDR
これポインタになってないじゃん
713710:03/06/01 10:12
>>711>>712さん
ありがとうございます。無事コンパイルは通ったのですが、警告が出てしまいました。
無視して構わないのでしょうか
値が割り当てられていないローカルな変数 'pResult' に対して参照が行われました。
>>713
お前はCを理解しているのかと小一時間問い詰めたい…
715710:03/06/01 10:46
>>713
あっ 出来ましたすみません。 説明までしてもらったのに..
申し訳ないんですが、今度はSendMessageがうまくいきません。関数が呼ばれないんです。
>>715
前提知識がなさ過ぎる。

CWndクラスのSendMessageを呼んだのならそのクラスにメッセージが飛ぶから、
別のウィンドウに送りたいならそのウィンドウのポインタなりウィンドウハンドラなりを取得して
pWnd->SendMessage(〜〜〜);    または
::SendMessage(hWnd, 〜〜〜);
みたいにする必要がある。

どうやってポインタを取得するんですか、とか聞くなよ。
717710:03/06/01 10:53
>>716
同じクラスです。
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnLvnColumnclick)
関数もちゃんとあります
そもそも何がしたいんだ?リストビューコントロールのヘッダクリックをシミュレートしたいのか?
だとしたらカラのNMHDRやNMLISTVIEWを送りつけて何の意味があるのかと小一時間
719710:03/06/01 11:06
>>718
ソートしたいだけです。
>>719
だったらSendMessageする必要ないじゃん。
OnLvnColumnclickにソート処理書けよ。
>>720
そうします。汚してすみませんでした
722デフォルトの名無しさん:03/06/01 15:05
CObjectから派生してシリアライズ機能を追加したクラスをDLLに作りました。(CMyClassとする)
メインのEXEでそのDLLを読み込みそのCMyClassをインポートして、インスタンスをつくります。
シリアライズの書き出しのとき、operator << で書き出すとそのインスタンスが正しく出力されるのですが、
読み込みのとき、operator >> で失敗してしまいます。
CRuntimeClass::Load(CArchive& ar, UINT* pwSchemaNum)のなかでCMyClassを見つけることができず失敗しています。
DLLからインポートしたクラスでCObjectのシリアライズ機能は使えないもなのでしょうか?
723デフォルトの名無しさん:03/06/01 15:09
安心確実

お支払は安心の代金引換です
振り込んだのに商品が届かない等
の心配は無用!
http://www.net-de-dvd.com/
724デフォルトの名無しさん:03/06/01 19:03
?c@b@@AAGXM@Z

装飾名の後半部(AAGXM@Z)の
命名規則をまとめてあるところってないでしょうか?
726724:03/06/01 19:12
>>725
ありがとうございます。
描画するオブジェクト数が多く、逐一OnDraw()を使うと描画に時間がかかりそうなので、
一度バックグラウンドに描画してから、必要な部分を随時ウィンドウにコピーしようと思うのですが
どのようにすれば良いのでしょうか。

まったく分からないので、概略や参考HPだけでも教えていただけると助かります。
>>727
メモリDC
BitBlt
729デフォルトの名無しさん:03/06/03 11:23
_T マクロでSJIS/UNICODEを切り分けてRDBに文字を保存できるのは良いと思うのですが、UCS-2でなくUTF-16で保存したい場合にはどういう記述になりますか?
マルチ〜
731デフォルトの名無しさん:03/06/03 17:32
>>729
NT や 2000 では、1文字 16 bit を仮定している(Unicode 3.0以前の)
Unicode しか対応してないから、UCS-2 も UTF-16 も同じ意味

XP は0xFFFF を超えるコードポイントも一部のAPIでサポートするように
なってるけど、Unicode 3.0 以降で追加されたサロゲート領域に対応した
グリフを含むフォントは中国語版のOffice XP を買わないと入手できな
かったりする。ってか実際に SimSun Founder Extended とかの
フォントを使ってる日本人は居るのか超疑問

UCS-4 のフルレンジをカバーし実用的に使えるようになるのは、次期
Windows バージョンだって MS も言ってるしね。今は UCS-2 == UTF-16
と考えてていいと思うがなー
732デフォルトの名無しさん:03/06/03 18:38
COM/ActiveXにGUIDってありますよね。
あれって何て読むんでしょう。
グイド?
>>732
ぢーゆーあいーでー
734ガイコツジン:03/06/03 19:03
ぐーいどイイマース
チナミニGUIハぐーいデース
// VB上の記述
Public Type tblA
m_a As String * 100
m_b As String * 17
m_c As Long
m_d As Long
m_e As Long
m_f As Long
End Type

Public Type tblB
m_h As String * 300
End Type


Declare Sub Start Lib "A.dll" (pParam As tblA, ByVal sA As String, ByVal sB As String, ByVal lc As Long, ByVal ld As Long, ByVal le As Long)
Declare Function Open Lib "A.dll" (pParam As tblA, ByVal lA As Long) As Long
Declare Function RcvData Lib "A.dll" (rcvData As tblB, pParam As tblA) As Long

// VC上の記述
void (WINAPI *Start )(void *, char *, char *, int, int, int);
int (WINAPI *Open )(void *, int);
int (WINAPI *RcvData )(void *, void *);

VBのプログラムでDLLを呼んで正常な動きをします。
VCのプログラムではOPEN呼んで受信関数のRcvDataの戻りがうまくいきません。
VCのメンバ関数の引数の定義があやしいと思っていますが、
誰か教えてください。
736_:03/06/04 04:43
737デフォルトの名無しさん:03/06/04 09:31
>>GUID
アメ公の発音は グイッド って言ってるように聞こえる
グに強調で、イの前までこころもち伸ばし気味
ジー・ユー・アイ・ディー、でも通じるけど
GUID は MSI インストーラでも多用されとるがな
738これわかりますか?:03/06/04 12:23
3つの数値を入力したとき、それらの値を辺とする三角形ができるか否かを判断して結果を表示せよ。
739解いてください:03/06/04 12:24
問題 各自の名前を入れた文字配列を決め、その順序を逆にして表示せよ。
>>738
値は辺の長さ?
それなら一番長い辺がその他の2つの辺の合計よりも短ければいい。

っていうか、738も739も宿題みたいだが、MFCで解くっていう課題なのか?
>>739
マルチバイト文字も考慮するんですか?

ネタも宿題も↓へ

C/C++の宿題やらせてください。7代目。
http://pc2.2ch.net/test/read.cgi/tech/1053963794/l50
>>739 MFC-MLにも「解いてください」とかいって投稿しただろ! ○海大学生!
>>738もだな
744VC見習い:03/06/04 16:40
ちょっと教えてください。おながいします。
三つの返り値をもつメンバ関数を作成したのですが
呼出元から この関数を呼ぶと 最初の一つは値が引き継がれるのですが
残りの二つは値が消失してしまいます。関数内では値取得できているのですが
なぜでしょうか。それぞれの違いは 
最初の返り値の定義をchar型で残りの2つはDWORD型というくらいです
たすけてください。
>>744
「戻り値」の意味をよく理解してから出直せ。
>三つの返り値をもつメンバ関数を作成したのですが
それたぶんCじゃない。
C++でもない。
return (1,2,3);
としたのか
いや1番目の値が残るならこれだろうか。
return 1,2,3;
return 1;
return 2;
return 3;

でおおけい
>>746-749
バカばっかりだな。

#include <stdio.h>
#include <windows.h>
class ThreeValues {
public:
 char C;
 DWORD D[2];
 ThreeValues(char C0, DWORD D0, DWORD D1){
  C = C0; D[0] = D0; D[1] = D1;
 };
};
class Test {
public:
 ThreeValues GetThreeValue();
};
ThreeValues Test::GetThreeValue()
{
 return ThreeValues(1, 2, 3);
}
int main()
{
 Test T;
 ThreeValues V = T.GetThreeValue();
 printf("%d, %d, %d\n", V.C, V.D[0], V.D[1]);
 return 0;
}

>>744
マジな話すると、「ソース晒せ」。まずはそれからだ。
751デフォルトの名無しさん:03/06/04 22:22
3つの値を返したいなら、3つの値を持つ構造体を返り値にしてもできるぞ
ま、引数を参照渡しするのが普通だと思うが

関数型の言語って、x = f(a,b,c) のように入力と複数で出力が1個の
場合はすっきりするんだが、入出力がそれぞれ複数の場合はなんか
スマートでない気がしたんだな。慣れちゃうとそんな事あまり考えなく
なるのだが
>>751
なんで関数型の言語の話が出てくるの?
753デフォルトの名無しさん:03/06/04 22:38
>>752
C も C++ でも事情は一緒だと思うがなー
>>750
返り値は一個だろw
VC++6.0SP5のMFC使ってます

CRichEditCtrlを初めて使ってみましたが
通知メッセージ(EN_SETFOCUS, EN_KILLFOCUSなど)が
全く飛んでこないんですが・・・(CEditは普通に飛んでくる

::AfxInitRichEdit();はきちんと呼び出しています(WinAppの派生クラスの関数InitInstance内で
>>752
750-751は釣り
>>755
MSDN見るとCEditやCListBoxには通知メッセージの説明があるけれど、
CRichEditにはありませんな〜。

ひょっとして、EN_〜じゃなくてNM_〜では?
>>46
久々にMFC使ったら俺もそうなったので焦った。
オプションのディレクトリ設定で"Microsoft SDK"のパスの優先度を下げて解決。
759デフォルトの名無しさん:03/06/06 12:17
リスト状に、コントロールが乗っている子ウインドウを並べて操作したいと思っております。
CListBox、CListCtrl等の中に子ウインドウを並べる事は出来るでしょうか?
色々と試行錯誤している段階なので、よろしければヒント等をいただけたらと思います。
>>759

一般論だけど、ダメ。無理。ムダ。
普段はカスタムドローでも何でも使って普通に描画しといて、
クリックされたりした瞬間だけ(使いまわした)コントロールを show するのが良いよ。
761デフォルトの名無しさん:03/06/06 18:43
MFCのAppWizardで作成したソフトで、「ファイル→開く」から複数の拡張子を選べるようにしたのですが、保存する時は開いた時の拡張子でしか保存できません。
これを「開く」と同じようにファイルの種類を選べるようにするにはどうすればいいのですか?
それと、開くときにフィルタを(*.txt; *.doc)のようにして、ダイアログに.txtと.docを両方表示させるようにするにはどこをいじればいいのですか?
GetDocString あたりを調べれば何とかなりそうな予感。
あるいは保存部分を自作コードで……
763デフォルトの名無しさん:03/06/07 20:12
MFC内部で使われてる関数って、勝手に使うと問題あるのかね...?

例えば mfc\src\afximpl.hで定義されてるような香具師を、afximpl.h を
includeして使うとか。
764761:03/06/07 21:12
>>762
GetDocStringをいろいろと試してみます。
あと保存部分の自作も挑戦してみます。
ありがとうございました。
>>763
自分が何やってるか理解できればいいと思うよ。
MFC ったって、単なるクラスだからね。
(まあ、複雑に絡み合ってるだろうから、解析するのは大変だろうけど。)
766    :03/06/07 21:37
VC++.NET で MFC も消滅の運命を歩むだろう。
もうMFCは古い。
VC++.NETも儲からなければあっさり捨てられるだろう。
COMのように。
>>767
しったか半可通。
769デフォルトの名無しさん:03/06/07 22:04
メインフレームってどういった概念なのでしょうか?
viewクラスとdocクラスとメインフレームクラスをわざわざ分けるのはなぜですか?
単純にwin32のように一つのcppにまとめて書いてあってもいい気がするのですが。
>>769
document-viewについて勉強することを勧める。

俺の理解では(間違ってるかもしれんが)
アプリケーションというのはドキュメント(テキストや画像のデータ)があり、
ビューはそのドキュメントの内容を描画するだけ。
それらを収めてメニューやツールバーを管理するのがフレーム(枠)、ということ。

フォルダにファイルを作成→関連付けたアプリを起動、というように、
ドキュメント(ファイル)を起点にしたものがWindowsの思想だと思ってる。
描画するだけ、ってのはちょっと語弊があるな。スマソ

アプリケーションはデータを編集するためのツール、という視点で捕らえればわかるかもしれない。
もちろんそういうアプリばかりではないが、doc-view構造を持つということはそういうことだと思う。
>>769
VBから離れるとその利点が良くわかる。
>>772
またお前か
>>769
この辺みとけ。
ttp://www.microsoft.com/japan/developer/library/vccore/_core_document.2f.view.3a_.overview.htm

770の言ってることをちょっと補足するなら、
たとえばひとつのドキュメントに複数のビューを持つ場合。
(数値データに対して表モードとグラフモードを切り替えて表示するような場合ね。)
表を表示する専用のビューとグラフを表示する専用のビュー、みたいに独立して書けるわけ。
Win32(SDKのことだと思うが)はコードがごちゃごちゃしないか?
775769:03/06/07 22:52
MSDNってこういう使い方もあるんですね。
APIの解説しか読んでなかったや。
熟読してみます。皆さん、ありがとうございました。
776デフォルトの名無しさん:03/06/08 17:46
エクスプローラみたいなファイラを練習として作ってます。
エクスプローラなら、ツリーで選択されているディレクトリに
変更があった場合(新しいディレクトリが追加されたとか)、
ツリービュー・リストビューともに更新されますが、これって
エクスプローラが何かの方法でディレクトリの変化を知った
ということですよね。1秒置きにポーリングするなどの原始的な
方法以外で、変化を知る方法があるのでしょうか?
777_:03/06/08 17:47
>>776
あるよ。忘れたけど。

確かFindfastなんちゃらかんちゃらだ。
>>776
FindFirstChangeNotification
FindNextChangeNotification
かな?
使ったことないから知らんけど。
780776:03/06/08 21:26
>>778 >>779
サンキューです!
MSDN調べてみます。
>>755
ON_NOTIFY(EN_SETFOCUS, IDC_XXX_EDIT1, OnSetfocusXXXEdit1)
ON_NOTIFY(EN_KILLFOCUS, IDC_XXX_EDIT1, OnKillfocusXXXEdit1)

を、下記のように変更する。

ON_EN_SETFOCUS(IDC_XXX_EDIT1, OnSetfocusXXXEdit1)
ON_EN_KILLFOCUS(IDC_XXX_EDIT1, OnKillfocusXXXEdit1)
782名無し@沢村:03/06/08 22:47
>>776
SHChangeNotifyRegister()
ReadDirectoryChangesW()
783デフォルトの名無しさん:03/06/09 11:06
質問です。
ポートlistenしてUIスレッドを生成、
それぞれのスレッドがAsyncSocket派生クラスで通信を行うようなサーバプログラムなのですが、
ときどきデバッガ実行中に無言で落ちるときがあります。
次のような出力がありますが、その他ASSERTやらは一切出ず。
「スレッド'Win32 スレッド'(0xXXX)はコード3(0x3)で終了しました。」
デストラクタ等も動いていないようなので落ちてるのは間違いないようです。

これはどういう現象でしょうか?
または突き止めるにはどういう方法が有効でしょう?

環境はWin2kPro/SP3、VC++.NET
動作環境がかなり貧弱でペン3/600MHz、メモリ128
動作環境でしょうかねぇ・・・?
784直リン:03/06/09 11:13
785783:03/06/09 11:13
追記。
スレッドは多いときで20〜30くらい立ちます。
ソケットメッセージ編集のためにふんだんにメモリ使います。
書けば書くほど動作環境のような気がしてきた。
出力されるメッセージとの関連がわかれば、それで納得できるのですが・・・
786デフォルトの名無しさん:03/06/09 21:51
MDIでプログラミングした時などに、「最近使ったファイル」というものがメニュー内にあります。
それを操作するにはどうすればいいでしょうか?
>>786
CRecentFileList
788デフォルトの名無しさん:03/06/10 05:37
OSがアップデートされたときなどに右下のタスクバーに吹き出しが
でるけど、あれってどうやって表示させればよいのですか?
なるべく自分で調べますので関連するキーワードとか教えてください
よろしくお願いします
789_:03/06/10 05:42
>>788
バルーンだね。この質問も定期的にあるなぁ。
791デフォルトの名無しさん:03/06/10 14:51
例えばMFCのCDC::FillSolidRect()でCRectのポインタを引数
として受け取るようになっているのですが、変数をそのまま渡しても
ちゃんと走ります。これはおかしくないのでしょうか?
CRect::operator LPCRECT
793791:03/06/10 15:00
>>792
ハッ!そういうことでしたか。
厨な質問ですみませんでしたm(__)m
794デフォルトの名無し:03/06/10 16:47
Visual C++ .netのキーバインドってemacs風にはならないのかな???
選択開始が割り当てられない・・・・
誰か教えてください、よろしくお願いします。
>>794
emacsを.net風にカスタマイズするほうが楽だよ。
>>794
カスタマイズ可能。
.NETだったら [キーボード マップ スキーム]なるものがあって、そこに
emacs風とかあったり? (.NET使ってないから分からん)

VC6は一個一個キーバインドをシコシコ替えなければならんかったが。

誰かがemacs風のキーバインド定義して、レジストリ公開すればいいんだけどね(w
>>794
マルチうぜぇ
市ね
二度と来るな
回線切って首吊(ry
そんな事よりよ、1、ちょいと聞いてくれよ。
このあいだ、Visual C++ .netでプログラム書いてたんですよ。Visual C++ .netで。
そしたらなんか「Visual C++ .netのキーバインドってemacs風にはならないのかな」
とか、いってるやつがいるんですよ。(ry
もうね、アホかと。馬鹿かと。 (ry
お前ら、emacsって言いたいだけちゃうんかと。(ry
Windowsを超えるOSをVCで作りたいと思っています。
どなたか参考になるサイトあったら教えてください。
800デフォルトの名無しさん:03/06/10 17:50
>>800
見るな。ブラクラだったよ。
>>797
マルチうぜぇ
市ね
二度と来るな
回線切って首吊(ry
803789:03/06/10 17:53
>>790
もう少しかみ砕いて教えてください!!
789は死ね
788なら、キーワード教えてくれっつーんだから十分だろ?
>>789
氏ね
806デフォルトの名無しさん:03/06/10 23:03
CRectにCopyRect()という他のCRectインスタンスをコピーする
関数がありますが、これってどんなとき使うのですか?
dest=sorcでいけるのに何のためにあるのでしょう?
807名無し@沢村:03/06/11 00:33
>>789
キエロ
808デフォルトの名無しさん:03/06/11 01:31
OSがアップデートされたときなどに右下のタスクバーに吹き出しが
でるけど、あれってどうやって表示させればよいのですか?
なるべく自分で調べますので関連するキーワードをAPI名で
教えてください。
809名無し@沢村:03/06/11 01:33
>>808
つまらん、おまいのカキコはつまらん
>>808
うちのOSであるHP-UXでは出ません。以上。
811793:03/06/11 10:47
くだらねぇ煽り合戦やめれ。
あー原因がつかめん・・・
何も言わずに落ちるのは何故?
>>808
TTS_BALLOON
キーワードは>>790でとっくに出てるのにマルチする厨はほっとけ
814811=783:03/06/11 12:21
へんなのとレス番間違えちゃったw
815100人に1人:03/06/11 18:33
◎人の嫌がることをズケッと言うのはこんな奴!
<アスペルガー症候群(自閉症スペクトラム)←脳の機能的疾患(遺伝が要因)>
●変化を嫌う
http://web.kyoto-inet.or.jp/org/atoz3/kado/book1/Williams-Asp.htm

●接し方のルールがわからず無邪気に周囲の人に対して迷惑なことをしてしまうことがある。人を傷つけるということには鈍感(相手の立場に立って考えられない)。
●パターン的行動、生真面目すぎて融通が利かない
 毎朝の通学電車では同じホームの同じ場所から、同じ時間の同じ号車に乗ることに決めていたりする。パターンを好むということは反復を厭わないことでもある。
●アスペルガー症候群の子どもは(大人も)感覚刺激に対して敏感。敏感さは聴覚、視覚、味覚、嗅覚、温痛覚などのいずれの感覚の敏感さもありえる(特に視覚が敏感)。
●アスペルガー症候群の子ども(大人も)は予測できないことや変化に対して苦痛を感じることが多い。
http://www.autism.jp/l-02-03-aspe3.htm

●独り言を言うことが多い(考えていることを口に出す)
●物事をいつまでも同じにしておこうとする欲求が強く、そうでないと非常に不安。いわゆる「こだわり」。
●自発的に行動することが少なく、興味の幅が狭い
●物まねをしているような不自然な言語表現
●自閉症スペクトラム全体としては一万人に91人(およそ100人に1人)。
http://www.ypdc.net/asuperugar.htm

★自閉症スペクトラムの考え方(アスペルガーに至らない気質の偏りもある(遺伝性))
http://www.imaizumi-web.com/030413.html  
   
★アスペルガー症候群(自閉症スペクトラム)かどうかのテスト
http://twitwi.s10.xrea.com/psy/add.htm 
http://www.geocities.co.jp/Beautycare/5917/as/marksheetmake.html


VisualC++ってタダ?
>>816
そのネタ秋田。
818デフォルトの名無しさん:03/06/12 23:23
これは VC++ Standard .NET 2003 には最適化コンパイラが付いているって事かい?
http://www.microsoft.com/japan/msdn/visualc/productinfo/topten/upgrade60.asp
俺(VC++6.0Proユーザー)VB、C#いらないからVS.NETPro買い控えてた。
これってほんとか? むちゃくちゃ安いし・・・
VC++でデータベースを使ったプログラムを作る場合、
データベースは何がいいのでしょうか?やはりソフトが
必要なんですよね?
本当に簡単なのでもいいのですが・・・。
820名無し@沢村:03/06/12 23:39
>>819
MSDE
>>818
Standard版には最適化コンパイラは付いてないですよ。
Visual Studio .NETに付いてるのがProfessional版です。
>>821
そうなのか? リンク先を見る限り .NET2003 では、VC++ Standard版に
最適化コンパイラがついているように見えるが。

だとしたら、俺も買いたい。
>>823 いや、だから .NET「2003」は違うんじゃないか?
>>824
製品構成と価格から見ても微妙だと思うけど…
仮に Standard .NET 2003に最適化コンパイラが付いてたら
VS.NET買っちゃった人はブチギレですな

最適化コンパイラがついてるなら、俺もStandard買うよ。
ListViewの MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
が呼び出された後で、パラメータを変更したいとき、
みんなどうやってる?

たとえば、
lpMeasureItemStruct->itemHeight
を後で変更したくなったようなとき。

ウィンドウサイズを変更して、MeasureItem()が呼び出されるようにとか
色々試してはいるけど、決定打がないのよね。
CHtmlView::GetHtmlDocumentについて疑問があります。
MFCのコードは以下のようになっていますが、
  LPDISPATCH result;
  m_pBrowserApp->get_Document(&result);
  return result;
これだと、呼び出すたびにドキュメントの参照カウントが増加すると思います。
しかし、GetHtmlDocumentを使用している部分ではそのことを考慮しているようには見えません。
Releaseしなくても良いのでしょうか?
828デフォルトの名無しさん:03/06/13 06:34
>>825
StandardにはMFCのソースコードが付いていないだろ。
そんな環境でMFCのアプリの開発なんかやってられるかよ。
>>827
使い終わったらReleaseしましょう……
>>819
別に何でもいいんじゃないの。
Access持ってるならそれで作っちゃうとか。
>>829
やはりReleaseは必要なのでしょうか?
MFCのCHtmlViewのソースではCComPtrを使っているためAddRef/Releaseが対で呼ばれてしまい、get_Document内でAddRefされた分のReleaseが呼ばれていないような気がします。
またWeb上の多くの文章やMSDNでもReleaseは呼んでいないようです。
832デフォルトの名無しさん:03/06/13 11:21
Visual Studio .NET 2003 Feature Comparisonのサイト
http://msdn.microsoft.com/vstudio/howtobuy/choosing.aspx
「stand-alone client tools vs VS.NET が見たいなら、Related Links box のリンクをクリックしなさい」
と言うことなので VisualC++.NETStandard クリックしてみると、
http://msdn.microsoft.com/visualc/howtobuy/choosing.aspx
これらのリンクが正しければ、やっぱり予想通りなのねん。
「最適化コンパイラが使いたければあと8万円(6.0→.NETupgrade)出しなゴルァ」って・・・
日本政府はマイクロソフトに対し、竹の子剥ぎボッタクリ防止条例の適用をしてホスイ。
833819:03/06/13 19:11
>>820
>>830

レスどうもです。確かに別になんでもいいのですが、少なくとも
今はVC++.NETしか持ってない状態なので・・・。
ほんとに簡単なものでもいいんですよね。自前で検索効率のいい
ファイル構造を作っちゃえるならそれでもいいし・・・。
でもそんな技術ないし・・・。
とりあえず、たくさんのデータをためて、そこからいろんな条件で
検索とかするという構想なので、やはりデータベースですよね。
MSDEってけっこう大掛かりじゃないのでしょうか?
個人レベルならAccessですかね・・・。
>>833
つか、使い方なんて、どれでも一緒。
Access持ってるなら使っても良いけど、買う気ならやめれ。
MSDEでも一緒だし、いっそのことフリーのDB選ぶのもよし。
>>833
たいしたものでないならAccess買うなんて勿体無い。
834の言うようにフリーのモノを使うべし。

ところでMySQLって商用目的に使わないならOKだっけか。
>>828
何言ってんの・・・
>>833
条件つけて検索するだけで、ちょいちょいと作るならPerl/Tkがいいぞ。
ん?スレ違いか?
838デフォルトの名無しさん:03/06/14 10:25
ダイアログボックスでコントロールを配置するときに
見やすく線で区切りたいのですがフレームコントロールではなく
横棒一本(あるいは縦棒)を引きたいです。
でもどれを使っていいか分かりません。
やりかた教えてください。
>>838
OnPaintで線を引けばいいんでないの。
840819:03/06/14 14:17
フリーですか・・・。ちょっと探してみます。
フリーのがあったんですね(汗

アドバイス感謝です。
841デフォルトの名無しさん:03/06/14 18:14
VC++ Standard はリモートデバッガが付いていないんだな。
こりゃ話にならん。
つか、Standard版の話なんかどうでもいい。
もっと言えば、Windows開発環境でフリーに固執する奴らの気が知れねー
くだらねーことで右往左往するのが楽しいんだろうな・・・
843デフォルトの名無しさん:03/06/14 20:37
AfxGetApp()->OpenDocumentFile("-");
でMDIではファイルを表示しますが、子ウィンドウを新規作成で表示するにはどうすればいいでしょうか?
それから、VC++のように、「全て保存」という機能はどのように実装すればいいのですか?

>>843
::AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_NEW)
これで無理かのう?

「すべて保存」は自分でチマチマつくるんじゃないかな。
開いているドキュメントをスキャンして。
845デフォルトの名無しさん:03/06/14 22:51
>>844
チマチマスキャンするには、
MDIGetActive,MDINextを組み合わせる方法しか思いつかないのですが、
いい方法はありますか?
BOOL CWinApp::SaveAllModified()

を参考にするのもいいかもしれません。
847デフォルトの名無しさん:03/06/14 23:53
>>843
子ウィンドウの新規作成は844で書かれているやり方で多分
いいと思う。試してないけど。
すべて保存は次のように書いてみてはどないやろ?

HWND hWnd = ::AfxGetMainWnd()->m_hWndMDIClient; //メインフレームウィンドウのMDICLIENTウィンドウのハンドルを取得
CWnd *pWnd = CWnd::FromHandle(hWnd);
pWnd->SendMessageToDescendants(WM_COMMAND,ID_FILE_CLOSE,FALSE,FALSE); //MDI子ウィンドウの全ての直系の子に対しメッセージ送信

知ったか君の言うことなのであまり信用しないように。:-)
おいらならこれを試してみる、という程度。
TCKってなんですか?
849デフォルトの名無しさん:03/06/15 00:00
847なんだが、

「MDI子ウィンドウの全ての直系の子」
じゃなくて、
「MDICLIENTウィンドウの全ての直系の子」
だった。スマソ
回線切って首吊って逝ってくる。
>>849
朝ご飯までには帰ってくるのよ
今後VC++はどうなるんでしょう?
C#がでてきたし、マイクロソフト自身の手によって
葬り去られるのでしょうか・・・。

というのも、勉強はしたいのですが、ことC++に関しては
他より勉強量が必要かと。でも、消えちゃうならやる気が
半減なんすよね・・・D言語とかいうのも出てくるみたいだし。
どうなんでしょうか。
>>851
.NETはあくまで最上位レベルでの開発にしか使えんからなぁ。
そう言うことだ。
>>851
C++は死滅しないに一票。
なるべく非MFCで書くよう心がければ
MSと心中することもないだろう。
>>851
PC、OS、プログラム言語については、先の事なんて考えるだけ無駄。
その時手に入る物で、使いたいように使うべし。
新しいの出たら、その時考えれ。
悩んでるだけ時間の無駄だ。
大抵は応用が利くしね。
勉強して損するって事はないよ。
始める前にあれこれ躊躇しているようなヤツは
いざ始めてもやっぱりああすればよかった、こうすればよかったと
いつまでたっても後悔ばかりしているものだ。
つまんないことで悩んでるヒマがあったら何でもいいから
始めてみろとの忠告はまるで耳に入ってないやつが多い。
まあまずは作ってみろってこったな。
MFCのダイアログアプリ辺りでもなんでもいいから。
>>856
激しく同意。人生多少の無駄をしても余る位の時間はある。
店頭での販売まだ〜???
860859:03/06/15 21:49
誤爆スィタ〜!スマソ。
861デフォルトの名無しさん:03/06/16 11:31
質問さして下さい。MFCでタスクトレイ常駐型のアプリ作ってます。
(環境:Win2000 SP3 / MSVC6.0 / IE6.0SP1)

リソースでアクセラレータキーを割り当てておいて、
それをそのアプリが常駐している(タスクトレイにアイコンが表示されている)間は
常に有効にしたいと思っています。

プログラムの挙動としては、最初に非表示の空ウィンドウを生成して
それをベースにポップアップメニューを出したり、ダイアログを表示したりと
やっております。

この場合、前述の空ウィンドウにアクセラレータの処理を記述する方がいいんでしょうか?
それともどこか別なクラスの方が適切なのでしょうか。
また、具体的に記述してあるサイト等知っていらっしゃいましたら
お教え頂けますと有難いです。
862デフォルトの名無しさん:03/06/16 11:37
コンマで区切っているテキストを読み込んでコンマで挟まれているテキストを
取り出すにはどうすればよいですか?
>>861
ホットキー

>>862
while(コンマが見つかった) {
 コンマの前後を分割;
}
864861:03/06/16 11:49
>>863さん
試してみます。ありがとうございます。
865862:03/06/16 13:13
>>863さん
もう少し詳しくお願いできませんか?
>>861
フックつかったらいいんでないかい

>>865
それ以上詳しくって……(;´Д`)
>>865
いや、ていうかスレタイ5万回復唱して回線切って首(ry
868862:03/06/16 14:36
>>867
はいはい
>>862
CString s("abcd,あいうえお,123456,四面楚歌");
CArray<CString*,CString*> a;
int start,end,i, len = s.GetLength();
start = end = 0;
while(1){
if(start >= len) break;
if((end = s.Find(',',start)) == -1){
if(end >= len) break;
else end = len;
}
CString &tmp= *(new CString());
for(i=start;i<end;i++) tmp += s[i];
a.Add(&tmp);
start = end + 1;
}

CStringにstrncpyはないんか・・・
>>869
フツーにCStringArray使えばいいじゃん。
>>869
何故CString::LeftとかCString::Midとかを使わない?
872869:03/06/16 14:53
わっは、初心者がばれた。CStringArrayか・・・。
873869:03/06/16 15:04
そーすると、
forでまわしてるところを、
a.Add( * new CString(s.Mid(start,end)) );
とすりゃいいんかな。
aはCStringArrayにして、保存するのはポインタじゃなくインスタンスになるので注意っと。
874869:03/06/16 15:07
ちがった文字数だった Mid(start,end-start) 。スレ汚しスマソ。
>>873
Addに渡すインスタンスは一時オブジェクト。
876869:03/06/16 15:38
うい、newはいらんすね。
しかも配列をローカルにとって、その中にnewでつくったオブジェクト入れてる、意味不明だ。
877861:03/06/16 16:03
>>866さん
アドバイスどもです。下のようにしてみました。

#define WM_USER_HOTKEY_EXITWM_USER+110
class CMona : public CWnd{ … }

BOOL CMona::Create(){
  …
  RegisterHotKey(m_hWnd, WM_USER_HOTKEY_EXIT, MOD_CONTROL, VK_F12);
  …
}

LRESULT CMona::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){
  switch(message){
   …
   case WM_HOTKEY:
    switch(wParam){
     case WM_USER_HOTKEY_EXIT:
     OnPopExit();  //タスクトレイのポップアップメニュー[終了]と同じ処理
    }
   …
  }
}

void CMona::PostNcDestroy(){
  …
  unregisterHotKey(m_hWnd, WM_USER_HOTKEY_EXIT);
  …
}

WindowProc()で直接拾ってます。
878デフォルトの名無しさん:03/06/16 17:17
>>847
ありがとうございます。
もう一つあるのですが、
childview のメンバ変数として int i;
とし、mainframe から その i の値を書き換えることができるのでしょうか?
MFCの関数が仮想になってなくてむかつくことって結構ない?
InitialUpdateFrameとかさ
>>878
GetActiveView()等で子ウィンドウのポインタを取得して
childviewにキャストすれば使えるんでないかい。

# データはドキュメントクラスが持つべきだとは思うが……
>>879
仮想である必要はあるかな……?
俺はCViewのOnInitialUpdateをオーバーライドして用事を済ますから必要を感じないだけかもしレンガ。
>>862
std::string使え!
std::stringちょっと嫌い

std::string str;
str = "";
これだとメモリ確保されないから困ることがある
884デフォルトの名無しさん:03/06/16 21:46
>>880
CView は CChildFrame にキャストできないそうです。
>>883
何でメモリ確保されないと困るのか後学のために教えていただきたい。
>>884
当然でしょ……。
少し考えればGetActiveFrame()を思いつきそうなもんだが、
最近のお子様たちは応用力がないのかな。
1、TreeViewやListViewに表示するデータをドキュメントでどう持つべきでしょう?

2、AppAのバージョンアップをAppBとして
それぞれで作成されたファイルをFileA,FileBとします(Serialize経由のファイル)
  AppAでFileBも読み込めるようなうまい方法はありますか?

以上、お願いします。
888887:03/06/16 22:52

あ、1と2は別々の質問です。
>>887
1.あんたの勝手
2.VERSIONABLE_SCHEMA
890887:03/06/16 23:50
1、
ちょっと質問がおかしかったです。
通常TreeViewの各アイテムにオブジェクトを結び付けたい
場合は、SetItemDataなどをつかうのが簡単なんですが、これだとたとえば、アプリ起動時
にファイルを読み込む場合、TreeViewが作成される前にSerializeが呼ばれてしまうし、
ドキュメントとまったく関係ないのであんまりうれしくないんです。

2、
VERSIONABLE_SCHEMAはAppBでFileAを読み込むための仕組みではないのでしょうか?
891デフォルトの名無しさん:03/06/16 23:56
CDC::FrameRectを使って、XORでワクを描きたいんですけど、どうやったら描画モードをXORに変えられるんでしょうか?
>>890
なぜTreeViewの作成とSerializeの呼び出しタイミングが関係あるのかわからん。
ノードの登録は当然View側でやるんだからOnInitialUpdate時点ですでにSerializeは完了してるので何の問題もない。
>>887
よく分からんが、まずドキュメント&ビューの概念は理解しているのかい?
>>891
FrameRectはブラシつかって描画するから、直接XORはできないんじゃないかな。
ビットマップに描画してXORで重ねるくらいしか思いつかない。
895デフォルトの名無しさん:03/06/17 09:37
CWinThreadについて質問です。
クラスウィザード(クラスビュー)からCWinThreadの派生クラスを作成すると、
コンストラクタがprotectedになってますよね。
これはいったい何のためでしょうか?
暗にAfxBeginThreadを使え!と言っているのでしょうか。

# サンプルの\ADVANCED\MTGDIではpublicになっているところを見ると、
# publicに書き換えても問題なさそうな気はしますが……。
896デフォルトの名無しさん:03/06/17 09:54
>>894
Windowsのグラフィックエンジンって、ペンとBlt以外で転送モード指定できないの?
フォントを凝った描き方するのも無理みたいだし
>>896
MSがWin95の時代にそんな設計を考慮に入れる余裕はなかったと思うw
便乗で申し訳ないんですがFrameRect()ってどんな時便利
なのですか?
Rectangle()とはどう使い分けるんですか?
>>898
速い
900889:03/06/17 11:47
>>890
1.について
Document-Viewを前提とすれば、データの管理はCDocumentがするべき。
TreeViewとかItemDataというのは表示の問題。

CDocument::OnNewDocument()
CDocument::OnOpenDocument()
CDocument::UpdateAllViews()
CView::OnInitialUpdate()
CView::OnUpdate()
などをヘルプで
901889:03/06/17 11:50
>>890
2.について
旧Verをマイナーアップできるのであれば、VERSINABLE_SCHEMAで。
 
旧Verをいじくれないのであれば、あくまで案だが
新Verでの保存前に『旧Verとの互換有モード』と『互換無モード』を選択させて
1)互換無モードのときは普通に保存。
2)互換有モードのとき
 旧Verと共有できる部分を最初に保存し、
 新Verの追加部分をa)続けて保存する、または、b)別ファイルとして保存。

 たぶんa)で旧Verでも読めると思うが、旧Verには新Verのデータを保存するコードがないので、
 旧Verで編集して保存した場合は新Verのデータは失われてしまう。

 保存する変数が一つ二つ増えただけのときは簡単そうだが、
 あるクラスのメンバ変数が追加されていて、それが配列やリストなどに格納されているような場合は
 新Verで読み込んだときに新データの部分をどうアタッチさせるか考慮しなければならず面倒かも。
902861:03/06/17 15:47
861です。引き続きタスクトレイ常駐型アプリ作ってます。
(環境:Win2000 SP3 / MSVC6.0 / IE6.0SP1)

タスクトレイのアイコンを右クリックすると、ポップアップメニューを表示するような
処理を記述しているのですが、ここで負に落ちない点が2点程あります。

A. 表示されたポップアップメニューから[設定]を選ぶと、
dlg.DoModal()で設定用のウィンドウが開きます。(CDlgOptionと仮定)
で、この CDlgOption で[OK]あるいは[キャンセル]を押すとウィンドウを閉じるようにしています。
これらの動作で CDlgOption を閉じ、またすぐにタスクトレイのアイコンを
右クリックしようとしても、なぜかクリック一回分の反応が無視されてしまうようです。
(間をおいて2回クリックするとまたポップアップメニューが表示されます)
この現象に関してどなたか覚えのある方いらっしゃますでしょうか?
近いヒントだけでも構いませんので、お教え頂ければ幸いです。

B. 右クリックでポップアップメニューが表示されますが、このメニューは現在
いずれかのメニューアイテムをクリックしないと消えないようになっています。
一般的なタスクトレイアプリケーションのポップアップメニューのように、
例えばメニューとは別な場所をクリックした場合はメニューを消す、といった
挙動がありますが、これらの処理は自分で記述する必要があるのでしょうか?
よくある挙動なので、既存の関数か何かがあればと思っているのですが…。

毎度長くなってしまいすいませんが、ご教授頂ければと思います。
B.は
ポップアップメニューを表示する前に、メニューの
オーナーウィンドウにフォーカスをセットする
904861:03/06/17 16:28
>>903さん
ありがとうございます。

これはフォーカスをオーナーに設定する事によって、
それ以外の部分にフォーカスが当たった場合、それを無効化する
…という解釈で宜しいでしょうか?
>>904
オーナーからフォーカスが外れれば、メニューの標準仕様により勝手に消える。
>>903さん
表示する直前の部分に SetFocus(); で動作しました。
ありがとうございました。
907890:03/06/17 20:41
> ノードの登録は当然View側でやるんだからOnInitialUpdate時点ですでにSerializeは完了してるので何の問題もない。
> Document-Viewを前提とすれば、データの管理はCDocumentがするべき。

なるほどわかりました。
とすると、Treeの階層構造そのものをDocumentが持たなくてはならないわけですよね。
これは結構大変の予感。TRee構造のほかにHTREEITEMとのMAPも必要になりそうですし。

2について
やはり簡単な方法はないみたいですね。
ご意見ありがとうございます。

しかしこれ、ファイルヘッダも付けずにファイルをつくってると
はまりますよね。旧VERでの読み込みエラーに対応できなくなる。
もっとも拡張子もアイコンも変えて別アプリのようにしてしまえばいいんですが。
908デフォルトの名無しさん:03/06/17 20:55
Visual C++のAPIのリファレンスが載っている
ページはないでしょうか
>>908
MSDN onlineじゃダメなん?
>Visual C++のAPI
この時点でもうちょっと悩め、>>909よ。
911909:03/06/17 21:01
>>910
すんまそんm(__)m
912912:03/06/17 21:05
どういたしましてm(__)m
913908:03/06/18 00:48
>>909
ありました
ありがとうございました
>>909 >>910
あったそうだぞ。
915デフォルトの名無しさん:03/06/19 10:45
OSはWindows2000、Visual Studio 6.0でVC++つかってます。

タスクバー(通常デスクトップの下部にあるアレ)の高さを取得したいのですが、
具体的にどんな手順を踏めばいいんでしょうか?
ググってもそれらしきものが出て来なかったので…
>>915
GetSystemMetrics(SM_CXFULLSCREEN),GetSystemMetrics(SM_CYFULLSCREEN)と
SystemParametersInfo(SPI_GETWORKAREA,...)の差分を取る。
917915:03/06/19 13:13
>>916
できました!ありがとうございました。
詰まっています。質問させてください。
多少長くなってしまいますがすいません。

MFC AppWizard(exe)のダイアログ形式でアプリのスケルトンを作成すると、
例えばプロジェクト名をGikoとすれば"CGikoApp"という
CWinAppのクラスができますよね?

このクラスに、今現在アプリケーションがどのような状態なのかを
IDで保持しておく変数を付け加えました。

  private:
    UINT  m_uStatus;

そして、この変数に対して値を読み書きする為の
メンバ関数も付け加えました。

  public:
    BOOL SetAppStatus(UINT uIDStatus);
    UINT GetAppStatus();

(つづく)
919918:03/06/19 19:16
(つづき)

CGikiAppはgikoapp.cppでグローバル変数として宣言されています。

  CGikoApp theApp;

なので、別なクラスのメンバ関数からこのm_uStatusに対して
アクセスする為の記述として、以下のようにコードを書きました。

  //ステータス初期化(ログオフ)
  theApp.SetAppStatus(UM_APP_LOGOFF);
  …
  //ステータス変更(ログオン)
  theApp.SetAppStatus(UM_APP_LOGON);
  …
  //ステータスの取得
  if(theApp.GetAppStatus()==UM_APP_LOGON){

ですが、この時点で「theApp : 定義されていない識別子です」というエラーが出ます。
コードもtheApp. とまで入力した場合、メンバ一覧にちゃんと
先の2つのメンバ関数も出てきます。(SetAppStatus, GetAppStatus)

本アプリケーションの処理は基本的に一本道なので、
CGikoAppで情報を保持した方が良いのではと思いメンバ変数を追加したのですが…。
何が原因なのでしょうか?ご教授頂ければ幸いです。

環境は、Windows2000 サービスパック3 + Visual C++ 6.0 Professional Editionです。
theAppを参照するファイル内に、
extern theApp;
てしたらどう?
921920:03/06/19 19:31
extern CGikoApp theApp; だった。
cppがインクルードしているヘッダファイルでも可
>UINT GetAppStatus();

UINT GetAppStatus() const;
こうしたい(ボソ
((CGikoApp*)AfxGetApp())->GetAppStatus()
で解決。
>>923
もしそれでいけるのなら、なんでtheApp->GetAppStatus()
でいけないのだろう...
フレームワークがポインタを持ってるんじゃない?
>>924

それじゃどうやってもコンパイルエラーになるからだな。
927918:03/06/19 21:10
>>920-926
皆様ありがとうございます。
 
 extern CGikoApp theApp;
 または
 ((CGikoApp*)AfxGetApp())->GetAppStatus();

のように修正したところ、コンパイルエラーがなくなりました。
Giko.h(CGikoAppが宣言されているヘッダファイル)をインクルードしているので、
externは必要ないのかなと思ったのですが…。

また、>>922さんのご指摘もありがとうございます。

 UINT GetAppStatus() const;

に修正致しました。
確かに、この方がより確実ですね。

回答が遅くなってしまいすいませんでした&ありがとうございました。
>CGikiAppはgikoapp.cppでグローバル変数として宣言されています。

externされてないグローバル変数がgikoapp.cppの外で参照できないのは当然かと
929861:03/06/20 15:39
タスクトレイアプリ制作中の861です。ハマってます。
(環境:Win2000 SP3 / MSVC6.0 / IE6.0SP1)

CTaskMainをメインのクラス(CWnd)、CTaskDlgConfigをメインから呼ばれて
表示されるダイアログのクラス(CDialog)として制作しています。
具体的には以下のような感じです。

//タスクトレイのポップアップメニューで[Config]を押した時の処理
void CTaskMain::OnConfigClick(){
  CTaskDlgConfig dlg;
  int nResult = dlg.DoModal();
  if(nResult == WM_USER_RESULTOK)
   AddNotifyIcon(IDR_ICONRED);
}
CTaskDlgChildクラスのダイアログを表示し、それがWM_USER_RESULTOKを返した場合
タスクトレイのアイコンを変化させるというような処理になっています。
AddNotifyIcon(UINT nIconResID)で、引数で指定したリソースのアイコンに変更します。

で、このCTaskDlgChildが開かれている間に、ダイアログ上のあるボタンをクリックすると
タスクトレイのアイコンが変わるような処理を追加したいと考えています。
なので、AddNotifyIcon()はCTaskMainのメンバ関数なので
  CTaskMain::AddNotifyIcon(IDI_ICONGREEN);
としてみたのですが、
  静的でないメンバ関数の中で呼び出しが正しくありません。
と言った旨のエラーにてはじかれてしまいます。
他に色々試してはみたのですが、どれもコンパイルエラーではじかれてしまうので
どうにもいかない状況です。

派生クラス(CTaskDlgConfig=CDialog)から継承したクラス(CTaskMain=CWnd)を
参照しているからいけないのか?等々考えてみましたが、いま一つ突破口になる
ものがつかめません。どなたかご教授頂ければ幸いです。
>>929
今後のためにも一度C++の本読もうよ
>>929
CTaskDlgChildからCTaskMainのインスタンスを参照できればいい。
((CTaskMain*)GetParent())->AddNotifyIcon(IDI_ICONGREEN);
で解決。
932861:03/06/20 16:17
>>931さん
機能しました!ありがとうございます。
クラスに関する学習が不十分だったと思います。精進します。

>>930さん
もっともです。現在時間があまり無い中での制作なので、
C++の概要と基本的な構文ぐらいしか勉強できていない状況です。
時間を取り、書籍で勉強したいところではあるのですが…。

確かにMFCはC++の知識無しでは理解できないし、
それに加えてWin32API等に関する勉強も必要なのですが、
最近新規に移行したものでどれもいっぺんに覚えられないのがもどかしいところです。
C++だけ知っていてもWin32APIの各種命令、関数など知らなければいけませんし、
MFCをやろうとしてもC++の概要を知っていなければ意味不明ですし…。
難しいところです。

休日は家にこもってC++の学習に勤しみたいと思います。
CSocketを使用するプログラムを作っているのですが、
Connectで接続後、接続がきれるまで次の処理を待ちたいのですが
ソケットが閉じているか、閉じていないかを判別するには
どうしたらよいのでしょうか?

// コードにすると
while( /* 接続している */ )
  Sleep(100);

// 次の処理へ
934933:03/06/20 21:38
質問のage忘れすいません。
>>933
そのスケルトンは冗談だよな?
936933:03/06/20 22:24
>>935
本当なのですが…
OnReceive() で全て処理しているのですが
駄目ですか?
OnReceiveってCAsyncSocketの派生クラスでオーバーライドするメンバ関数でしょ?
CSocketとは関係ないような……???
CSocketでもオーバーライドするんでなかったかな、OnReceiveは。
939933:03/06/20 23:01
>>937
本当ですね。
親クラスをCAsyncSocketにしても動きました。
OnConnect() でフラグを立てて、
OnClose() でフラグを消すことにします。
ありがとうございました。
>>939
おそらく君はまだわかってない。
941デフォルトの名無しさん:03/06/21 12:02
ダイアログでピクチャボックスなどを貼り付けていると座標やらサイズが右下の方にでますよね
でもデバッグしててGetClientRectとかでとったサイズで、はなからこの大きさにしよう、
とおもってダイアログエディタで座標とサイズを見ながらぴったしほしいサイズにしても
実際に表示されると違った大きさになりませんか?
実際ダイアログエディタで出る座標は実際の座標とは違うから、何故か。
コントロールの配置にしても座標は1ずつ変わってるのに画面上では微妙に合わなかったりする。
複数ダイアログ作る場合等に参考にする程度のものって感じ。
「ダイアログ単位」って香具師が絡んでるんでしょ?
スタティックコントロールを表みたいに並べた時に微妙に行間、列間が
合わなかったりするからね(´Д`;)
なんなんだろ、この仕様。
フォントサイズが環境依存だからじゃないの?
ダイアログ単位についてはMSDNの GetDialogBaseUnits() 参照。

DWORD base = ::GetDialogBaseUnits();
int pixelX = MulDiv( 1, LOWORD(base), 4 );
int pixelY = MulDiv( 1, HIWORD(base), 8 );

を実行すると、pixelX = pixelY = 2 となり、1ダイアログテンプレート単位が
2ピクセルに相当することがわかる。

すなわち2ピクセルの精度でしかコントロールを配置できない、ということになる...?
 RECT wrTarget, crTarget;
 ::GetWindowRect(hWnd, &wrTarget);
 ::GetWindowRect(hWnd, &crTarget);

#define DUX (LOWORD(GetDialogBaseUnits()))
#define DUY (HIWORD(GetDialogBaseUnits()))
#define DSX(x) ((x) * 4) / (DUX)
#define DSY(y) ((y) * 8) / (DUY)


 CString kekka;
 kekka.Format( "ピクセル座標\r\n"
        "ウインドサイズ :(%4d, %4d)-(%4d, %4d) 幅=%4d, 高=%4d\r\n"
        "クライアントサイズ:(%4d, %4d)-(%4d, %4d) 幅=%4d, 高=%4d\r\n"
        "ダイアログ座標\r\n"
        "ウインドサイズ :(%4d, %4d)-(%4d, %4d) 幅=%4d, 高=%4d\r\n"
        "クライアントサイズ:(%4d, %4d)-(%4d, %4d) 幅=%4d, 高=%4d\r\n"
        , wrTarget.left, wrTarget.top, wrTarget.right, wrTarget.bottom, wrTarget.right - wrTarget.left, wrTarget.bottom - wrTarget.top
        , crTarget.left, crTarget.top, crTarget.right, crTarget.bottom, crTarget.right - crTarget.left, crTarget.bottom - crTarget.top
        , DSX(wrTarget.left), DSY(wrTarget.top), DSX(wrTarget.right), DSY(wrTarget.bottom), DSX(wrTarget.right - wrTarget.left), DSY(wrTarget.bottom - wrTarget.top)
        , DSX(crTarget.left), DSY(crTarget.top), DSX(crTarget.right), DSY(crTarget.bottom), DSX(crTarget.right - crTarget.left), DSY(crTarget.bottom - crTarget.top)
        );
でためしますた。ダイアログエディタの表示とは異なる結果が・・
ちなみにたて横15ピクセルの窓ですが7*6という結果になってしまいました。

>>947
MapDialogRect()使ってね♥
949デフォルトの名無しさん:03/06/22 16:27
CMainFrameで子ウィンドウを新規に作成するには
::AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_NEW);
って教えてもらったんですけど、
メッセージボックスのエラーがでます。
新規作成の関数を消してMFCに依存すると上手く実行できるのですが。
MFCは糞ライブラリの代名詞
>>949
エラーメッセージを読んで見ましょう。
952デフォルトの名無しさん:03/06/22 17:00
>>951
例外unknown software exception(0xc00000fd)がアプリケーションの0x5f466cbcで発生しました。
どなたかワトソン先生の詳しい使い方を書いたサイトを教えてください。
>>949
>新規作成の関数を消してMFCに依存すると上手く実行できるのですが。
あたりまえだと思う。
>>952
何がしたいのかさっぱりわからんが
DocTemplate辺りを読んで見れ。
956デフォルトの名無しさん:03/06/22 21:56
>>955
そうなんです。DocTemplateを使いたいのですが、
OpenDocumentFileでパラメータを入れないと受け付けないし、
といった具合でうまくいかないのです。
>>956
もっとちゃんと嫁。
958デフォルトの名無しさん:03/06/23 17:10
>>957
問題はCMainFrameで使いたいことにあるのです。
>>958
そんなことは全然問題じゃない
960デフォルトの名無しさん:03/06/23 19:48
>>959
どうすりゃいいんすか?
961デフォルトの名無しさん:03/06/23 22:45
VisualStudioの『プロジェクト』の『設定』の『リンク』に関するオプションは,
プログラム中に以下のように記すことが出来ますが,
#pragma comment(linker, 〜

『プロジェクト』の『設定』の『C/C++』に関するオプションは,
同じように,#pragma 〜 で記述することは出来ないでしょうか?

よろしくお願いします.
出来ないです。

スレ違いでもあるが。
>>962
残念です.
微妙にスレ違いかと思いましたが,多分,このスレの人の方が関係あるかと・・・

どうも有り難うございました.
964デフォルトの名無しさん:03/06/24 18:21
↓に置いてあるようなメモリー最適化とか解放ツールって内部でどんなことやってるんでしょうか?
ttp://www.vector.co.jp/vpack/filearea/win95/hardware/mem/by_trend.html
>>964
そのページにある「超M」ってソフトにソース付いてるヨ(MFC)

原理はどれかのヘルプで説明してるでしょ
片っ端からダウンロードして読みな!
966964:03/06/24 18:45
>>965
ありがとうございます。
ソース付のもあったんですね……。

大量にメモリを確保して、スワップを起こさせてるのか。

API スレのほうで聞くべき質問でした、すいません。
スレ違いだったら申し訳ないんですが、vc6でcファイルやcppファイルの関連付け
のパラメータ設定ってどうなってますか? 

他の開発ツールが勝手に関連づけ変えちゃったのでエクスプローラーから

"C:\Microsoft Visual Studio\Common\MSDev98\Bin\msdev.exe" "%1"

って感じに修正したら・・・
必ず新しいMSDEVを起動してソースを開くようになっちゃいました( ´Д⊂ヽ
※以前は最後にアクティブにしたmsdevウインドウで開いてくれたのですが

>>967

DDEなんで説明がメンドー。だし、やっぱりスレ違い。
969967:03/06/24 19:54
>>968
DDEメッセージに[open("%1")]て入れたら行けマスタ。スレ汚しスマソ(´・ω・`)
970デフォルトの名無しさん:03/06/25 00:19
CFormViewの中身の大きさを、作成時にプログラムからで設定するにはどうすたらいいんですか
GetDlgItem( )->SetWindowPos
違うな。SetScrollSizesだ。
973デフォルトの名無しさん:03/06/25 02:06
MFCって理解しにくいよ。
そこでお願いなんだけど、良い参考書、お勧めの参考書を教えて欲しいんだ。
出来ればAppWizを使わないで解説してくれるようなのがいいな。
>>973
AppWiz使うとどういう不都合がありますか?
975デフォルトの名無しさん:03/06/25 18:53
>>957
ホント、どうすればいいんですか?
976デフォルトの名無しさん:03/06/25 18:55
ダイアログウィンドウをリサイズさせたいんですが、イベントはどのように受け取ればいいでしょうか?
ご存じのかたがおられましたら教えてください。
977デフォルトの名無しさん:03/06/25 19:14
CListCtrl で Itemの無い領域(最大列(行)数より右(下)) も
OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) で
描画させる方法はありますか?
>>973
とりあえず4000円未満の本は無視。
10000万円前後で探せばあるかも。
あと洋書、もしくは原著が外人。
>>975
try{
  ::AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_NEW);
}
catch(...){
  MessageBox("MFC逝ってよし!");
}
>>978
どっかの国買えそう。
買えるかなあ?
>>976
イベントを取るって?
>977
OnEraseBkgnd じゃだめなの?
AВГД・EЁ
985デフォルトの名無しさん:03/06/25 23:34
>>974
MFCとしての構造が理解しにくい

>>978
1万円か〜
と思ったら一億!!
ムリっす
買え!
次スレまだ〜?
>>985
ウィザードの吐くコードなんかたかが知れてるだろ。
あの程度把握できなきゃMFCの内部なんか到底無理。
「MFCによるWindowsプログラミング」を薦めたいところだが売ってないみたいだしな
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc2.2ch.net/test/read.cgi/tech/1047949606/
■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc2.2ch.net/tech/kako/1039/10396/1039607377.html
■ 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


ごめん、スレ立てれなかった。誰か頼む〜
991デフォルトの名無しさん:03/06/26 08:48
>>991

ありがとうー