トップページ⇒tech
944コメント318KB

■ VisualC++(MFC限定)相談室 3■

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001MFCNGNG
VC++.NETになったって、MFCも使う所存!
0002デフォルトの名無しさんNGNG
■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/test/read.cgi/tech/989902845/

■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/test/read.cgi/tech/1008031675/
0003IINGNG
WinIIk
0004デフォルトの名無しさんNGNG
4!
0005デフォルトの名無しさんNGNG
MFCでは動的にボタンを作った場合
イベントはどうして取ればいいのでしょう?

ON_BN_CLICKED(IDC_XXXXX, OnXXXXX)
↑こんな風に書けないしって事なんですけど。
0006デフォルトの名無しさんNGNG
^ `
VC++のエディタ上でが空白文字のとこに現れるようになったんだが、
どうやったら消せる?
0007修正NGNG

VC++のエディタ上で
^ `
が空白文字のとこに現れるようになったんだが、
どうやったら消せる?


0008修正NGNG
VC++のエディタ上で
~~~~~
が空白文字のとこに現れるようになったんだが、
どうやったら消せる?
0009デフォルトの名無しさんNGNG
>>8
Ctrl+Shift+8
0010 NGNG
thanks
0011デフォルトの名無しさんNGNG
>>5

 生意気に答えてみます。
マクロ
ON_COMMAND(IDC_XXXXX,OnXXXXXXX)
を定義してハンドラ
void CXXXXXX::OnXXXXXXX()
を作成。もちろんヘッダでは
afx_msg void OnXXXXXXX();
を定義。これでどうでしょう。ぜんぜん的外れな回答でしたら
スミマソン
0012デフォルトの名無しさんNGNG
>>5
なんで書けないの?
手動で書けばいいじゃん。
0013デフォルトの名無しさんNGNG
>5
自分で書いたものは //{{ ... }}// の外に置くように。
さもないとClassWizardがパルプンテをくらう。
0014デフォルトの名無しさんNGNG
なつかしいなおい!<パルプンテ
0015デフォルトの名無しさんNGNG
CreateSolidCaretで作成したカレットを、点滅じゃなく点灯表示
させる方法ありますか?
0016MFC わけわかNGNG
ちょっと基本を教えてくれ〜〜〜。
MDI で、CxxxDoc と CxxxView ってクラスを作って。例えば、CxxxDoc でファ
イルを読み込んだら読み込んでいる状況を CxxxView に表示したいんだよ。
とりあえず、CxxxDoc でワーカスレッド作って適当な時に、CxxxDoc の状態を
更新して、UpdateAllViews(NULL); って呼べば、CxxxView の OnUpdate()
が呼ばれて表示を更新...、と思ったけどやってみたらアプリケーションエラー
になるんだよ。で、HELP 読んだら「たとえば、あるワーカー スレッドで計算を
行ってから、ドキュメント オブジェクトのメンバ関数 UpdateAllViews を呼び
出して、新しいデータに対するビューの収容先ウィンドウに反映させることはで
きません。」とそのものずばりのことが書いてあんだよ。

で、対処としては「第 1 の方法は、ワーカー スレッドに C++ オブジェクトを
渡さずに HWND などのハンドルを個別に渡す方法です。」と「もう 1 つの方法
は、ワーカー スレッドが処理するタスクごとに新しいユーザー定義のメッセー
ジを作成し、このメッセージを ::PostMessage 関数を使ってアプリケーション
のメイン ウィンドウに渡す方法です。」って書いてあんだけど、HWND 等のハン
ドルってどのハンドル渡しゃいいんだ ? CxxxDoc か ? CxxxView か ?
また、::PostMessage で送ったメッセージを CxxxView で受けるにゃどうすりゃ
いいんだ ?
0017デフォルトの名無しさんNGNG
> HWND 等のハンドルってどのハンドル渡しゃいいんだ ?
この場合はDocかな。

> ::PostMessage で送ったメッセージを CxxxView で受けるにゃどうすりゃ
手動でハンドラを追加する
>>11が参考になるかも。
0018デフォルトの名無しさんNGNG
>>17
すまん、もう少し教えてくれ。Doc って、CxxxDoc のことだよね。これには、
HWND はないんだが...。(CxxxView なら、CWnd が m_hWnd 持ってんだけ
ど。) なんか、HWND を取り出す関数とかあるのかな ?
0019デフォルトの名無しさんNGNG
すまんViewだ。
0020デフォルトの名無しさんNGNG
>18
第2の方法(アプリケーションにPostMessage)で行くのなら、
第1の方法(HWND渡して云々)は関係ないだろ。
まあ、この場合、スレッドにViewのウィンドウハンドルを渡して
そこにメッセージを投げさせるのが妥当だろうけど。
0021デフォルトの名無しさんNGNG
メモリの確保と開放について質問があります。
例えばクラスの中の関数でこのような感じで
CBrush *CB = new CBrush(theApp.GetProfileInt(theApp.version,_T("TextBkColor"),0));
return (HBRUSH)CB->m_hObject;
newしてその値を返すとき、この*CBをdeleteすることが
できませんが、これはこのままでいいのでしょうか?
それともポインタではなく変数を利用してdeleteすべきでしょうか?
0022デフォルトの名無しさんNGNG
>>19
さんくす、でけたよ。
でも MFC のアーキテクチャーがよくわからん。これは、一つの CxxxDoc
に対して、CxxxView が一個だけだから良いけど、複数の CxxxView があ
るときは、その数分 HWND 渡すしかないのかなぁ。
0023デフォルトの名無しさんNGNG
>>22
安心したまえ。ドキュメント/ビューアーキテクチャで悩んでいるのは君だけではない。
しかし、大事なのはドキュメント/ビューアーキテクチャは使うことを「強要されない」って事だ。

実際、DocとViewをきっちり使い分けてるやつが何人居るやら。
0024デフォルトの名無しさんNGNG
>>21
リークします。
return CB;
じゃだめ?

>>23
>大事なのはドキュメント/ビューアーキテクチャは使うことを「強要されない」
否定はしないが、D/V/Fが完全に分離した設計も腕が上がれば、可能。
この場合、コードの冗長性とパフォーマンスに疑問を感じるが、今のCPUパワーで
なんの問題もない。
データ保持と、そのデータの操作は、CDocに徹する。
CViewは、CDocの内容のレンダリングに徹する。
ただし、CDocの作りはヘボいので注意。

0025デフォルトの名無しさんNGNG
>24
やっぱりリークするんですね。
struct HBRUSHを返したいのですが
では変数でやってみようと思って
CBrush CB = CBrush(theApp.GetProfileInt(theApp.version,_T("TextBkColor"),0));
このようにしてみたましたが、これは出来ないみたいですね。

本来
return (HBRUSH)GetStockObject(WHITE_BRUSH);
こうなっていたのをこれだと細かい色指定ができないなあと
思って今の形にしたのですが・・・
どうしたらよいでしょう?
0026デフォルトの名無しさんNGNG
>25
そーゆー時は、アプリのはじめでブラシを作っておいて、毎回渡して、
終了時に破棄すべし。
HBRUSHをAPIで、直接作る時も同じ。

ストックオブジェクトは、そのハンドルを破棄する必要がないから(破棄できない)
破棄を省略してるだけ。
WM_CTLCOLORなんかで
return ::CreateBrush();
としたら、毎回リークする(と思う)
002725NGNG
>26
なるほど。ありがとうございます。
無事メモリリークしなくなりました。
002825NGNG
すみません
もうひとつメモリリークに関して質問があります。
ダイアログクラスを
new で作って<vector>にしまっているとき、
必要が無くなったらdeleteして<vector>からそのポインタを消したいのですが、
以下のように
ダイアログクラスの
void MyDlg::OnClose() 関数から
CDialog::OnClose();
delete theApp.whoisdlg.at(d);
theApp.mydlg.erase(theApp.mydlg.begin() + d);
このようにしてdeleteしてみました
クラスの中からそのクラスを指すポインタを削除してるわけですから
なにかおかしなことになるかな?と思ったら
ちゃんと動いてしまいました。しかしデバッガには以下のようにメッセージが
でます。

Warning: calling DestroyWindow in CDialog::~CDialog --
OnDestroy or PostNcDestroy in derived class will not be called.
Warning: no message line prompt for ID 0x8008.
Warning: no message line prompt for ID 0x800A.

これはなにか問題ありますでしょうか?
それともこのような遣り方はやめた方が良いですか?
0029デフォルトの名無しさんNGNG
メッセージは、読んだとおりです。
「いきなり、~CDialog()かよっ」って感じです。

おれも良くわからんが、delete this;つーコードは「あり」らしい。
もう寝ます。
0030デフォルトの名無しさんNGNG
>>28
普通ウィンドウ消すときはDestroyWindowを使う。で、CDialogの場合は
OnDestroy の中で delete this するようになっていたような気がするゾナー。
このケースと関係あるかどうかは眠いのでよくわからん。
0031デフォルトの名無しさんNGNG
MFCのCRichEditViewで
文章の内容を見て色違いの
文章を出力するにはどうしたらよいでしょう?
文章の先頭を参照してある文字で始まっていたら
その行は色を替えるとかしたいのですが・・
0032デフォルトの名無しさんNGNG
間違ってC++相談室の方に書いてしまいました。すみません

CListViewの項目の間のバーをドラッグしたときにウインドウに
送られるメッセージは何でしょうか?
Spy++を使ってみましたが量が多すぎてよくわかりませんでした。
0033デフォルトの名無しさんNGNG
>32
それ専用に定義されたメッセージというのはたぶんない。
WM_LBUTTONUP なり WM_MOUSEMOVE なりで、
GetColumnWidth して幅が変わったかどうか調べる、
くらいしかないんじゃないかな。
0034デフォルトの名無しさんNGNG
CHtmlViewでIHTMLDocument2などを使ってHTMLの要素にアクセスする方法を
解説した書籍やサイトは無いでしょうか。
MSDNライブラリ日本語版で検索しても詳しく説明しているものがないのです。
0035デフォルトの名無しさんNGNG
EditBox内でCtrl + VやCtrl + Cを有効にするには
どうしたらよいでしょうか?
右クリックから貼り付けならば出来るのですが・・・。
0036デフォルトの名無しさんNGNG
ソース行カウントプロファイルで指定したファイルのみのプロファイルを
行いたいのですが、LCOUNT.BATのどこをどう編集すればよいのか分かりません。
編集しないと糞重いし、必要な個所を見つけるのも一苦労なので困ってます。
0037デフォルトの名無しさんNGNG
>>35
デフォルトで有効になってない?
0038デフォルトの名無しさんNGNG
>37
自分もそう思っていたのですが、なぜか動かないのです・・・。
CSplitterWndで区切って使っているので何か特殊な操作が必要なのでしょうか・・?
0039デフォルトの名無しさんNGNG
CSplitterWnd使ってるけど問題なくできるなぁ・・・
アクセラレータを変更したとか?
0040デフォルトの名無しさんNGNG
char file_names_buf[0x10000];
file_names_buf[0] = '\0';

CFileDialog dlg(true, NULL, NULL, OFN_ALLOWMULTISELECT,
"CSV(カンマ区切り) (*.csv)|*.csv|全てのファイル (*.*)|*.*||");

dlg.m_ofn.lpstrFile = file_names_buf;
dlg.m_ofn.nMaxFile = sizeof(file_names_buf);
if (dlg.DoModal() != IDOK) return; <---
...

複数ファイル選択可能のファイルダイアログを使っています。
上のコードで、複数のファイルを選択することはできるのですが、
ファイルを一つだけ選択すると、OKボタンを押しているのに、
IDOKが返らず、矢印のところでリターンしてしまいます。
な ぜ で す か ? 

よろしくお教授願います。
004135NGNG
>CSplitterWnd使ってるけど問題なくできるなぁ・・・
>アクセラレータを変更したとか?

すみませんアクセラレーターとは何でしょうか?
0042デフォルトの名無しさんNGNG
>>40
IDCANCELが返ってるね…<DoModal

>>41
リソースにAcceleratorがあるよ。
それでCtrl+*やAlt+*の組み合わせを簡単に設定できる。
ところでCtrl+*ってエディットビューをクリックしたりして
フォーカスを与えてからやってるんだよね?
0043デフォルトの名無しさん NGNG
ダイログベースでアプリを造ったんですが
右クリックで関数を実行したい時
マウスポイントの下にコントロールが
あると機能しないんですが、
回避策はあるのでしょうか?
0044デフォルトの名無しさんNGNG
>43
PreTranslateMessageで捕まえる
0045デフォルトの名無しさんNGNG
>>40
char file_names_buf[0x10000];
が大きすぎるみたい。0xFFFFだといける。
0046デフォルトの名無しさんNGNG
VK_RBUTTONですか?
ダブルクリックはどのうなるんでしょう?
でも質問に答えてくださってありがとうございました
004735NGNG
>リソースにAcceleratorがあるよ。
>それでCtrl+*やAlt+*の組み合わせを簡単に設定できる。
>ところでCtrl+*ってエディットビューをクリックしたりして
>フォーカスを与えてからやってるんだよね?

リソース見てみました。
特に変更はしてないです。
しかし。ここではないかと思われる点がありました

ダイアログ上でリターンキーが押されたらある処理を
するようにPreTranslateMessageをオーバーライドしていたのですが、

BOOL LineFormView::PreTranslateMessage(MSG* pMsg)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
if (pMsg->message == WM_KEYDOWN){
switch(pMsg->wParam){
case VK_RETURN:
OnButton1();
return TRUE;
break;
}
}
return CFormView::PreTranslateMessage(pMsg);
}

どうもここでは?と思っています。
しかしこれは見る限りでは
リターンキーが押されたときのみ処理をしたあと
return CFormView::PreTranslateMessage(pMsg);
すべてのメッセージを返していると思われるので、
どうも原因がわかりません・・・・。
0048デフォルトの名無しさんNGNG
>>47
すまん!スプリッタウィンドウっていうからてっきりCEditViewかと思ってたけど
CFormViewにエディットコントロールを貼り付けてたんだね。勘違いしてた。
で、フォームビューに貼り付けたエディットコントロールに対して
Ctrl+Vはデフォルトでできない。(さっき作って確認した)
アクセラレータリソースのCtrl+VやCtrl+Cを削除するとできるようになる。
004940NGNG
>>45
めっちゃたすかりました。
0x10000だと3バイトですもんね。できないはずだ・・・。

005035NGNG
>48
出来ました!ありがとうございます。
しかしなんで
アクセラレータリソースのを削除すると出来るようになるんでしょうか・・???
なんだか逆な気が・・・
今まできいていたほかのViewでもそのまま効くみたいですし。
0051仕様書無しさんNGNG
コンフリクトするから
0052デフォルトの名無しさんNGNG
今まではアクセラレータで指定されたリソースIDにメッセージを
持ち逃げされてたというか。
まぁAppWizardのおせっかいな部分ということで。
005335NGNG
すみません。もう一件質問させていただいてよろしいでしょうか?
前述のFormView内のEditBoxの背景色と文字テキストを替えたいのですが、
CEditにはSetBkColorなどの関数がないようなので、
CEditViewと同じように、
CtlColorをオーバーライドすればいいのだろうと思っています。
しかしFormViewの中の1アイテムの関数をオーバーライドする方法がわかりません。
クラスの新規作成を行って見ても
CEditBoxを継承するクラスを作成することは出来ないようですし・・
このような場合はどうしたらよいのでしょうか?
0054デフォルトの名無しさんNGNG
if(nCtlColor == CTLCOLOR_EDIT){
// IDC_EDIT1がEditBoxコントロールのID
if(pWnd->GetDlgCtrlID() == IDC_EDIT1){
…
…
}
}
0055VASHNGNG
社内LANのあるNTサーバの時刻を取得したんですが、どうするんでしょう?

SQLサーバもこのマシンで動いているので定期的に時刻をSQLテーブルに書いて
ローカルがそのSQLサーバにアクセスして取得する方法考えたけどこんな
アホなことしなくても良さそうだし。
0056デフォルトの名無しさんNGNG
ntpで検索すれ。ミリ秒単位で自動調整できる。
フレッツなどのプロバイダや公的機関のサイトが基準時刻だしてる。
0057VASHNGNG
インターネット接続していないサーバの時刻を取る必要がありまして、
>56 の方法は無理なんです。
0058デフォルトの名無しさんNGNG
>>56
もう少し、文章を読む癖をつけましょう。
「社内LANのあるNTサーバの時刻を取得したんですが」← こいつも文章を書く癖
をつけたほうが良いけどな。
その、社内 LAN がインターネットに繋がっていないとか考えないのか ?
時刻 → ntp と言う単純 (≒貧素) な発想が笑えます。

>>55
とりあえず、クライアントも Windows なら net time \\サーバ名 /set を定期
的に実行するなどしたら ?
0059デフォルトの名無しさんNGNG
>>57
桜時計を(必要な)全マシンに入れて、
サーバーマシンのをSNTPサーバーにすれば楽かな。

# 社内LANなら、net time で何かできる...のだろうと思うが俺はやったことない。
#(DOS窓で net time /? してみれ)
0060デフォルトの名無しさんNGNG
>56
オイオイオイオイ
煽られてるぜ〜?
0061デフォルトの名無しさんNGNG
そういや学校のノートパソコンが充電できなくなってて
電源を入れるたびに毎回時間がおかしくなってたから
スタートアップにnet timeを勝手に入れたなぁ。
0062どどどどシロートNGNG
おまがいします。教えてください!!
GetWindowRect APIの機能と、
Cwnd::GetWindowRect メンバ関数の機能とは、どう違うのでしょうか。
引数の数が違うことはわかりましたが・・・
0063VASHNGNG
いろいろとどうもです。
クライアントがかなりあるんで >58 の方法はダメかなとおもったけど、
現在作成中のプログラムにnet time \\サーバ名 /set をexecする
コード入れればいいかなとひらめいた。

でもWIN2Kの場合、権限ないと時刻変更できなかったような。
0064デフォルトの名無しさんNGNG
>>40
ねえ、あんたもプログラマなら...

if (dlg.DoModal() != IDOK) return; <---

を...

int rc = dlg.DoModal();
if(rc != IDOK) return;

とかに変更して、dlg.DoModal() から何返ってきてんのかを見るとか、IDCANCEL
ってわかったら CommDlgExtendedError() 呼んで、どんなエラーが起きてんのか
調べるとかしないの ? いつまでも教えて君じゃ進歩しないよ。
0065デフォルトの名無しさんNGNG
>>62
ソース見りゃいいじゃん。

void CWnd::GetWindowRect(LPRECT lpRect) const
{
 ASSERT(::IsWindow(m_hWnd));
 ::GetWindowRect(m_hWnd, lpRect);
}

要は、そのまま呼んでるだけだよ。
0066デフォルトの名無しさんNGNG
>>63
ディフォルトは、Power Users と Administrators だけ可。
ワークグループ環境ならローカルセキュリティポリシーで変更できるよ。
0067デフォルトの名無しさんNGNG
いきなりVC++やってもいいんですか?
C++とかから入った方がいいんですかね?
0068デフォルトの名無しさんNGNG
>>60
ププ、「煽られてるぜ〜」だって。馬鹿にされてると思わんかな、普通。
0069デフォルトの名無しさんNGNG
>>67
このスレに書く位だから「VC++やる」を「MFCを使ってWindowsプログラムを作る」と
解釈すると、Cの知識があるならMFCを使いながらC++を勉強することをおすすめする。
0070デフォルトの名無しさんNGNG
>>65
そういうソースってどうやって見つけるんですか?
何か簡単に見つける方法があるのでしょうか。
0071デフォルトの名無しさんNGNG
>>67
Cが普通に出来るなら、やってりゃ結構++については覚えられるよ。問題なし。
もしCが出来ないなら、w95/98のコマンドモード。それが不可能なら
PC-98エミュ上での開発をお勧めしたい(コンパイラはフリーで有る。必要なら再度質問のこと)。
やっぱいきなりグラフィックだのコントロールだのは辛いと思うし、
まずはキャラクターで、ってね。

#w2000/xpが不可なのは、エスケープシーケンスを受け付けないから。
0072デフォルトの名無しさんNGNG
>70
VC買ったらMFCのソースが一式ついてくる。
探す手段の話なら、VCのIDEからでもエクスプローラからでも
「特定の文字列を含むファイルの検索」くらいのことはできる。
0073デフォルトの名無しさんNGNG
>>72
やっぱその方法ですか・・・
コンテキストメニューで「**の定義位置を表示」はできるけど
実際のコードを簡単に検索する機能はないんですね。
0074デフォルトの名無しさんNGNG
>>73
デバッガでステップ実行すれば奥まで入っていけるが。
0075デフォルトの名無しさんNGNG
奥まで入ると迷子になってしまいます
007667NGNG
当方VBとPerlしかやったことないものでして…
どちらから入った方がいいのかと思って質問させていただきました。
0077デフォルトの名無しさんNGNG
>その、社内 LAN がインターネットに繋がっていないとか考えないのか ?
>時刻 → ntp と言う単純 (≒貧素) な発想が笑えます。
ntpはudp/ipが通ってれば、The Internetにつながってなくても
動きますが何か。
0078デフォルトの名無しさんNGNG
コントロールのリストボックスに結果を1行づつ表示させているのですが,
行が増えた場合、AddStringまたはInsertStringで最終行に追加しても,
自動的には最終行へスクロールして表示されません.

スクロールを制御する関数,あるいは自動的に表示とスクロールを行う
メソッドなどが存在するのでしょうか?

よろしくお願いします.
0079デフォルトの名無しさんNGNG
>>78
SetCurSelの説明に
「文字列を選択し、その文字列が表示されるように必要に応じてスクロールします。」
って書いてるけど
0080デフォルトの名無しさんNGNG
質問させてください。
CSplitterWndで分割してビューを3個1列に配置しました。
一番左のビューの最小幅を指定し、それより小さくできないようにしたいと思したいのですが、うまくいきません。
SetColumnInfo()を使って最小幅を指定できるのですが、この場合、最小幅より小さくするとビューの幅が0になってしまいます。

WM_SIZEを拾ってMoveWindowでサイズを変更してもやはりダメでした。

うまい方法がありましたら、ご指導お願いします。
0081デフォルトの名無しさんNGNG
>>80
まず君は列の概念から勉強しなおしたまえ。
何で1列なのに一番左なんだ。
1行3列って意味か?
008280NGNG
すいません。訂正です。
×CSplitterWndで分割してビューを3個1列に配置しました。
○CSplitterWndで分割してビューを3個横1列に配置しました。

×思したいのですが
○思うのですが

(;´Д`)
008378NGNG
皆さん,有難うございました.
m_list.SetCurSel(m_list.GetCount()-1)と,
プロバティで行を選択しないを設定したら,
目的の通りになりました.

0084デフォルトの名無しさんNGNG
SetTopIndexってのもあるよ。
しかし、リストボックスで結果表示か……。
>78の次の質問はきっと「どうやったらリストボックスを
水平スクロールできるのですか」だな……。
008578NGNG
>>84
確かに出来ました.有難うございます.
ステータスバーにステータス表示するよりも,
数行のリストボックスに表示した方が,
履歴が分かって良いと思うのですが..

VCのアウトプットウィンドウのような感じです.
エディットボックスで作るべきなんでしょうか?
0086デフォルトの名無しさんNGNG
>>85
別にリストボックスでも悪いことはないんじゃない?
ただ、横スクロールもさせたいって思うと、ちょっとだけ手間がかかる。ちょっとだけな。
0087デフォルトの名無しさん NGNG
リストビューのサブアイテムのテキストってどのように管理されているのでしょ
うか?テキストを編集したとき、テキストの元のデータに編集を反映させたいの
ですが何かよい方法ありませんか?
 つまり
CString text;
m_List->SetItemText(n,m,text);
こうやって表示したテキストを
m_List->SetItemText(n,m,"new");
のように編集した後に元のtextにも変更を反映
させたいんです。参照を渡してみたりしたんですけど、やっぱ
そんなんじゃ無理ですか??
0088デフォルトの名無しさんNGNG
text = _T("new");
008987NGNG
>>88

 あ、いや違うんです。言いたかったのは
text = _T("new");
見たいな代入処理なしで反映されたらなぁ・・・って思ったんです。なぜかというと、
レポートビューにCStringオブジェクトを渡してテキストを書いても、ソートしたりカラムの順番が変わ
るとアイテムとかサブアイテムのインデックスも変わってしまうから、元のCString
オブジェクトを特定するのが大変そうなので・・・。でもInsertItemもSetItemTextも
引数の文字列はconstだから無理ですね。今自分でわかりました。
 でも、どうやって元のオブジェクトを特定するのが一番うまい方法なんだろう・・・。
こりゃキツイ(´_ゝ`)
0090デフォルトの名無しさんNGNG
ずばりLPSTR_TEXTCALLBACKで解決と見た。
009187NGNG
>>90

 厨房なもんですみませんが、具体的な記述方法教えていただけませんか?
009287NGNG
なんとかLVN_GETDISPINFO、LVN_SETDISPINFOを受け取る、というところまで
わかりました。しかし、メッセージをハンドルする関数の書式がわかりません。
どのようにテキストを渡してやればよいのでしょうか?return char*などやって
しまってましたが、やはりだめですね。ハンドラに渡される引数に入れてやるん
でしょうか?ハンドラに渡される引数を教えていただけませんか?
0093デフォルトの名無しさんNGNG
>>92
ClassWizardでLVN_GETDISPINFOのハンドラを作って

void CxxxView::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
if(pDispInfo->item.mask & LVIF_TEXT){
switch(pDispInfo->item.iSubItem){
case 0:
::lstrcpy(pDispInfo->item.pszText, _T("Item"));
break;
case 1:
::lstrcpy(pDispInfo->item.pszText, _T("SubItem"));
break;
}
}

*pResult = 0;
}
009487NGNG
>>93

 ありがとうございました!これでうまく行きそうです。本当にありがとう
ございました
0095デフォルトの名無しさんNGNG
 ダイアログにタブコントロールを設けて、その上にピクチャコントロールを張り付けてます。
同じ大きさのダイアログ複数に同様の図形を入れるので、OnPaint()から別にメンバ関数を
作って、描画をそこで行うようにしました(引数はピクチャコントロールのIDで、関数中で
GetDlgItem()する)。
 描画そのものはうまくいったのですが、別のウインドウを上に重ねてから、重ねたウインドウを
最小化させるなど、一部の動作で再描画がされません。
 何か抜けてるのかよく分からない状態なのですが、なにがおかしいのでしょうか?
0096デフォルトの名無しさんNGNG
コードがおかしい
0097デフォルトの名無しさんNGNG
TreeViewで項目ごとにフォントの色を変えたいのですが・・・
CTreeCtrl * TC = &GetTreeCtrl();
TC->SetTextColor(RGB(64,64,64));

してもダメなようでした。
EditViewなどでも違う方法をとりますよね。
結局SetTextColorはDrawTextを使うときしか使えないのかな・・・
とすると普通ノーマルのCViewでしか使えないですよね。
方法をご存知の方教えてください。
0098デフォルトの名無しさんNGNG
>97
オーナードローじゃだめなの?
0099デフォルトの名無しさんNGNG
プロパティシート又は複数のプロパティーページの同じ場所に
ビットマップを貼り付けたいのですが、
誰かいい方法を知りませんか?
よろしくお願いします。
0100PowerPointNGNG
今回、PowerPointをVC++から制御することになりました。
以前、Excelの処理はやったことがあるので、同じことだろうと思って
余裕でいたのですが、なんだか少し違うようです。
Excelのときは、Application・Workbooks・Workbookの順に
CreateまたはAttachDispatchしていました。
PowerPointだと、Application・Presentations・Presentationになります。
ApplicationとPresentationsのDispatchは正常にいくのですが、
その後、Openするときに「PowerPointのフレームウインドウは存在しません」
とのエラーメッセージがでます。
----- サンプルコード -----
_Application pptApp;
Presentations pptPrts;
_Presentation pptPrt;
int ret = pptApp.CreateDispatch("PowerPoint.Application");
if(ret == 0)
{
return;
}
pptPrts.AttachDispatch(pptApp.GetPresentations());
CString FileName = "D:\\test.ppt";
pptPrt.AttachDispatch(pptPrts.Open(FileName, 0, 0, 1)); <--- ここでエラー
-----------------------------
PowerPointが起動されていれば、ファイルは開きます。
何の制御が足りないんでしょうか?よろしくお願いします。
0101デフォルトの名無しさんNGNG
EditBox自作について質問です。

今EditBoxを継承してOCXを作っていて、コントロールに
Replaceメソッドを付けたいのですが、うまくいかず困っています。

コントロール名はTestです

とりあえずReplaceメソッドを新規で追加しました。(このとき引数なし)
次にCTestCtrlのReplaceに(BSTR find,BSTR Rep)と追加したところ、
「Replaceが宣言されていない」を怒られました。
どの場所を直せばよいのか見当がつかないので、どうかお願いします。

あと、Replace関数内で元からあるプロパティ(CaptionやText)が参照できないので
こちらも合わせてお願いします。
0102デフォルトの名無しさんNGNG
>>101
死ね
0103デフォルトの名無しさんNGNG
Visual C/C++?(ぷっ

こんな生産性の低いプログラムを一生懸命覚えた人、ご苦労様。
いまや世界最高開発者人口を誇るのはVisual Basic。
そしてVisual C# .netの登場でVisual C/C++はFortranやCOBOL
のように過去の開発言語になることは必至。

.netからはBasicやC#でもC/C++と同等の柔軟性を持っていて
かつ生産性も高いものになるそうで、会社内にC#とC++プログラマ
がいたらその差歴然。一日中エラー処理に悩んじゃってください。
0104デフォルトの名無しさんNGNG
>>103
敗北者?
0105デフォルトの名無しさんNGNG
いやマジでVisual C++はそのうち消えるだろうな
C,C++は残るだろうけど
0106っっjNGNG
カラーダイアログの実装方法を教えれや
0107デフォルトの名無しさんNGNG
プロパティページを表示する場所って変えれるんでしょうか?
通常の場所より、下のほうに移動したいんですけど・・・。
誰か知っていたら教えてください。
0108デフォルトの名無しさんNGNG
まー別に深刻な問題でもない。今現在言語一つ二つ出来たら、
大抵は1年も有れば乗り換えられるんでないかな。プログラム向きの脳味噌になってっから。
漏れもハッカーレベルには及ばないにせよ、普通にこなせてるしさ。
0109101NGNG
お願いします
0110デフォルトの名無しさんNGNG
CListCtrlのCHeaderCtrlのdividerでサイズの変更を不可能にしたいです。
どうしたら良いでしょうか?
CListCtrlでCHeaderCtrlからHDN_BEGINTRACKメッセージが送られていることはわかったのですが、
処理をさせない方法とかわかりません。
宜しくお願いします。
0111デフォルトの名無しさんNGNG
>>108
だよな。会社の意向で俺もVC++からVB主流に転換したけど
初めてVB覚えた人に比べ短期間で覚えられた気がする。
それにVBでも変数とそのアドレス意識できるとAPI呼び出すとき
何かと役に立つし。
0112デフォルトの名無しさんNGNG
MFCでコンパイルせずにリソース部分を
動的に変更することってできるのでしょうか?
リストビューの項目を変更・追加・削除するとか。

リソースファイル(*.rc)をいじろうとしているのですが
文字列が16進数になっていてどこをいじれば分かりません。

C++Builderならそこらへんがかなり手軽にできると聞きました。
MFC(VisualC++)でも手軽にリソース部分を変更できる
方法がありましたら教えて下さい。よろしくお願いします。
0113デフォルトの名無しさんNGNG
実行時にリソースを変更?
0114101NGNG
EditBox自作について質問です。

今EditBoxを継承してOCXを作っていて、コントロールに
Replaceメソッドを付けたいのですが、うまくいかず困っています。

コントロール名はTestです

とりあえずReplaceメソッドを新規で追加しました。(このとき引数なし)
次にCTestCtrlのReplaceに(BSTR find,BSTR Rep)と追加したところ、
「Replaceが宣言されていない」を怒られました。
どの場所を直せばよいのか見当がつかないので、どうかお願いします。

あと、Replace関数内で元からあるプロパティ(CaptionやText)が参照できないので
こちらも合わせてお願いします。

また放置されたらマルチポスト開始します
0115尭日 杣NGNG
>110
//CListCtrlの派生クラスCExLsitCtrlを作って
BEGIN_MESSAGE_MAP(CExListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CDeliveListCtrl)
ON_NOTIFY(HDN_BEGINTRACK, 0, OnBegintrack)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// メッセージハンドラ --------------------
void CExListCtrl::OnBegintrack(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
*pResult = 0;
}
//とかどうよ?
0116デフォルトの名無しさんNGNG
マルチポストする前に入門書でも買え
0117101NGNG
>>116
5000円出して買った本にはHello Worldとメモ帳、
動画の作り方しか書いてなかったんです。
お年玉使ってVCと入門書買ったのにコレじゃあんまりだ。
せめてちょっと何か作れるようになって遠まわしに自慢したい。

だめですか?
0118デフォルトの名無しさんNGNG
マルチポスト開始予告付き
コワイッ
0119101NGNG
メソッドの引数は解決しました。
ヘッダも書き換えなきゃナランのね。

あとは既存のプロパティの参照方法。

アレって追加時に「値の参照・取得」オプションを選択しないと
コード内で参照できないの?
それとも何か別の方法があるの?
0120101NGNG
あと聞きたいこと追加。
プロパティとメンバ変数の違いって何?
0121101NGNG
3
0122デフォルトの名無しさんNGNG
>115

HDN_BEGINTRACKWとHDN_DIVIDERDBLCLICKWのメッセージを受け取り無事解決しました。
(Win2000のため?)
ありがとうございました。

VC++って難しいですね。
0123デフォルトの名無しさんNGNG
恐ろしく厨房な質問で申し訳ないのですが、MFCってどこにグローバル変数を
記述すればいいのですか?
マジで分かりません・・・。
0124デフォルトの名無しさんNGNG
>>123
MFC ったって言語自体は C++ (標準からはちょっと外れてるが) なんだから
ソースの好きなところに書いて下さい。
0125100NGNG
自己レスです。
CreateDispatch()の後に、pptApp.SetVisible(TRUE);を入れたら
うまくいきました。
値をFALSEにすると、またエラーになるのが不思議ですが。
0126123NGNG
>>124
どこかのヘッダに書くと、「すでに定義されています」というエラーが沢山出てしまうのです。
extern付けても「未解決です」というエラーが出てしまって駄目です。
0127デフォルトの名無しさんNGNG
>>126
.cpp の方に書けぃ。ヘッダの方には必要ならexternで。
MFCじゃなくても同じぞ。(w
0128デフォルトの名無しさんNGNG
すごくレベルの高い質問だ>>126
*.cppに書いたらど〜いうエラーになるかやってみたら
0129123NGNG
>>127-128
*.cppに書いても、当然他のファイル(クラス)から参照できないので
「定義されてません」というエラーが出ます。
だからと言って、全てのファイルにインクルードされるヘッダに書くと
「すでに定義されいます」と出てしまいますし。
externしても、やはり「未解決です」と言ったエラーが出ます。何でだろう。
0130101NGNG
2
0131127NGNG
>>129
だーら、まずどっかの cpp に一つ書いて、
ヘッダの方には extern で書けとゆーとろーがゴルァ。
0132デフォルトの名無しさんNGNG
>グローバル変数
アプリケーションクラスのヘッダに
static int n;
とか。
0133123NGNG
>>131
いや、もちろんそういう書き方してるんですけど。その逆もやってみました。

とりあえず、自分でも最高にくだらない質問してると思うので、何とか自分で解決してみます。
お騒がせしました。
0134デフォルトの名無しさんNGNG
>>129
全てのファイルにincludeされるヘッダとやらに全部書いてるさ。漏れは。

SET int valiable VAL(123);

とかして、Appクラスの場合は SET : NULL VAL(x) : = x
その他は SET : extern VAL(x): NULL とdefineしておく。
必要無いソースにもextern宣言されると言う弱点は有るけど、管理は楽っぽ。
今時はコンパイル速度なんか無視出来るし(w
0135101NGNG
1
0136101NGNG
0
0137101NGNG
-1
0138101NGNG
-1
0139デフォルトの名無しさんNGNG
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?

プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?
プロパティとメンバ変数って何が違うの?プロパティとメンバ変数って何が違うの?
0140デフォルトの名無しさんNGNG
ポインタ値とアドレスって何が違うの?
0141デフォルトの名無しさんNGNG
>>140
ポインタ値が示す場所がアドレスです。

ポインタ値→地図
アドレス→実際の場所
0142デフォルトの名無しさんNGNG
スレタイトル見えてますか?
0143デフォルトの名無しさんNGNG
>112
質問の意味がよくわからないけど・・・
リソースファイルをテキスト形式で開いたらリソースの中は見れますよ。
ちなみに、「ファイルを開く」→用途をテキストに変更。
0144ボー然NGNG
ダイアログエディタで貼り付けた CScrollBar って、もしかして
親ウィンドウにメッセージ送ってこないんスか?
0145デフォルトの名無しさんNGNG
>144
んなこたーない。が、何のメッセージが来るのを期待してる?
0146デフォルトの名無しさんNGNG
 スレ違いかもしれませんが教えてください。
VC++6.0でプログラムを作成しています。
 プログラムの途中経過を保存したいために、途中まで出来たところで
すべてをコピーして、新フォルダにペーストし次にこれを開いてプログ
ラムを書いていました。
 すると何とコピー元の内容まで書き換えられているではないですか。
元の内容を書き換えるのをやめさせるにはどのようにしたら良いので
すか?
 初心者の質問ですみません。

 
0147デフォルトの名無しさんNGNG
フロッピーディスクに隔離する。

とうか多だ短にもとのファイルを開いてデバッグしていた
ってことじゃない。
コピーしたらリビルドしたほうが良いよ。
0148デフォルトの名無しさんNGNG
      ,一-、
     / ̄ l |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ■■-っ < >>146 んなーこたーない
    ´∀`/    \__________
   __/|Y/\.
 Ё|__ | /  |
     | У..  |
0149デフォルトの名無しさんNGNG
 147, 148のターモさん!有り難うございます、146です。
勇気もりもりで、アプリケーションウィザードでSDIのスケルトンを作り、
それを新たなフォルダーにコピーした後で、画面に"TEST"と表示させるよ
うに変更して保存。次にコピー元のプロジェクトを実行すると
”TEST”は表示されない・・・ ターモさんが正しい・・・。
 では・・・と146でのプログラムを新たなフォルダにコピーして内容を
書き換えると、やっぱりコピー元も変更される。インプリメントファイル
のプロパティを見てみると、コピー元ファイルプロパティが、確かにコピー
元のファイル名になっている・・・ケド・・・・試しに作ったスケルトン
では、コピーしたファイルでもこのコピー元ファイルプロパティは自分自
身になっている。
 なんか変なことしたのかな?


0150コージーNGNG
>>149
その変更したファイルは、実はプロジェクトフォルダではない
別の場所にあるとか。
んなーこともないか。
0151デフォルトの名無しさんNGNG
146 = 149 です。
 魑魅魍魎の世界です。まるで狐に化かされていたかのように
正常な動作になりました。 ターモさんは正しい。
原因全くわからず
 こりゃまた・・・お騒がせしました。
0152デフォルトの名無しさんNGNG
教えてください。
ダイアログ エディタのステータスバーに表示さている
サイズの単位は何でしょうか?
ピクセルじゃないみたいです。
0153デフォルトの名無しさんNGNG
MFCでスケルトンで作成したWindowのビューの大きさを変更するにはどうしたら良いんですか?
最初は、フレームのクライアント領域一杯に合わせて作成されるみたいですけど
この大きさを変更したいのです。
0154デフォルトの名無しさんNGNG
treectrlの削除した時削除したアイテムの情報を取得したいんですがうまく逝きません

void xxxx::OnDeleteitemTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;//←クラスウィザードに憑いていたコード
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
TV_TIEM item=pNMTreeView->itemNew;//ここに情報が格納されると思ったけど駄目
*pResult = 0;
}


typedef struct _TV_ITEM { tvi
UINT mask;
HTREEITEM hItem;
UINT state;
UINT stateMask;
LPSTR pszText;
int cchTextMax;

int iImage;

int iSelectedImage;
int cChildren;
LPARAM lParam;
} TV_ITEM, FAR *LPTV_ITEM;

根本的に間違ってるのかな?
0155154NGNG
スマソ自分で勝手に勘違いしてました。上で問題ないです。
0156ともくんNGNG
HVITEM構造体のmaskのHDI_HEIGTHとHDI_WIDTHが同じ値(0x0001)であるため、
リストコントロールのヘッダーの高さが変更できません。
どうしたらいいんでしょう?
0157デフォルトの名無しさんNGNG
>>152
ダイアログユニット(DLU)
詳しくはGetDialogBaseUnitsとかのヘルプを見て下ちい。
0158デフォルトの名無しさんNGNG
CToolBarCtrl::EnableButton でツールバーのボタンを淡色表示したいのですが変化ありません。
戻り値は1です。
CToolBarCtrl::HideButton は非表示になります。

なぜCToolBarCtrl::EnableButtonで淡色表示にならないのでしょうか。
0159デフォルトの名無しさんNGNG
>>153
WM_SIZEを受け取って自前で大きさを変える。
ついでに WM_GETMINMAXINFO で検索してみたまい。
0160デフォルトの名無しさんNGNG
>>158
MFCには独自のやりかたがあるよ。
UPDATE_COMMAND_UIハンドラで
pCmdUI->Enable(FALSE);
してね。
0161デフォルトの名無しさんNGNG
>>158
ずばり前スレの
http://pc.2ch.net/test/read.cgi/tech/1008031675/783
に出てるんだけどな。
0162デフォルトの名無しさんNGNG
ダイアログベースのスケルトンで、

void CHogeDlg::OnPaint()
{
  if (IsIconic())
  {
  この部分

と、

// システムは、ユーザーが最小化ウィンドウをドラッグしている間、
// カーソルを表示するためにここを呼び出します。
HCURSOR CHogeDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

の部分って、いつ呼ばれるんです? ダイアログを最小化しても呼ばれないみたいだし。
っていうか、何のためにあるのか分かりません。何で?
「最小化ウィンドウをドラッグ」ってどういうことですか?
0163デフォルトの名無しさんNGNG
勘違いしているかもしれないけど、
explorer以外のシェルを使うとわかるかも。l
0164デフォルトの名無しさんNGNG
>>162
俺はその部分削除してるけど問題ない
クラスウィザードから削除しましょう
0165デフォルトの名無しさんNGNG
>>162
NT3.51などのprogmanがシェルだったころの名残だろ。
http://www.microsoft.com/japan/support/kb/articles/J013/3/34.asp
0166162NGNG
>>163 >>164 >>165
納得です。
0167デフォルトの名無しさんNGNG
質問させてください。
ATL COM AppWizardで
MFCをサポートするようにしたんだけど
CRecordsetクラスから派生したODBCで外部DBにアクセスするクラスを生成しようとすると
CRecordsetが定義されていないとエラーが出ます。
#include <afxdb.h>としても
windows.h includedとかってエラーが出ちゃうんですが
解決策のヒントでもいいんでご教授お願いします。
0168デフォルトの名無しさんNGNG
エラーの内容くらい読め
嫁
夜目餘目
0169デフォルトの名無しさんNGNG
クラスの中のメンバーの持つ関数をオーバーライドするにはどうしたらよいのでしょうか?
たとえばmySocketクラスをCSocketを継承しないで作った場合、

class mySocket {
CArchive *m_paout;
CArchive *m_pain;
CSocketFile* m_psf;
CSocket *m_ps;
}
こんな感じにメンバーがいてソケットにデータを送った場合
データ変身があるとm_psのOnRecieveが呼び出されますよね?
このときのOnReceiveをmySocketクラスからオーバーライドするには
どうしたら良いのでしょうか?
0170デフォルトの名無しさんNGNG
なんのこっちゃ
0171デフォルトの名無しさんNGNG
CSocket *m_ps;
って書いてあるところにそのままCSocketを使うのではなく
CSocketから派生させたクラスを作って、そのクラスでオーバー
ライドするよ。普通は。
0172デフォルトの名無しさんNGNG
委譲ではオーバーライドはできない。
継承すれ。

class mySocket : public CSocket {
CArchive *m_paout;
CArchive *m_pain;
CSocketFile *m_pst;
void OnReceive(int);
};
0173デフォルトの名無しさんNGNG
http://techtips.belution.com/ja/vc/0056/

このページにのってる方法で、
MDIアプリケーションでのドキュメントのポインタを得ようとしているのですが、
(後半のサンプル)
CxxxDoc* pDoc = (CxxxDoc*)GetDocument(pView);
引数として指定するpViewをどのようにすべきかがわかりません。
そもそもViewへのポインタが得られていればそこからGetDocument
できるような気がしてしまうのですが・・・・・
0174デフォルトの名無しさんNGNG
>171,172

お二方、どうもありがとうございます。
無事解決しました。同じようなケースになることがたまにあるのですが、
それは設計が悪いのですね・・
CFormViewの中に設置したアイテム一つ一つの関数をオーバーライドしようとするときなどに
やっぱりこんな問題にぶつかります。
0175デフォルトの名無しさんNGNG
> そもそもViewへのポインタが得られていればそこからGetDocument
> できるような気がしてしまうのですが・・・・・

その Web ページちゃんと読んだ ?

> しかし、ビューをドキュメントに関連付けずに作成した場合などは、
> m_pDocument にドキュメントへのポインタは入っていません。
> したがって GetDocument() は使えないということになります。
> でも、どうしてもドキュメントへのポインタが必要なときがあります。

の時の話だよ。普通は、GetDocument() でいいんだよ。
0176173NGNG
>175
いえ、ビューの中から呼ぶのではなく別のところから
自分で作った新規クラスから呼びたいのです。
MDIですのでMAinView+MainDoc以外にも
いくつかのView+Docのくみあわせがあります。
その中で特定のDocを得ようとしているのですあ・・・

0177デフォルトの名無しさんNGNG
MDIのようなものをウィザードに頼らずに、ソース手書きで作りたいのですが、
どうすればよいかわかる方はおられますか?
そう、ちょうどタグブラウザのウィンドウシステムみたいにしたいのです。
0178 NGNG
vc++.netで、dllをリンクする項目がみあたりません。
以前の設定+リンクの項目ってどこへいったのでしょか。。
0179 NGNG
>178
ライブラリの設定なら、なくなったんじゃないかな。
指定しなくてもソースから自動でリンクをするようになってると思う。
0180デフォルトの名無しさんNGNG
CPropertySheetをDoModalで開いて
そのダイアログにサイズ変更枠をつけたいんだけど
どうすればいいのでしょう?
0181デフォルトの名無しさんNGNG
>>180
俺も前にやろうとしたけど・・・
無理だと思う・・・
0182デフォルトの名無しさんNGNG
サイズ変更枠をつけることはできる。
ただ、それをつかってサイズを変更できるかは
知らないけど。
0183173NGNG
すみません。もう少し一般的な質問に戻させてもらってよいでしょうか?
TreeViewを使ったプログラムなのですが、
ViewでもDocでもない
新規クラスをつくりDocのメンバ変数とします。
そしてそこから、Docの中身を変更したときに
TreeViewを再描画させたいのです。ですのでDocのポインタと取り
UpdateAllViewsするのがいいのだろうかと思ったのですが、
このようなケースの時はどのような方法がベストでしょうか・・?
0184デフォルトの名無しさんNGNG
>>177
ウィザードで作ったスケルトンのソースを見れば良いと思います。

>>183
> Docのポインタと取りUpdateAllViewsする
という方法がいいと思います。
0185173NGNG
>184
そうですか、やっぱりそこまでの方針は正しかったのですね・・・

強引にCMyCLassから
CMyCLass::Update(){
MainView* pView;
MainDoc * pD = (MainDoc*)GetDocument(pView);
pD->UpdateAllViews(pView);
}
こんな風にしてみましたが、だめでした・・
これは当然でしょうね・・・

↓この関数を呼びたいのですが・・・
CDocument* GetDocument(CView* pView)
{
// pAppにCWinApp オブジェクトへのポインタを取得
CWinApp* pApp= AfxGetApp();

// 最初のドキュメントテンプレートの位置を取得
POSITION posTemplate = pApp->GetFirstDocTemplatePosition();
while (posTemplate != NULL)
{
// ドキュメントテンプレートへのポインタを取得
CDocTemplate* pTemplate = pApp->GetNextDocTemplate(posTemplate);

// 最初のドキュメントの位置を取得
POSITION posDoc = pTemplate->GetFirstDocPosition();
while (posDoc != NULL)
{
// pDocにドキュメントへのポインタを設定
CDocument* pDoc = pTemplate->GetNextDoc(posDoc);

// 最初のビューの位置を取得
POSITION posView = pDoc->GetFirstViewPosition();
while (posView != NULL)
{
// pDocViewにビューへのポインタを設定
CView* pDocView = pDoc->GetNextView(posView);

// 取得できたビューが指定されたビューならpDocをリターン
if (pDocView == pView)
return pDoc;
}
}
}
return NULL;
}
0186デフォルトの名無しさんNGNG
GetActiveDocument( )は使えないかな?
0187173NGNG
>186
GetActiveDocumentはCFrameWndのメンバですよね。
こうなると今度はCFrameWndのとり方がわからなかったりします・・。
うーん結局問題は
自作クラスとMFCクラスとの連携かも・・・
自作クラスからMFCのViewクラス、Docクラス、Frameクラス
あたりのポインタを手に入れる方法がわかれば何とかなりそうなのですが・・
アプリケーション全体へのポインタならAfxGetApp()
で手に入れることができるのはわかるのですが・・・
しかし問題は自作クラスと、MFCクラスの連携にあるとすると、
メッセージハンドラを使った連携なども可能そうですね。
例えば自作クラスから任意のハンドラをアプリケーションに返したり
なんてことは出来るのでしょうか?
できるならWM_UPDATEを自作クラスから発信して
Viewクラスでそれを受けて更新処理をすればいいのではと思います。

0188デフォルトの名無しさんNGNG
CFrameWndはAfxGetMainWnd( )で取れます。
SendMessageもできますし、CMainFrameでキャストすれば
GetActiveDocumentできます。
0189173NGNG
>188
ありがとうございます。
だんだん核心に近づいてきたかんじです。
CMainFrame *pMf = (CMainFrame*)AfxGetMainWnd();
MainDoc * pMd = (MainDoc*)pMf->GetActiveDocument();
こんな感じでやってみました。
これでMainDocへのポインタを手に入れることが出来ました。
そして
pMd->UpdateAllViews(

しようとすると・・・・
UpdateAllViewsの第一引数pView pSenderが・・・・
入れるものがないです・・・。
Viewへのポインタが結局必要なのでしょうか・・・

SendMessageの方は
CWndから送れるようですので、
試してみます。
しかしWM_UPDATEってメッセージないんですね・・・
てっきりOnUpdateを呼ぶメッセージがあるきがしてたのですが・・・
0190デフォルトの名無しさんNGNG
とりあえず0でいいよ。
とりあえず0でいいよ。
とりあえず0でいいよ。
0191デフォルトの名無しさんNGNG
>>189
勘違いしてるようだけど、UpdateAllViewsの第一引数には
更新したいビューではなくて、更新したくないビューのポインタを入れる。
ビューを更新したいならNULLで。
0192180NGNG
>>181,182
レスどうもです
しょうがないのでCTabCtrl使って自作しました
0193173NGNG
190,191さん
どうもありがとうございます
CMainFrame *pMf = (CMainFrame*)AfxGetMainWnd();
MainDoc * pMd = (MainDoc*)pMf->GetActiveDocument();
pMd->UpdateAllViews(NULL);
このようにしたらコンパイルをちゃんととおり
よーし!っと思って実行すると
こんどはUpdateAllView関数内の
POSITION pos = GetFirstViewPosition();
ここでエラーが出ている模様・・・・・・。
これはいったい・・・・・
0194デフォルトの名無しさんNGNG
全然確認しないで発言するけど
CMainFrame *pMf = (CMainFrame*)AfxGetMainWnd();
pMf->GetActiveDocument()->UpdateAllViews(NULL);
もできないかな?
0195デフォルトの名無しさんNGNG
ファイル名、フォルダ名両方とも取得できるダイアログボックスってないですか?
ちなみに1度に複数選択できるようにしたいです。

フォルダ名が取得できなかったりして困っております。
0196173NGNG
>194
んーと、やっぱり同じ現象です。
どうやらGetActiveDocumentが
CMainFrame *pMf = (CMainFrame*)AfxGetMainWnd();
if (pMf == NULL){AfxMessageBox("error11");}
MainDoc * pMd = (MainDoc*)pMf->GetActiveDocument();
if (pMd == NULL){AfxMessageBox("error12");}
pMd->UpdateAllViews(NULL);


結局"error12"とメッセージボックスが開き
GetActiveDocument()がエラーを返す模様。
んーよく考えたらMDIだから
メインフレーム→子フレーム→GetActiveDocument()としなきゃならないのかもしれませんね。
0197デフォルトの名無しさんNGNG
CFormView内にエディットボックスを配置しましたが、
内容更新時に垂直スクロールバーが表示される場合のみ、以前のテキストが消されずに残ってしまいます。
また、その内容をスクロールしても、テキストが残されたままスクロールされ、ゴミが残ります。
正常な処理を行うには、

m_edit1 = cNewData;
UpdateData(FALSE);

だけではだめなのでしょうか?

m_edit1 = "";

を挟んでみたのですが、結果は変わりませんでした。
テキストの量がエディットボックス内に収まる場合(スクロールバーが現れない場合)は正常に更新されます。
更新のタイミングは、メッセージパンドラは拾わず、手動で行っています。
どうか、ご教示お願いします。

リソースエディタでは複数数行、垂直スクロール、改行を許可、境界線、にチェックを入れています。
初歩的な質問で申し訳ありません。よろしくお願いします。
0198デフォルトの名無しさんNGNG
>>196
MDIは作ったことないんだけど、
>MainDoc * pMd = (MainDoc*)pMf->GetActiveDocument();
は
MainDoc * pMd = (MainDoc*)(pMf->GetActiveDocument());
かなぁと。
あと、ドキュメントが複数あるようだけど、MainDocはアクティブになってるのかな??
0199をNGNG
>>197
>更新のタイミングは、メッセージパンドラは拾わず、手動で行っています。

これの意味が良くわからないけど、とりあえず
UpdateWindow()とかInvalidate()とかしてみるのは堂でしょおう

0200197NGNG
>>199さん
ありがとうございます。
Invalidate()を使って更新時に正常に描写されるようになりました。
スクロール時にゴミが残るはまだ対処できていません。
OnCtlColor()でフォームビューの背景の色を変えていたのですが、この辺にも原因がありそうです。
こちらの方を、もう少し調べてみます。

>更新のタイミングは、メッセージパンドラは拾わず、手動で行っています。
説明下手で申し訳ありません。自分でも何を言っているのかわからなくなってしまいました。
0201173NGNG
>198
どうもそれでもダメなようです。

もう一度整理してみます
フレームの構成としては
CMainFrame→CChildFrame
     →CChildFrame2
となっており
それぞれCChildFrameにMainDoc+MainView
CCHildFrame2にSubDoc+SubView
となっています。
このとき自作クラスCMyClassからMainViewに再描画の命令を出したいのです。

この場合はCMainFrameではなく
CChildFrameへのポインタを手に入れ
そこからGetActiveDocumentすればいいのではないかと、考えています。
しかし親フレームから子フレームのポインタを手に入れる、
もしくはアプリケーション全体へのポインタから特定の子フレームの
ポインタを手に入れる方法がわからず悩んでいます。
0202デフォルトの名無しさんNGNG
>201
自作クラスから View/Doc/Frame へのポインタを手に入れようとするから複雑になる。
自作クラスに View/Doc/Frameが自分へのポインタを自己申告すれば良いんでは?(初期化のときとかに)

あとは、自作クラスからやりたい放題。
見当違いだったらゴメンね。
0203173NGNG
>202
ありがとうございます。なるほど発想の転換ですね。
自作クラスというのがサーバの情報をもつクラスなのですが、複数あり、
それがMainDocのメンバとなっています。
ですのでMainDocの関数の中から自作クラスのオブジェクトを作るときに
MyServer("www.***.com","80",this)//アドレス、ポート、MainDocへのポインタ
を渡してthisを
自作クラスのメンバpMainDocに代入したら、
pMainDoc->UpdateAllViews(NULL)で出来ました。
しかしこの場合、あるオブジェクトが自分を保持しているクラスの
ポインタがわからないから、あらかじめ教えてもらうという方法ですよね。

クラスA →メンバとして所持→ クラスB

という関係の場合AからBへのポインタはすぐ手に入りますが
BからAは難しいんですね。
0204173NGNG
すみません。もうひとつ質問してよろしいでしょうか?
MDIアプリケーションで
子ウインドウが一つ開いていて
そこからもう一つ別の種類の子ウインドウを開くときにはどうすべきでしょうか?

先ほどと同じなのですが
CMainViewもしくはDocから
ChildFrame2+SubDoc+SubViewの組み合わせを
一つ新たに開きたいのです。

これが出来ればMDIについてだいぶ使えるようになるかと思うのですが・・・
DocumentTemplateに新たな子ウインドウへのポインタを追加すると
起動時に二つ(もしくは複数)のウインドウから選ぶ画面が出ますよね。
あのとき選ばなかった方を動的に作り出したいのです。
0205173NGNG


ChatFrame *cFrm = new ChatFrame();
CRect cr = CRect(0,0,400,400);
cFrm->Create(NULL,"test",WS_OVERLAPPEDWINDOW,cr,(CMainFrame*)AfxGetMainWnd(),NULL);
cFrm->ShowWindow(SW_SHOW);

SubDocら強引にこんな感じで開いてみました。
すると
Warning: Creating a pane with no CDocument.
まあこれはエラーでるだろうな・・・と思ったのですが・・・
0206173NGNG
むう悩みまくって知恵熱が・・・

いろいろ試行錯誤してようやく問題が整理できました。
つまるところMainFrameのメニューからウインドウ→新しくウインドウを開くを
するとウインドウを開くことが出来ますよね。
これをボタンかなにかでそのボタンを押したら動的にウインドウが開く
といった風にしたいのです。結局新しくウインドウを開くメニューでは
ID_WINDOW_NEWメッセージを送っているようですが、
これでは開くべきドキュメントテンプレートが複数あるときに
それを選択できませんよね?

MfcによるWindowsプログラミングと新VisualC++6.0入門を持っていますが、
MDIアプリに関する情報って少ないんですね。需要が無いんでしょうか・・・
0207デフォルトの名無しさんNGNG
>>206
需要が無いわけじゃないんだろうが、よほどの事がないと今はMDIにしないな。
最近はSDI、ていうかもっとExplorerスタイルのスプリッタ画面が主流かも。
2chブラウザのギコナビとかもそうでしょ。
0208デフォルトの名無しさんNGNG
「MFCによるWindowsプログラミング」を持ってるならわかると思うが
MDIは推奨されてないってことになってるしな
0209173NGNG
>207,208
そうですね。確かに推奨されてないというのは知っていました。
しかし、代替えの方式として提案されているものの作り方がわからないんですよ・・
こちらも情報が無い・・
「MFCによるWINDOWSプログラミング」の688ページ
(持ってない人すみません)に載ってるワークブックモデルが理想に近いのですが
(タブブラウザのようなものを想定しています)
MDIが作れるようになったら、こっちへ移行して〜っと思っていたのですが、
最初からワークブックモデルを目指した方がいいのかな・・・
タブブラウザのようなワークブックモデルのアプリケーションの解説って何かありませんでしょうか?
今手元にある書籍「mfcによる〜」「新Visualc++6.0、ビギナー編、シニア編」
「VisualC BlackBook」
のどれにも記載が無いのです。
0210デフォルトの名無しさんNGNG
「MFCによる〜」で言えばP657に自分でコントロールビューを
作る例としてタブ付きビューの作り方がちょこっと出てる。
たしか「Best of MSDN magazine 下巻」だったと思うけど、
その本にはExcelのワークシート風のタブウィンドウの作り方が載ってたような。
「VisualC++5.0プログラミング入門」というVC++5.0LearnigEditionに
付いてきた本(市販もされてるはず)には複数View&複数DocのMDI
アプリケーションの作り方が出てる。

あとはCodeGuruやCodeProjectにサンプルがないかなぁ。
0211デフォルトの名無しさんNGNG
ダイアログやメニューのリソースだけを入れたDLLを用意して、DLLを切り替えること
によって多国語対応しているソフトありますよね?
これってどうやるんでしょうか?
一応外部DLLからダイアログを表示することはできたんですけどそのあとがわかりません。

CDialog dlg;
HINSTANCE hInst;
RSRC hDlgInit;

hInst = ::LoadLibrary("jpn.lng");
hDlgInit = ::FindResource(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),RT_DIALOG);
hResource = ::LoadResource(hInst, hDlgInit);

if (hResource != NULL)
{
LPDLGTEMPLATE lpTemplate;

lpTemplate = (LPDLGTEMPLATE)GlobalLock(hResource);
GlobalUnlock(hResource);
dlg.InitModalIndirect(lpTemplate);
}

dlgg.DoModal();

本当はCDialogクラスから派生したCAboutDlgでやりたいんですけど、InitModalIndirect()
呼び出したあとにASSERTでとまっちゃいます。
0212デフォルトの名無しさんNGNG
ChildFrame2+SubDoc+SubViewの組み合わせを登録したCDocTemplateのポインタを
適当なところ(CXXXApp::m_pSubDocTemplateとか)に保存しておけばいいんじゃないか。

で、適当なユーザ定義メッセージ(WM_APP_OPENFRAMEとかなんとか)を定義して、
そのハンドラ(CXXXApp::OnAppOpenFrame())で
m_pSubDocTemplate->OpenDocumentFile(NULL);
するって感じではどうか。
0213デフォルトの名無しさんNGNG
MFCの上でWinsockを使ってHTTP://へアクセスしたいんですけどどうすればいいでしょう?
一応、WinMain()からDosで扱うのは、解ったのですが、
MFCに入れると、スレッドが作成できなかったり、エラーが出てどうしようもありません。

0214デフォルトの名無しさんNGNG
>>209
タブブラウザは、ただタブコントロール使ってるだけじゃん。
何が難しいの?
タブコントロールの使い方が分からんの?
0215デフォルトの名無しさんNGNG
タブコントロールの議論ではなくて、MDIの議論ですよ。
0216デフォルトの名無しさんNGNG
MDIで、内側の子フォームをロードするときに、ダイアログボックスをロードすることって、できるんですかね。
0217デフォルトの名無しさんNGNG
そういやMFC7.0に新しいViewクラスって追加されたのかね。
0218デフォルトの名無しさんNGNG
MFCは7なの?
5,6どこいったよ!
0219デフォルトの名無しさんNGNG
CsplitterWndを使ったViewで
一つのDocに複数のViewがあるとき
GetDocumentでDocへのポインタをえるにはどうしたらいいのでしょう?
AppクラスのInitInstanceのRUNTIME_CLASS
ではViewを一個しか指定できないですよね。
0220173NGNG
>210
そのタブビューの作り方はやってみました。
でもそのタブの動的作成が難しそうだなあ・・と思って作っただけで放置してました。
もう一回チャレンジしてみます。

>212
ありがとうございます。
とりあえずその遣り方で解決しました。
0221デフォルトの名無しさんNGNG
正直、MDIで成功してるのはMSDEVか、Nifterm位なもん。
0222デフォルトの名無しさんNGNG
>>219
どのViewからGetDocument()しても、
Documentへのポインタは取得できますが・・・
0223173NGNG
やはりいろいろ難しいところがありますねMDIは。
結局TabViewでやることにしました。
まあタブビューも資料がそんなにあるわけではないですが、
とりあえず
Best of MSDN magazine 下巻
を買いにいきまっす。
基本的に不思議なのがタブビューは一つのビューですよね。
一つ一つのタブの中身を3分割してそれぞれにまた別のビューを割り当てる
ということがしたいのですが、その場合はビューの下にビューを作るということですよね。
そういうことは可能なのでしょうか?
うーーん。先は長そうだ・・・
0224デフォルトの名無しさんNGNG
>ビューの下にビュー
それはスプリッタウィンドウでいいのでは?
0225名無しさん@EmacsNGNG
>>211
コンストラクタでリソースID渡してない?
その時点でリソースロードしちゃってるんだと思う。
クラスウィザードに吐かせたクラスはそうなってるはずだから
手で消せばいいかと思う。遅レスごめん。
0226名無しさん@EmacsNGNG
>>211
>>225
追加。
CDialogから派生したクラスのコンストラクタで >>211の
ようなことをやるようにして、他のソースの"CDialog"を
作ったクラス名で全部置換すれば動くべ。
0227173NGNG
とりあえずいろいろ指向錯誤しまくりでまだMDIに挑戦中。
同じドキュメントテンプレートから生み出した複数Frameの区別って
どこでするものでしょう?
それと複数のフレームは単一のDocオブジェクトを参照すべきなんでしょうか?
それとも一つのフレームに付き1つのオブジェクトってのが自然なのかなあ・・・・
この辺のポリシーがわからないので、設計がめちゃくちゃになってきました・・・
0228デフォルトの名無しさんNGNG
MDIは今風のアプリ設計にはあわないぞ。

男らしく全部ダイアログですませ。
0229デフォルトの名無しさんNGNG
>>228
いや、MDI って発表された時から「糞」だの「吐き気がする」だの
散々叩かれてますが。
0230173NGNG
>227,229
ぐへー。やはりそうですか・・・
とりあえずタブブラウザのMoonBrowzerのようなアプリが目標なんです。
例えばMoon Browzerとかはタブブラウザですが、
タブじゃないですよね。こういうのはMDIから作るのかなと思ってるのですが、
ちがうのですか・・・??
0231デフォルトの名無しさんNGNG
うわ、レスついてる。遅レスなんてとんでもない、感謝感激です^^

早速、コンストラクでID渡してるところを削除しましたらASSERTでなくなりました。

CAboutDlg::CAboutDlg()// : CDialog(CAboutDlg::IDD); →ここをコメントにしました。
{
HINSTANCE hInst = ::LoadLibrary("JPN.lng");
HRSRC hDlgInit = ::FindResource(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), RT_DIALOG);
HGLOBAL hResource = ::LoadResource(hInst, hDlgInit);

if (hResource != NULL)
{
LPDLGTEMPLATE lpTemplate;
lpTemplate = (LPDLGTEMPLATE)GlobalLock(hResource);
GlobalUnlock(hResource);
InitModalIndirect(lpTemplate);
}else{
//jpn.lngがなかった場合、自前リソースを使用。
}

}

こうすると、ダイアログ呼ぶ方は何も変更しなくていいのでスッキリしますね。
で、ちょっとまだ検証中なんですが、外部リソースDLLがなかった場合自前の
リソースを利用するようににしたいと思ってます。

実は上のコードでも、FindResourceをNULLで呼ぶと自ファイルから検索するみたい
で、うまく機能します。
ただ、コメントにした" : CDialog(CAboutDlg::IDD)"を処理しなくていいのかは
もう少し調べてみます。

乱文失礼しました。
0232デフォルトの名無しさんNGNG
絵描き系とか音系のアプリにはMDI必須だと思うけどなあ。
ウィンドウパカパカ開くから、
SDIだとデスクトップや他のアプリのウィンドウが見えてしまって混乱する。
0233232NGNG
ついでに、一つの作業プラットホームとして成立しているソフトは
MDIにすべし、という説を提唱してみるテスト
そうでなければむやみにMDIにすべきではないミタイナー
0234デフォルトの名無しさんNGNG
プロパティシートにページを複数表示しているのですが、
タブを使用禁止にすることは出来るでしょうか?
シートのOnInitDialog()でGetPage(0)->EnableWindow(FALSE)
としてみたのですが、出来ませんでした。
何かいい方法はないでしょうか??
0235デフォルトの名無しさんNGNG
>>230
ん?タブじゃない?
あれはどう見てもタブだと思うが。
0236デフォルトの名無しさんNGNG
議題変えて悪いのですが、
C++(MFC)で作った実行ファイルの置いてあるディレクトリを取得
(自分のFullPathを取得)するのにはどうすればいいでしょう?
0237デフォルトの名無しさんNGNG
>>236
GetModuleFileName()
0238デフォルトの名無しさんNGNG
>232
同意。MDIが駄目かどうかはアプリのタイプによるから一概には言えない。

opera5は MDIだったが、なんか圧迫感があった。
(6になってSDI/MDI/タブが選べるようになったが)
ブラウザみたいに一つのウィンドウに多くの情報を提示するような
アプリだと MDIは向かないのかも。
0239デフォルトの名無しさんNGNG
EXCELがMDIなのはなんだかウザいよな
0240デフォルトの名無しさんNGNG
申し訳ないです。
GetModuleFileName()で実行するとエラーばかり出て、
MSDNを見てもいまいち解決しません。
実行している自分自身のパスを取得するサンプルか何か教えていただけないでしょうか?
0241デフォルトの名無しさんNGNG
>>240
http://search.acty-net.ne.jp/mfc_search/archive/1998-1/msg01541.html
0242デフォルトの名無しさんNGNG
>>241
有難うございます。助かりました!
0243デフォルトの名無しさんNGNG
>234
に追加です。
VBのTabEnabledのようなものがあればいいと思うのですが、
誰か知りませんか?
本当に困っているので、よろしくお願いします。
0244デフォルトの名無しさんNGNG
INI ファイルを読み込むときに、

CString t1;char cs[100];
GetPrivateProfileString("window", "width", "0", cs, 0, spath);
t1.Format("%s", cs);

こう書いたのですが、まともに読み取れません。
解決法を知っておられる方はおられますか?
0245デフォルトの名無しさんNGNG
>>244
nSize が0じゃ何も読めないと思うがどうか。
0246デフォルトの名無しさんNGNG
MDIと見せかけてツールバーをフローティング表示とか言ってみるテスト。

>>243
「最新Windowsプログラミングテクニック ワンポイント・レッスン」
て本の1069ページに出てる。
0247デフォルトの名無しさんNGNG
Cでの質問なのですが。。
ある文字列があって、その文字列の左からn番目の文字列を取得したいの
ですが、このような関数ってあります?
MSDN探しててもそれっぽい関数ないのですが・・・
0248デフォルトの名無しさんNGNG
文字列wchar_t *pで、n番目の文字は、p[n]
n番目からの文字列は、(n+p)
MultiByteCodeSet? 知らんね。
0249デフォルトの名無しさんNGNG
VC++のダイアログボックスなどコントロールのプロパティのダイアログあるじゃないですか。
あのように、ダイアログの外をクリックしたら自動的に消えるようにしたいのですが、
どうすればよいか知ってるかたおられますか?
0250デフォルトの名無しさんNGNG
なぜここでCの質問をするのかと問いたい
0251デフォルトの名無しさんNGNG
>>249
フォーカスが無くなると自分自身を破棄するとか?
0252173NGNG
>235
タブじゃないという言い方は変だったかもしれません、
プロパティとかに表示される耳のような部分がないので
そのように思ったのです、MoonBrowserのようなアプリは
MDIから作るのでしょうかSDIから作るのでしょうか?
0253デフォルトの名無しさんNGNG
>>252
つうか、あんた何も分からな過ぎ。
もうちっと色々調べてから挑戦しようや。

ちなみにあれは、タブコントロールのスタイル変えただけだよ。ボタン型に出来る。
Moonは使ったこと無いので知らんけど、親Windowの内部に複数Window表示できるタイプなら
MDIだろう。
しかし、今から新たにプログラム組むのに、MSが推奨しないMDI使うのはどうかと思うが。
何でわざわざMSがWordやExelをSDIに作り変えるなんていう手間をかけたか考えてみ。
0254デフォルトの名無しさんNGNG
>>247
strncpy(str1,str2+n,cn);
0255254NGNG
すまん、ここはMFC専用スレか。
MFCはわからん。というかC++がわからん。
0256デフォルトの名無しさんNGNG
ドキュメント+ビューアーキテクチャで
ビューからドキュメントを得るのは
GetDocument()で出来ますが、
その逆や親フレームのポインタはどのようにしたら取れるのでしょうか?
0257デフォルトの名無しさんNGNG
>>246

レスありがとうございます。
早速、その本を探してみます。
0258デフォルトの名無しさんNGNG
なぜMSがMDIを推奨しないことになったのか、経緯を教えて欲しいナリ。
0259デフォルトの名無しさんNGNG
>>258
MIDI音源が不安定だからさ
0260VC++初心者NGNG
SelectObject関数が失敗してしまいます。
何が原因でしょうか?
詳しい調査の仕方を知ってるシト教えてください。

ASSERT(SelectObject([ビットマップへのポインタ])!=0)で
アサーションされるが、なぜかがまったくワカンネーーー
0261デフォルトの名無しさんNGNG
>260
まずだ、そこの ASSERT は VERIFY にしておけ。リリース版作ったときにハマるぞ。
そうそう、SelectObjectの返り値もちゃんと保存しとくように(後で戻すのに必要になる)。
次にだ、GetLastErrorでエラーコードを取得して、
VCの [ツール]-[エラーコード検索] で何のエラーか調べてみてくれ。
おおかた、ビットマップが変なんだろうと思うが。
0262デフォルトの名無しさんNGNG
なんだそのビットマップのポインタってのは。
ハンドルを渡せ。
0263デフォルトの名無しさんNGNG
いや、きっと本当は pDC->SelectObject と書いているのさ。ここMFCスレだし。
そうだよな。>260よ、そうだと言ってくれ。
0264VC++初心者=260NGNG
訂正します。

CBitmap *pCBitmap;
ビットマップ初期化処理(略);
ASSERT(pDC->SelectObject(&pCBitmap)!=0);

>>261さんのアドバイスに従ってやってみます。

それでもだめならまたきます。
おやすみなさい。
0265デフォルトの名無しさんNGNG
SelectObject()はGetLastError()で調べられないぞ。
で、260はMSDN見たのか?ビットマップについて色々書いてあるぞ。
0266デフォルトの名無しさんNGNG
&pCBitmapの&ってなんだ。
0267デフォルトの名無しさんNGNG
>265
あれ、そうなの? たしかに、GetLastErrorでエラーとれるとは書かれてないけど……。
>264
本当に & って付いてる? もし付いてたらすぐさま外せ。
0268デフォルトの名無しさんNGNG
もうしわけないっす。
Win32上の特定のファイルのサイズを取得するにはどうすればよいでしょう?
0269親切な人NGNG

ヤフーオークションで、凄い人気商品、発見!!!

「高性能ビデオスタビライザー」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0270デフォルトの名無しさんNGNG
最近箱型選択が流行ってますが、何をすれば
箱型選択になりますか?
0271VC++初心者=260 NGNG
ただいま戻りました。
丸投げしているみたいで申し訳ないとは思いますが、
VC++練習用のゲーム(パズルみたいなもの)なので公開しても問題ないと思います。
メニューから、「ピクチャーの読み込み」を選択して、
360*360以内の.bmpファイルを読み込み、終了するとSelectObjectがエラーを返してくれます。
問題が起こる場所は、
void CJigsawView::OnNewGame() の
pCBitmapWkd

= pDC->SelectObject(pCBitmap);
の部分です。


以下のURLに問題のプロジェクトがあります。(2行ですがつないでください)
http://jp.y42.briefcase.yahoo.co.jp/bc/aji_curry_x/lst?.dir=/Public&.view=l&.src=bc&.done=
http%3a//jp.y42.briefcase.yahoo.co.jp/bc/aji_curry_x/lst%3f.dir=/Public%26.src=bc%26.view=l

身勝手なことばかり書いて申し訳ありません。
0272デフォルトの名無しさんNGNG
>>268
GetFileSize
0273VC++初心者=260NGNG
>>261さんへ

やってはみたのですが・・・・

エラーコードは「0」でメッセージは「この操作を正しく終了しました。」と、
言いつつ、pDC->SelectObject(pCBitmap)はしっかり0を返してくれます。
0274デフォルトの名無しさんNGNG
>>270
そんなAPIは存在しない。自力で実装すれ。
0275デフォルトの名無しさんNGNG
GetCompressedFileSizeを使いたいのですが、
アクセス権などはどのように取得するのでしょうか?
0276デフォルトの名無しさんNGNG
>>271
見てみたよ……色んな意味ですごいことになっているソースだな。
一つ重要なことを話しておこう。「ASSERT の中に書いたものは
リリース版ではきれいさっぱり消えてなくなる。」何でもかんでも
ASSERTにつっこんどくと後でえらいことになるぞ。

で、本題。SelectObjectできない理由は、pDCがメモリDCじゃないから
(ビットマップはメモリDCでしか選択できない)。
画面⇔メモリ間のビットマップ転送が目的なら、画面側のDCに
ビットマップを選択しておく必要はまったくない。
ビットマップのコピーが目的だったら、メモリDCを二つ作って
その間で転送しないとダメ。
0277VC++初心者=260 NGNG
>>276
お答えいただきありがとうございます。
ここからはVC++できないので、帰って直してみます。
家は電話回線を繋いでないのです。

ところでデバイスコンテキストについてですが、
メモリDCとそうでないDCは何か見分け方があるのでしょうか?

そのプログラムを見ていただいてもお判りのように今ひとつ理解できてないのです。
そのプログラムは、参考書などを使って書きました。(MSDNも参考にさせていただきました。)
でも、デバイスコンテキストになると「紙に絵をかくように図形を描画する。」とか、
書かれていて、それがハードウェアとどう結びついているかの説明は見つかりません。

何か詳しい本とかHPをご存知ですか?
0278デフォルトの名無しさんNGNG
はじめまして
http://techtips.belution.com/ja/vc/0023/
でDLLでデータを共有する方法があるのですが
このデータをクラスでもできるのでしょうか?

本などでは、すべてグローバル変数というか
このサイトで説明しているものばかりなんです。
同じようにクラスも宣言したんですけど
どうも、共有にデータをもってくれないんです。
誰か知っているかたがいればお願いします。
0279デフォルトの名無しさんNGNG
特定の拡張子に関連づいているIconを取得してCListCtrlのIconとして
表示したいのですが、わかる人はおられますでしょうか?
SHGetFileInfoとは聴いたのですがまったく解らないので、
教えてください。
0280デフォルトの名無しさんNGNG
>>279
SHGetFileInfoで検索したら山ほどひっかかるじゃん。
なにがわからんのよ。
0281デフォルトの名無しさんNGNG
>>279
SHFILEINFOへ代入する所までわかったのですが、
その値をCListCtrlへ受け渡す方法がわからないのです。


0282デフォルトの名無しさんNGNG
>>281
CImageListに取得してたIconをぶち込んで
CListCtrl::SetImageListすればよかろう。
0283デフォルトの名無しさんNGNG
>>282
いえ、CImageListへ取り込む方法がわからないのです。
0284デフォルトの名無しさんNGNG
CImageList::Add
ででけへんの?
0285デフォルトの名無しさんNGNG
1 番目の引数を 'struct _IMAGELIST *' から 'struct HICON__ *
に変換できないんですよ。Addだと。
HIMAGELIST、SHFILEINFO のどちらからも入れれないんです
0286デフォルトの名無しさんNGNG
SHFILEINFO.hIcon ももちろん出来ないのです。
どうすればよいでしょう。
0287デフォルトの名無しさんNGNG
なんだそりゃ?
どういうコード書いているのか見せろ
0288デフォルトの名無しさんNGNG
SHGetFileInfo(m_pathl + ch, 0, &shfi, sizeof(SHFILEINFO),
SHGFI_ICON | SHGFI_LARGEICON);
CImageList mig;
mig.Add(shfi.hIcon);
m_listl.SetImageList( &mig, LVSIL_NORMAL);
mi.iImage = 0;

miはLVITEMで、SHFILEINFO shfi、CImageList il
こんな感じです。
0289デフォルトの名無しさんNGNG
CImageListがCreateされてないんじゃ
0290デフォルトの名無しさんNGNG
mig.Create(32, 32, ILC_COLOR, 1);
for() {
SHGetFileInfo(m_pathl + ch, 0, &shfi, sizeof(SHFILEINFO),
SHGFI_ICON | SHGFI_LARGEICON);
::CoUninitialize();
mig.Add(shfi.hIcon);
m_listl.SetImageList(&mig, LVSIL_NORMAL);
mi.iImage = 0;
CListCtrlへ代入
mig.DeleteImageList();
}
指摘いただいた通り書き直したのですが、まだ動きません。
というよりも、コンパイルエラーは出ないのですが、
そのプログラムが実行された瞬間に、エラーが出るのです。
デバッグしてみるとAddの部分に問題があるようなのですが…。
0291あのう・・・・NGNG
大きい文字をピクチャボックスに書きたかったので
CFont myFONT;
myFONT.CreatePointFont(300,NULL,NULL);
myDC.SelectObject(&myFONT);

とやるとコンパイルもできてちゃんと文字も大きく表示されるのですが
実行時に必ずエラーが出るんです。無視すれば普通に動くのですが
どうしてこうなるのかがわかりません。どなたかご教授お願いします。
0292デフォルトの名無しさんNGNG
>>290
Createの引数が足りない。
0293デフォルトの名無しさんNGNG
>>290
ヘルプぐらい確認しなさい

>>291
それだけじゃ分かりません。
最低でもどんなエラーが出るか書いて下さい。
いちいちビルドしてチェックするほど皆ヒマじゃないんだぞ
0294デフォルトの名無しさんNGNG
>>291
予想の範囲で
CFont myFont, *pFont;
myFont.CreatePointFont(300, NULL, &myDC);
pFont = myDC.SelectObject(&myFont);

/* 描画処理 */

myDC.SelectObject(pFont);
myFont.DeleteObject();

後始末の問題かと思うが
0295あのう・・・・NGNG
アドバイスありがとうございます

Microsoft VisualC++ Debug Library
------------------------------------
Debug Assertion Failed!

File:wingdix.cpp
Line:250
For information on hou your program can cause an assertion
failure,see the Visual C++ documentation on asserts

というようなエラーメッセージが起動直後に出るのです。
コンパイルは通るのですがなぜこうなるのかがわかりません。
0296デフォルトの名無しさんNGNG
デバッグしる。
0297デフォルトの名無しさんNGNG
static LVITEM mi;
SHFILEINFO shfi;
CImageList il;

mi.mask = LVIF_TEXT | LVIF_IMAGE;
mi.iItem = 0;
mi.iSubItem = 0;
s = kFinder.GetFileName();
_tcscpy(ch, s);
mi.pszText = ch;
::CoInitialize( NULL);
HIMAGELIST himg= (HIMAGELIST)::SHGetFileInfo(m_pathl + ch, 0, &shfi, sizeof(SHFILEINFO),
SHGFI_ICON | SHGFI_LARGEICON);
CImageList mig;
mig.Create(32, 32, ILC_COLOR, 1, 1);
mig.Add(shfi.hIcon);
m_listl.SetImageList( &mig, LVSIL_NORMAL);
mi.iImage = 0;
m_listl.InsertItem(&mi);

このように書いたのですが、ぜんぜん、画像が
CListCtrl(m_listl)に表示されません。どうなっているのでしょう?


0298デフォルトの名無しさんNGNG
そうくると思った。
スコープが外れるとmigが無くなるから。
migをメンバ変数にしる。

CImageList il; はどこに使われているのだろう?
0299デフォルトの名無しさんNGNG
migは、メンバ変数にしました。(ilはmigの間違いでしたが)
それから、Createを使うのですから、DeleteImageListもいるんですよね?
そこまではかえたのですが、ぜんぜんCListCtrlにはアイコンが表示されません。
どうしてですか?

0300デフォルトの名無しさんNGNG
DeleteImageListしてるからです。
0301デフォルトの名無しさんNGNG
有難うございます。
一つ聴いてよろしいですか?というのは、私を困らせたのは、Reportでのリスト化なんです。
long state = ::GetWindowLong(ma.GetSafeHwnd(), GWL_STYLE);
::SetWindowLong(ma.GetSafeHwnd(), GWL_STYLE,(state & ~LVS_TYPEMASK)|LVS_REPORT);
で、REPORTになるじゃないですか。
そうすると、アイコンが消えるのですか?
それで、試行錯誤がんばっていたわけです…。
0302デフォルトの名無しさんNGNG
まず日本語を勉強してこい。
0303デフォルトの名無しさんNGNG
SetImageListにLVSIL_SMALLを入れてください。
0304デフォルトの名無しさんNGNG
たしかに変な文だ。
0305デフォルトの名無しさんNGNG
ファイルの末端にデータを追記しようと思って、fout.SeekToEnt()
を使ったのですが、
そうするとファイルを開いて、追記開始部分に変な文字が
つけられてしまうのですがどうにかならないんですかね?
0306デフォルトの名無しさんNGNG
VC++のダイアログベースで作成しています.
再描画を追加したいのですが,初期設定やら,初心者なのでよくわかりません.
OnPrint関数を使って具体的にどのようにすればいいのでしょうか?
ボタンOnBotton1()を押したら,グラフを順番に描いてくれるものを作っています
CDC* pDC=this->GetDC();
書けばいいらしいのですが,それ以降がわかりません.お願います.


0307デフォルトの名無しさんNGNG
>>301
それMFC?

>>306
OnPaintでCDCのメンバ関数で描画しなさい。
0308デフォルトの名無しさんNGNG
>305
テキストファイルなら、末端のEOFを殺すのは義務です。
0309デフォルトの名無しさんNGNG
ウィンドウの状態、位置を保存するために
MainFrm.cppのOnCloseでGetWindowPlacement、
CreateでSetWindowPlacementを使いましたが
次回起動したときに最大化や最小化が正しく反映されません。
最大化や最小化をしない場合は正しく位置が反映されます。
どうすればよいのでしょうか?
0310デフォルトの名無しさんNGNG
秀丸を見習えば?
閉じ際に一瞬開いて場所を保存。

最小化・最大化状態まで保存されたらかなりむかついて
即アンインストールだがな。

ああ、きっと、アンインストーラもないんだな。
ごめんごめん。
0311デフォルトの名無しさんNGNG
CListCtrlのリストで、途中でサイズを変更してもアイテム自体の
行・列の数は変わりません。
最整列させるにはどうすればよいでしょうか?
0312デフォルトの名無しさんNGNG
>閉じ際に一瞬開いて場所を保存。
こんなの見習いたくないな
0313デフォルトの名無しさんNGNG
>>312
つーか秀丸の作者か?
あんぽんたん、とだけ言っておこう。
0314デフォルトの名無しさんNGNG
>>309
CFrameWnd::ActivateFrame()をオーバーライドしる!
0315デフォルトの名無しさんNGNG
>>309
ここみるとよいかもよ。314の言うように処理してます。
http://www.codeproject.com/dialog/windowpres.asp
0316デフォルトの名無しさんNGNG
>閉じ際に一瞬開いて場所を保存。
位置を保存するだけならこんなことしないでも
GetWindowPlacement、SetWindowPlacementでできるが。
0317デフォルトの名無しさんNGNG
>>311
Arrangeはやってみた?
0318デフォルトの名無しさんNGNG
> ああ、きっと、アンインストーラもないんだな。

「保存」と聞いて即レジストリを連想したんだろうな…
0319デフォルトの名無しさんNGNG
CTreeViewで特定のディレクトリ以下のディレクトリを
取り扱いたいのですが、(コモンダイアログではなくて)
方法を知っておられる方はおられませんか?
0320デフォルトの名無しさんNGNG
何行ってるのかわからんけどFindFirstFileとFindNextFileでぐるぐる回しつつ
ツリーを自分で作れ。
0321デフォルトの名無しさんNGNG
最小化するときなどのアニメーションを止めたいんだけどどうすればいい?
0322デフォルトの名無しさんNGNG
ファイルのドラッグ&ドロップを受け取るMFC ActiveX Controlを作成しようとしています。
通常のウインドウと同じ方式、(DragAcceptFiles()して、OnDropFiles())(COleDropTargetを持たせる方法)
でうまく動かないのですが、何か特別な手続き方法が必要なのですか?

間違ってPart2スレに書き込んでしまい、あげてしまいました。ごめんなさい。

0323デフォルトの名無しさんNGNG
今MFCでメモ帳を作ったんだが。
フォント変えたい。"MS ゴシック"のサイズ「9」にしたい。
CFontをSetFontしろと聞いたのでやってみたが、実行時エラーで落ちる。
どのクラスにどのタイミングでどの処理をやるのですか?
0324デフォルトの七資産NGNG
静的分割ウィンドを作っているのですが,
分割の縁のサイズを変えた時に呼ばれるメッセージって
なんだかわかりますか?
それか, CFrameWnd::IsTracking をどのタイミングで
呼べばいいのか教えて下さい。 お願いします。
相談に乗ってください。
待ってます。
0325デフォルトの名無しさんNGNG
>>321
WM_SYSCOMMANDの SC_MINIMIZEを捕まえて、
 ::AfxGetMainWnd()->ShowWindow(SW_HIDE);
 ::AfxGetMainWnd()->ShowWindow(SW_SHOWMINIMIZED);
とかやると、できるっぽい。

SystemParametersInfo()を使って、SPI_GETANIMATION で現在の設定を保存、
SPI_SETANIMATIONでアニメーション切って、最小化後、設定を復元してやる
方法もあるが、これはちょっと問題アリな方法かも。

>>323
SetFontはいつでもいいが、CFontをメンバ変数にするか、newで作ってやる必要がある。
0326デフォルトの名無しさんNGNG
>>325
なるほど、別にアニメーション自体を切らなくてもいいわけだ。
0327325NGNG
>326
いや、しかし ShowWindow()使う方法ではタスクバーの項目の順番が変わってしまうな(´Д`;)
SW_HIDEでタスクバーから一旦消え、SW_SHOWMINIMIZEDで再登録されるので。
0328デフォルトの名無しさんNGNG
ダイアログをドラッグするとき、タイトルバーでドラッグできるじゃないですか。
では、タイトルバー以外でドラッグできるようにするにはどうすればよいのでしょうか?
0329デフォルトの名無しさんNGNG
OnNcHitTest()でHTCAPTIONを返す。
0330デフォルトの名無しさんNGNG
>>328
そういうのは定番だから
「MFC タイトルバー 以外 ドラッグ ウィンドウ 移動」
みたいな単語でぐーぐればすぐ出てくるよ。
0331デフォルトの名無しさんNGNG
ええ、WM_NCHITTESTを使うことは知っているのですが、
ClassWizardのメッセージにWM_NCHITTESTがのっていないので、
悩んでいるわけです。
0332デフォルトの名無しさんNGNG
初めからそう質問すればいいのに。
ClassWizardのメッセージフィルタをウィンドウにしる。
0333デフォルトの名無しさんNGNG
有難うございます。
解決しました。
0334デフォルトの名無しさんNGNG
ダイアログをモードレスで表示して、何らかの仕事を行うとし、
途中で別のダイアログを使う。
そのときに最初のモードレスのダイアログを終了したい。
なにか手段はないだろうか?
0335デフォルトの名無しさんNGNG
CloseWindow

ダイアログのコードに処理を埋め込んでいるなら
お前の設計ミス。
0336デフォルトの名無しさんNGNG
うえで、気楽にいわれたのですが、エクスプローラのツリービューのようなものを
CTreeViewで実現したいのですが、ぐるぐるでは構造体の配列が
いくらあっても足りません。
どうすればよいでしょうか?
力を貸していただけませんか?
0337デフォルトの名無しさんNGNG
頑張って配列を作れ。
ぐるぐるとな。

ぐるぐるを忘れてはいかんぞ。
0338 NGNG
>>336
何のための配列が欲しいのだ?
構造体(をnewしてそのアドレス)を、個別に対応するTVITEM のlParamに
ぶっ込んでやれば、配列のサイズがどうとか悩まずに済むと思うが。
0339デフォルトの名無しさんNGNG
>>336
ツリービューなんだから、データの持ち方もツリーする。
ごくアタリマエなことがなぜできんのだろう・・・
0340デフォルトの名無しさんNGNG
RichEditのソースって公開してないん?
0341 NGNG
チェックボックスコントロールが複数あるダイアログがあります。
そのチェックボックスの上をマウスが通過したときにチェックボックスの文字色や背景色を変更するにはどうすればいいでしょうか?
0342デフォルトの名無しさんNGNG
>>341
CButtonを派生してWM_MOUSEMOVEに対応するようにする。
0343デフォルトの名無しさんNGNG
MFCプログラム内でCLSIDより、実行中に随時ActiveXを取り込み、
表示、使用することは可能ですか?
可能なら方法を教えてください。
0344336NGNG
当たり前、といわれても私のような初心者にはさっぱりですよ。
なにか、参考になるページなり何かありませんか?
0345341NGNG
>>342
派生クラスを作らないとダメでしょうか?
サブクラス化によってWM_MOUSEMOVEメッセージは検出することができるので、
問題はそのタイミングで色を変更するにはどうすればいいか、なのです。
0346デフォルトの名無しさんNGNG
>>344
「MFCによるWindowsプログラミング」\8800
ttp://www.codeproject.com/
ttp://www.codeguru.com/
0347デフォルトの名無しさんNGNG
>>345
OnCtlColorは?
0348341NGNG
>>347
普通にそれを使ったらダイアログの作成時から色が変わってしまいます。
どうすればいいのでしょうか?
0349デフォルトの名無しさんNGNG
>>348
WM_MOUSELEAVE、WM_MOUSEHOVERメッセージで
マウスが離れた時と留まってる時がわかるので、
そのタイミングでシステムのデフォルト色と変更色を変えるとか。
win98以降じゃないとこのメッセージ使えないけど。
0350デフォルトの名無しさんNGNG
>>349に追記
ttp://www.codeproject.com/buttonctrl/hoverbutton.asp
にWM_MOUSELEAVE、WM_MOUSEHOVERを使って表示を切り替える
サンプルがある。
0351341NGNG
ありがとうございます。
今からそのサンプル見てみます。
0352349NGNG
フラグを用意して、OnSetCursor内でチェックボックスの上にカーソルがあれば
フラグをTRUE、カーソルがなければFALSEをセットするようにして、
OnCtlColorでフラグがTRUEなら色を変更する、という方法でもできたよ。
0353JavaじゃないのねNGNG
www.cppdoc.com/example/mfc/mfc.html
既出だったらすいません。
世の中にはいろんなページがあるんですね。
0354デフォルトの名無しさんNGNG
そんなページがあったのか・・・
とりあえず作者のがんばりを誉めてあげたい。

しかしなぜそこまでしてJavaドキュメントに似せたかったのか・・・
0355デフォルトの名無しさんNGNG
メニューバーとかの色って勝手に自分のソフトだけで変えることって
出来るのかな…。
0356デフォルトの名無しさんNGNG
そういうときはオーナードローで…
0357デフォルトの名無しさんNGNG
オーナードロー!?詳しく教えてくれませんか?
0358デフォルトの名無しさんNGNG
初歩的なことを聞いて申し訳ないのですが
CString→int型にするにはどうすればいいんですか?
逆ならformatでできるのですが
(int)やってもatoiやってもできないんで困っております。
0359デフォルトの名無しさんNGNG
>>358
そういや operator (int)() はあっても良さそうだね。けど無いのさ。
 atoi((LPCTSTR)str)
で、どうよ?
0360デフォルトの名無しさんNGNG
ダイアログアプリでファイルのドロップ受け入れどうやりますか?
0361デフォルトの名無しさんNGNG
>>359
sscanfの方がエラーチェックできるから楽。
 CStringからってことなら _stscanf()

>>360
別に一緒だけど?
 ダイアログリソースのスタイルにD&D許可チェックついてる?
0362デフォルトの名無しさんNGNG
なんでお前ライチ位置キャスト寸の?
ゲボハハハ
0363323NGNG
>>325
フォント設定解決しました。ありがとうございました。
0364デフォルトの名無しさんNGNG
>>362
MFCはイイね。子供がキャストしなくても困らないように作ってある。
とりあえずUnicodeに手を出すのはやめとけ。
0365sageNGNG
ウィンドウサイズを変えたくて
MoveWindow( 0,24,100,100, TRUE );
SetWindowPos( &wndTop, 0, 0, 100, 100, SWP_NOMOVE );
とか書いてもサイズは変わらず、
代わりにクライアント領域内でのこの範囲内だけが再描画の対象になって、
範囲外の領域は前のウィンドウの内容が残る──てなことになるんですが、
これの対処方法はどうすればいいんでしょ?
Web上で調べてみたんですが、普通、上のどっちかでウィンドウサイズは変えられるらしいんですけど。
ビューはCViewクラスで、とりあえずOnDrawに記述してみました。
特にこれといって難しいことはやってませんです。
0366デフォルトの名無しさんNGNG
WM_DRAWを処理中に描画以外のことは一切するなぼけ。
反省しる。
GDIにあやまり!
0367デフォルトの名無しさんNGNG
関係ないがWM_KILLFOCUS処理時にメッセージボックスをだすぬ!
反省しる!
USER32.EXEにあやまり!

デストラクタで例外を投げるくらい重罪だぬ!
0368デフォルトの名無しさんNGNG
>366
あれー? WM_PAINTメッセージの処理中はダメなの? タブー?
んじゃどこに書いておけばいいでしょうか。

どうでもいいけど、さっきの書き込みって名前だけsageてて全然下がってなかったよ。
0369デフォルトの名無しさんNGNG
なんかつくりてー
0370デフォルトの名無しさんNGNG
ウィンドウの初期表示サイズを変えたかったら
CreateWindow[Ex]のぱらめーたをいじるか
WM_NCCREATE(PreCreateWindow)を掴んで
CREATESTRUCTをいじるり!
0371デフォルトの名無しさんNGNG
>370
とちゅーで(プログラムの実行中、任意のタイミングで)変えたい……
とか言ってみていいっすか?
CREATESTRUCT構造体をどっかで捕まえてそこからいじれないかなあ、とも
考えてみたんですけど、あれってウィンドウの作成段階でしか使えなかったっけ。

VBで組んだソフトでそういうことやってるのを見たことはあるんですが、
VBでできることがVCでできないはずはないかなあ、と。
0372デフォルトの名無しさんNGNG
変えたいと思ったタイミングでやれ。
ただし
WM_PAINTとWM_KILLFOCUSではやるなぼけ。
0373デフォルトの名無しさんNGNG
任意のタイミングって例えばいつよ。
Doc/View使ってるなら例えばメニューに[ウィンドウサイズを2倍に汁]
という項目を作って、MainFrm.cppにそのハンドラ作って
SetWindowPosすればよいと思うが。
0374デフォルトの名無しさんNGNG
あどヴぁいす通りやってみました。
結果→ダメ。

今までと変わらずでおんなじ症状が出るー。むきーっ。
任意のタイミングってのが、クライアント領域をクリックしたとき、なんですけど、
前にOnLButtonDownに置いて試したときも同じ状態に。
これじゃウィンドウサイズっちゅーよりクライアント領域しかいじれない。

んー、どっか何かを見落としてんのかなあ。
0375デフォルトの名無しさんNGNG
お前*どのウィンドウ*にメッセージおくってんの?
0376デフォルトの名無しさんNGNG
それはViewでやってるからだろ。
MainFrm.cppにハンドラ用意するか、
Viewでやるなら
 AfxGetMianWnd()->SetWindowPos(〜);
0377デフォルトの名無しさんNGNG
ミアンウィンドウに乾杯☆
0378デフォルトの名無しさんNGNG
がーん。いや、気づいてくれるはず。きっと、きっと…
0379デフォルトの名無しさんNGNG
ちょっと、お聞きします。
CWndClass…SDIのビューの基本クラスですが、
ここに、ハードディスク上の任意のビットマップを表示したいのですが、
(絶対パスで指定するわけですが)
取り込む方法がわかる方いますか?
0380デフォルトの名無しさんNGNG
まずScribbleチュートリアルをやれ。
で、お前がやりたいことは何なのかもう一度思い出せ。
それからCBitmapの使い方を調べろ。
0381デフォルトの名無しさんNGNG
>376
あはははー。そりゃそーだ。そりゃそーだわ。
これってViewのクラスでやってるからじゃないのかあー? とか思いつつも
いや、Viewでいいような気がする、ってずーっと考え込んでましたわ。
一発で解消。
絶対、くだらないことで詰まってるよ、とか思ってたらやっぱりその通りで力抜けまくり。

ともかくありがとうです。
0382デフォルトの名無しさんNGNG
>>380
オレが思うに、CBitmapではリソース上のBitmapは扱えるけど、
ハード上のBitmapは無理なんじゃないの?
ちがった?
0383デフォルトの名無しさんNGNG
380に乾杯☆
0384デフォルトの名無しさんNGNG
>>382
ファイル名から一発で作る方法がないだけさ〜
ファイルを読んで、BITMAPINFOHEADER を読み出して、
BITMAP(構造体)をでっち上げて、CreateBitmapIndirect() で作る
とこまで自分でやるのさ。
「幸せは 歩いてこない だから 歩いてゆくんだね」ちゅうわけだ。
0385デフォルトの名無しさんNGNG
リストビューの使い方を教えてほしいです。
CFormViewにしてダイアログにコントロールを埋め込んで、CListCtrl型のメンバを関連づけて、
と、ここまではいいんですが、この後が。

ヘルプやHPを見て回ってわかったのは、LV_ITEM構造体にリスト用のデータを一時的に格納し、
それをInsertItemのパラメータに与えればいいらしい、てことぐらいです。
ただ、その構造体に関する箇所がヘルプでは英語しかないし、どこのHPを見てもいまいち意味が。

 項目、アイテム、サブアイテム、インデックス、ラベル、状態、state、mask。

もう用語からさっぱりわけわかりません。
0386デフォルトの名無しさんNGNG
それをここで一から教えろと?
本買った方が早いと思うんだが。
0387デフォルトの名無しさんNGNG
ぎゃー。

classViewでViewクラスに自分で追加したメンバ関数を削除したら
classViewからViewクラス自体が消えちゃったよ・・・。
ファイル自体は生きてるんだけどclassViewには表示されないんです。
どうしたら直るんでしょうか。
0388初心者NGNG
printf("%u/n",-1);

を出力したら 65535 となるのはなぜですか?
u はunsigned int型符号無し10進数らしいですが意味がわかりません。
くだらない質問ですみません。
0389385NGNG
>386
やっぱりそれなりに長くなる話ですか。
しょーがない。本探すか。
0390デフォルトの名無しさんNGNG
>>384
おれはいつもLoadImage()で、ファイル名から一発で
HBITMAPを作っていますが、何か?
0391デフォルトの名無しさんNGNG
>>387
.clw ファイルを削除してからプロジェクトを開くとどうなるでしょ。
0392デフォルトの名無しさんNGNG
>>388
スレ違いの予感。

>>389
というか、リストコントロールで何をしたいのか書いてないし。
>項目、アイテム、サブアイテム、インデックス、ラベル、状態、state、mask。
のそれぞれの意味と使い方の説明はめんどうで誰もしたくないと思われ。

>>390
一発で作る云々はCBitmapの話だと思われ。
0393デフォルトの名無しさんNGNG
>>392

CBitmap bmp;
bmp.Attach((HBITMAP)::LoadImage(・・・));

これで一発。
0394387NGNG
>>391
返事遅くなりました。ありがとー。clwファイル削除しても
直らなかったけど、「clw 拡張子」で検索したら同じ症状の人
居たみたいで、色々試した直りました。

サンキュー。
0395デフォルトの名無しさんNGNG
::AfxLoadLibrary() と ::GetProcAddress() を使って、MFCで作成した DLLの
関数を呼びます。その関数の中では、モードレスダイアログを Createしています。

で、ここまでは良いんですが、このダイアログの PreTransrateMessage()が
どうも呼ばれていないみたいなんです。CToolTipCtrlでツールチップを表示
するんですが、Pre〜が呼ばれないせいでツールチップのが表示されません(´Д`;)

どうすれば良いんでしょうか...? DLLのモジュール状態とかって関係あります?
0396395NGNG
これかー。MSDNにあったじゃん。

|ただし、DLL の CWinApp オブジェクトには、アプリケーションの CWinApp
|オブジェクトと異なり、メイン メッセージ ポンプがありません。DLL が
|モードレス ダイアログ ボックスを表示する場合、または独自のメイン
|フレーム ウィンドウを持つ場合は、アプリケーションのメイン メッセージ
|ポンプから、DLL がエクスポートしたルーチンを呼び出す必要があります。
|このルーチンが、さらに DLL のアプリケーション オブジェクトの
|CWinApp::PreTranslateMessage メンバ関数を呼び出します。
0397デフォルトの名無しさんNGNG
STLのstringとMFCのCStringの互換が無く、困っています。
CStringをstringへ。
また、
stringをCStringへ変更する良い方法はありませんか?
0398デフォルトの名無しさんNGNG
>>31と同じ質問を抱えてます。初めてCRichEditViewを使うので
多分単純なことが解ってないのだと思います。
CRichEditCtrl& Edit = GetRichEditCtrl();
FINDTEXTEX findtext;
::ZeroMemory(&findtext,sizeof(findtext));
findtext.lpstrText = new TCHAR[3];
この辺でfindtext.lpstrTextには漢字+\0を入れました
int nRet = Edit.FindText(FR_MATCHCASE,&findtext);
if( nRet !=-1 ){
TRACE("これが出ない\n");
}
確実に一致するものはあります。
0399デフォルトの名無しさんNGNG
>>397
const char* にすればOK

CString s1;
string s2;
s1 = s2.c_str();
s2 = (const char*)s1;
0400デフォルトの名無しさんNGNG
CStringの手軽さは、stringじゃまねできないもんなあ。
CString向けに書いちゃったもんは仕方ないからそのまま使え。
0401デフォルトの名無しさんNGNG
Scribble チュートリアルでCBitmapについてのページは見つけたのですが
(HelloWorld!と手書きで表示されているページですよね?)
あの、サンプルはどのようにして見るわけですか?
0402デフォルトの名無しさんNGNG
MSDNでサンプルの名前をキーにを探すと、ダウンロードのリンクが出てきてCD入れろと言われるから、入れろ。

MSDN起動するのが面倒ならMSDNのCDの何枚目かにあるSAMPLEディレクトリをごっそりコピーしておけ。

最近のVCの箱の中にはチュートリアルの本は入ってないのか?
急ぎでないならあれのソースを手打ちでもいいぞ。
0403デフォルトの名無しさんNGNG
CScrollViewがうんこなので、CViewからしこしこ作るぞ!
応援してくれ!
0404デフォルトの名無しさんNGNG
がんばれ。
0405zxcvbnmNGNG
オーナードローリストビューのデータの取り方を誰か教えて下さい
今はWinbiffのひらめーるにあるようなリストビューが対象です
0406デフォルトの名無しさんNGNG
RichEditについて質問させてください。

リソースエディタでRichEditコントロールを貼り付けて
対応する変数をm_rEditとしました。

View::OnInitialUpdate()
の所で
m_rEdit.SetBackgroundColorとかやると、色とか変わるんですが
m_rEdit.SetWindowText("初期");として、起動したときに
「初期」と表示したいんですけど、何も表示されません。
UpdateData(FALSE);
を最後に呼んでも変わらないです。
どうすればいいのでしょうか。
0407デフォルトの名無しさんNGNG
>>406
ReplaceSel
0408406NGNG
ごめん、自分のミスでした。
ReplaceSelでも出来なくって、これは自分が何処かで変なことやっている
と思って見直してみたら、DDX_ControlとDDX_Textで同じIDが
違うメンバ変数に割り当てられてた。

ClassWizardだと、ひとつしか割り当てられないと思ってたけど、
複数可能なんだ。混乱するから一つにしたけど。

レスしてくれてありがとう>407
0409デフォルトの名無しさんNGNG
394の現象がさっき自分のとこでも起こって、速攻で解決したけど、
直し方を書いてなかったからついでに書き込んどく。

ワークスペースに表示されなくなったクラスのヘッダファイル(****.h)を
メモ帳か何かで開いて内容を書き替えずに保存する(つまりファイルのタイムスタンプを変える)。
すると消えたクラスが復活する。(clwファイルは消さない方がいいような気がする)
0410デフォルトの名無しさんNGNG
アプリケーションで、ディレクトリを選択するためのダイアログボックスを開き
たいんだけど、これって標準 (コモンダイアログボックス) みたいなのはない
の ? 自分で、作るしかないのかなぁ ?
0411デフォルトの名無しさんNGNG
MFCで
「あるフォルダにあるファイルとフォルダのリスト」を取得する
メンバ関数の含まれているClassはないでしょうか
おしえてください
0412デフォルトの名無しさんNGNG
ごめん自己解決
CFileクラス以降を見てた
CObject-CFileFindだったのね
0413デフォルトの名無しさんNGNG
もしMSDNのMSLUを使った正常に動作するサンプルプロジェクトの場所を
知っていれば教えて貰えませんか。
今、けっこう必死で探しています。
0414デフォルトの名無しさんNGNG
>>411
なんかないみたいだね。素直に、FindFirstFile() 等を使うのが吉。
0415デフォルトの名無しさんNGNG
>>410
Win32APIでなら、::SHBrowseForFolderってのがあるよ。
MFCでそれをラップしてあるかどうかは知らないけど、
その辺から探ってみれば。
0416411NGNG
例:
CFileFind finder;
BOOL bWorking = finder.FindFile("C:\\*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}

ちなみに
僕は>>410さんとは別人です
なぜか同じことをやりたいようですねw
0417デフォルトの名無しさんNGNG
>>410
::SHBrowseForFolderで。MFCには無いよ。
以前検索したことあるけど、::SHBrowseForFolderをラップした
クラスを公開してる人が何人かいた。
0418デフォルトの名無しさんNGNG
>>415
サンクス !! できたよ。
でも、なんでディレクトリを指定するだけでこんなにしちめんどくさいん
でしょうね。CFileDialog にパラメータ指定するとか、CFolderDialog
みたいなクラスを作るとかしてくれれば良いのに...。
ともかく、ありがとう。
0419デフォルトの名無しさんNGNG
何かの拍子で妙なエラーが頻出するようになった。
ソースにまったくエラーがないのにコードを少しでも書き替えると

xxxxview.h(50) : error C2143: 構文エラー : ';' が '*' の前に必要です。
xxxxview.h(50) : error C2501: 'xxxxDoc' : 識別名を宣言するのに、型が指定されていません。
xxxxview.h(50) : error C2501: 'pXXXX' : 識別名を宣言するのに、型が指定されていません。
xx.exe の実行エラー

となる。
この3つは1つの同じ行で発生しているが、コンパイラのチェックにかかるような問題はない。
で、試しにこの1行を削除してみると、ここに書かれている宣言が必要な行からエラーが噴出しまくるが、
元に戻すとなぜか再びコンパイラを通って、何事もなかったかのように実行できる。
ただしまたソースを書き替えると同様の現象が起こる。
これと同じような状態になった人っているかなあ?

あと、なぜかブレークポイントの1つが消せなくなって、文末付近にゴミのように残る。
これも経験ある人いない?
0420デフォルトの名無しさんNGNG
なんて説明したらよいかわからないんですけど
システムのルートを取得するClassってないでしょうか
たとえば、A:,C:,D:,Q:という感じで
0421デフォルトの名無しさんNGNG
>420
言いたいことはよくわからないけど、GetLogicalDriveStringsとか?
0422デフォルトの名無しさんNGNG
>>420
ありがとうございます
やっぱり、MFCにはなかったんですね
結局スレ違いすんまそん
0423デフォルトの名無しさんNGNG
>>419
“プリコンパイル済みヘッダを使用しない”にしてリビルドしてみては。
0424419NGNG
自己解決したので報告を。

ビューのヘッダファイルに、ドキュメントへのポインタを
メンバに持たせようとしてたんだけど、
ドキュメントのヘッダファイルをビューのソースでインクルードしてたのがいけなかったみたい。
ちゃんとビューのヘッダでインクルードしたら直った。


……って、すげえイージーミスじゃんよ。笑えねー。

それと相変わらずブレークポイントのゴミは消えてくれない。
とりあえず無効にしてるからジャマにはならんが、なんかうぜえ。
0425sageNGNG
charの配列をCStringクラスの変数にコピーするのはどうしますか。
逆にCStringの文字列をcharの配列にいれるのはどうしますか。
0426デフォルトの名無しさんNGNG
char str[100];
CString a(str);
CString b = str;
CString c;
c = str;

strcpy(str, a);
0427sageNGNG
>426
いやー、助かったわ。ありがとさん。
これでやっと納品できるわな。
0428デフォルトの名無しさんNGNG
正直お前見たいのに発注したくない。
0429_NGNG
>>428
ネタにマジレス・・・
>「見たい」??
0430デフォルトの名無しさんNGNG
お前を見たいのに、発注はしたくないんだよ。
発注しないけど、面接に読んでもヨイですか?という意味だ。

きちんと嫁。

0431427でも429でもないがNGNG
「面接に読んでもヨイ」

ニポン語、難シイネ。
0432デフォルトの名無しさんNGNG
>>430
電波を受信できない人には、あなたの発言を
理解するのは不可能でしょう。
0433398NGNG
自己解決。範囲指定が必要だったのね。
0434デフォルトの名無しさんNGNG
VS.NETが出てから急にここが静かになったと思うのは気のせいだろうか。
そんな俺もC#のドキュメントを読んでたりするけど…
0435デフォルトの名無しさんNGNG
.NET Frameworkランタイム普及せんとVB,C#は…
やっぱC++がイイナ
0436デフォルトの名無しさんNGNG
ところで、VS.NETのCStringは、単体で使えると聞いたのだけど本当?
あのクラスと、CMap系を使いたいが為に今だにMFCに頼りっきりな漏れ。。。
0437デフォルトの名無しさんNGNG
WTLのCStringは単独で使えるよ。
0438デフォルトの名無しさんNGNG
>>437
知らんかった。。。
どうもありがとう
0439デフォルトの名無しさんNGNG
>>436
std::string と std::map じゃ不満?
0440438NGNG
WTL使ってみました。確かに便利です。
しかし、なんでこれが流行らないのだろう。。。

>>439
STLも確かに便利なんだけど、すぐにインライン展開してコードが膨れるのであまり好きではないです。
もしかして使い方が悪いだけかな?
0441デフォルトの名無しさんNGNG
インライン化を抑制しろ。
0442デフォルトの名無しさんNGNG
CreateCompatibleDCして作成したメモリデバイスコンテキストに、
元のDCのクリッピング領域情報が引き渡されずに困ってます。
というか空になっちゃうんですが、何とかして上手く引き渡す方法は
ありませんでしょうか?

クリッピング領域はRECTじゃないからGetClipBox→SelectClipRgnも
使えないし、ていうかそもそもなんでGetClipRgnでクリッピング領域が
取得できないんだとか、MFC&Win32APIの愚痴になってしまいがちですが。
0443デフォルトの名無しさんNGNG
CreateScalableFontResourceの第1引数に1指定して読み取り専用埋め込みフォント作って
その後AddFontResourceしても目的のフォント得られないんじゃボケェ

CreateFontで渡すフォント名はハードコーディングしても得られないんじゃぁ

第1引数に0指定しておくとちゃんと取れるんじゃハゲェ


どなたかご存知ですか?
0444デフォルトの名無しさんNGNG
リーソスでダイアログを追加して、
グループボックスを三個、
それぞれのグループボックスの中にラディオボタンを3つずつ配置しました。
ところが、ラジオボタンが正常に動きません。
どこかにチェックを入れるとグループボックス関係なく
ダイアログ上でひとつにしかチェックつけられません。
どうしたらいいでしょうか?
0445デフォルトの名無しさんNGNG
>>444
グループボックスの一般>グループのチェックは入れましたか?
それと、レイアウト>タブオーダーはちゃんと設定しましたか?
0446444NGNG
>>445
設定されていなかったので、ご指摘のところを設定しました。
でも、症状はかわりませんでした。

ラジオボタンのグループ、タブストップのところは
チェックしなくてもいいのですか?
0447455NGNG
>>446
タブオーダーはちゃんと番号が続くようにしましたか?

この場合だと、グループボックス1→ラジオボタン1→ラジオボタン2→ラジオボタン3
→グループボックス2→ラジオボタン4→ラジオボタン5→ラジオボタン6
→グループボックス3→ラジオボタン7→ラジオボタン8→ラジオボタン9
のように番号を設定しましたか?
0448高官NGNG
はじめまして.

MFC(CEditView)でエディットビューの背景に対し
カラーダイアログを実装させたいのですが,うまくいきません.

まず,COLORREF型m_BkgndとCBrush型m_brBkgndをエディットクラスに
追加して,Resourceビューのメニュー(ID_VIEW_COLOR)の関数を追加します.

void CTestView::OnViewColor()
{
CColorDialog colDlg;
if (colDlg.DoModal()==IDOK){
m_Bkgnd = colDlg.GetColor();
Invalidate();
}
}

そして,=WM_CTLCOLORハンドラを追加.
if( nCtlColor == CTLCOLOR_EDIT ) {
pDC->SetBkMode(OPAQUE);
pDC->SetBkColor(m_Bkgnd);
return (HBRUSH)(m_brBkgnd.GetSafeHandle());
}
return m_brBkgnd;
}

これを実行すると
文字を入力した行のみが変更されてしまいます.
背景色全体を変更するにはどうしたらよいのでしょうか?
0449444NGNG
>>447
ありがとうございます。おかげで解決しました。

0450デフォルトの名無しさんNGNG
>>448
WM_ERASEBKGND 背景を塗りつぶすときに発生するメッセージ
自力で塗りつぶせば大丈夫
0451デフォルトの名無しさんNGNG
>>448
ブラシも同じ色のを作って渡してやれ。
0452デフォルトの名無しさんNGNG
メニューバーの色を変えるにはどうすればいいですか?
0453デフォルトの名無しさんNGNG
>>452
>>356
0454デフォルトの名無しさんNGNG
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/5989/mfc02.html
↑のサイトを参考にして、自作クラスのインスタンスをシリアル化して書き出したのですが、
読み込むにはどうすればいいのでしょうか?

CHoge hoge;//CHogeは自作クラス(上のサイトに従ってSerialize関数を継承しています)
CArchive ar;
(省略)
ar << &hoge;

↑のようにして書き出せたのですが、

CHoge hoge;
CArchive ar;
(省略)
ar >> &hoge;

↑で読み込もうとすると、

error C2679: 二項演算子 '>>' : 型 'class CHoge *' の右オペランドを扱う演算子は定義されていません。(または変換できません)

と出ます。
なにが間違ってるのでしょうか?
そもそも何故operator<<(CHoge*)がないのにar << &hoge;が通ったのかがわからないのですが…
0455デフォルトの名無しさんNGNG
> そもそも何故operator<<(CHoge*)がないのにar << &hoge;が通ったのかがわからないのですが…
operator << ( CArchive&, CObject*& ); が存在するゆえ。

型がCHogeであるとわかってるオブジェクトなら、 << とか >> を使わないで
直に CHoge::Serialize を呼んだ方が良いなり。

from MSDN
> つまり、シリアル化可能クラスでメンバとして埋め込みオブジェクトを
> 定義している場合は、CArchive 演算子 <<および>> を使えないので、
> 関数Serialize を呼び出す必要があります。また、シリアル化可能
> クラスのメンバとして CObject (またはその派生オブジェクト) への
> ポインタが定義されていても、そのオブジェクトが自身のコンストラクタに
> よって構築されるときは、Serialize を呼び出す必要があります。
0456デフォルトの名無しさんNGNG
>>455
レスありがとうございます。

>operator << ( CArchive&, CObject*& ); が存在するゆえ。
あ、この行見逃してました。でもなんか難しい…
operator>>(CArchive& ar, CObject*& pOb);
もあるということは(形が同じだから)、本来ar >> &hoge;で行けませんか?

MSDNのは読んだんですが、Serialize関数で書き込むと<<で書き込んだのとは
フォーマットが変わりますよね?
他のフリーソフトの設定ファイルを書き換えたいという用途なので、
ファイルのフォーマットは変えられないんです。
そのファイルのフォーマットは間違いなく <<演算子で書き込んだものです。
というわけで<<で読み書きしたいのです。

あと、VC++5.0Learning(w です。
0457455NGNG
そりならば
CHoge* m_pDynObj;
ar >> m_pDynObj;

かな。operator << って、型の情報まで書き込んでおいて
operator >> の時にはそこで動的に作成するもんなので。
0458デフォルトの名無しさんNGNG
MFCのAfxBeginthreadを使ったのだけど、Releaseビルドの時にSuspendさせても
サスペンド出来なかった。。。
動作も妖しいし、DLL開放時に激しく0x05例外出すし。。
(DLLでの話)

悩んだ挙句_beginthreadを使うと、すんなりと動いた。。。
とりあえずこれで解決したのだけど、MFC的にスレッドを立てる場合は_beginthreadって正しい?
どう思われますか>ALL
0459454NGNG
>>457
なるほど、CHoge宣言時に読み込むサイズが予測できないから
operator>>中でメモリを動的に確保する(確保し直す?)必要があるところが
operator<<と違って、それを注意されていたわけですね。

実装してみたところ、すっきり解決しました。
本当にありがとうございました。
0460デフォルトの名無しさんNGNG
Caps、NumLock、カナの状態はどうやって取得しますか?
0461デフォルトの名無しさんNGNG
>458
ttp://www.hi-ho.ne.jp/hawk/mfc0401.html
0462デフォルトの名無しさんNGNG
>>458
どうせつかうなら_beginthreadex。
AfxBeginThread使うならm_bAutoDeleteをFALSEに。
_beginthread系で作ったスレッドからMFCオブジェクトは使用禁止。
0463デフォルトの名無しさんNGNG
CInternetSessionってドキュメントにはEnableStatusCallbackで
非同期にできるって書いてあるんだけど、実際にコンストラクタで
INTERNET_FLAG_ASYNCを指定するとアサートする。
ドキュメントは間違い?
0464sinNGNG
コンピュータ名をMFCを使って所得する方法ありますか。
GetComputerName()の場合、win98系だと取得できず困っています。
getenv("COMPUTERNAME")も win98系だと駄目みたいだし。。
0465デフォルトの名無しさんNGNG
>>464
GetComputerNameはWin95以降に対応してるってあるけど?
0466デフォルトの名無しさんNGNG
>GetComputerName
Win95、Win2000でやってみたけど両方ともちゃんと取得できたよ。

MSDNより引用
>Windows 95/98:入力サイズが MAX_COMPUTERNAME_LENGTH + 1 未満で
>ある場合、GetComputerName 関数は失敗します。

こんな感じの初歩的なミスの可能性は。
0467 NGNG
>466
2000 xpだと動いて98だとダメなんです。サイズの方変えてみます どうもでした。
0468デフォルトの名無しさんNGNG
CSocket::CancelBlockingCallはどのように呼び出せばよいのでしょうか?
ブロッキング操作をキャンセルするため「キャンセル」ボタンを押した時に
CancelBlockCallを呼び出そうとしても、ブロッキング時は
そのキャンセルボタンが押せません。
0469デフォルトの名無しさんNGNG
>>419
>>あと、なぜかブレークポイントの1つが消せなくなって、文末付近にゴミのように残る。
>>これも経験ある人いない?
複数のプロジェクトを同時に扱ってない?
もしそうならブレークポイントが消せないソースファイルがロードされている
プロジェクトをアクティブにしてブレークポイントを削除してみて
0470Disca ◆NAfP6znE NGNG
CMSFlexGrid ActiveX を使ったソフトウエアを作っています。
再配布するときには、どうすれば良いのでしょうか。
0471Disca ◆NAfP6znE NGNG
↑ActiveXコントロールも一緒に配布しなければいけないのでしょうか…。
それとも、リンクさせる方法があるのでしょうか…。
お願いします。
0472デフォルトの名無しさんNGNG
>469
回答ありがとう。VCは1つしか起動していないのでそれは違うかと。
でもいつの間にか消えてたからとりあえず解決。
0473デフォルトの名無しさんNGNG
CBitmapで画像を使うときに、画像自体を暗くしたりする加工ってどうするんですか?
0474デフォルトの名無しさんNGNG
OnMouseMove中にDrawDragRectを使用して矩形を描画してるのですが
画面をスクロールさせながら行うとうまくいきません。
どなたか良い方法を知っていたらお願いします。。。
0475デフォルトの名無しさんNGNG
>>473
あらかじめ暗い画像をよういしとくってのは?
0476デフォルトの名無しさんNGNG
いえ、どんどん暗くなっていくようにしたいので、くらい画像を用意するときりがないんで…。
0477デフォルトの名無しさんNGNG
>>476
CreateDIBSectionでビットマップ作って、
直接画像いじるしかないかな?
0478デフォルトの名無しさんNGNG
>476
ぱれっとあにめーしょん(ワラ。
0479デフォルトの名無しさんNGNG
2つの画像を合わせていく…すなわち黒の画像を少しずつ割合を上げて
ミックスする方法があった気がするが、というか使ったことあるが、
誰か覚えてないか?
P.S>478とか、むかつくし
0480デフォルトの名無しさんNGNG
あの〜CreateDIBSectionの使い方、教えていただけますか?
0481デフォルトの名無しさんNGNG
そのくらい検索しろや。
0482478NGNG
つか、AlphaBlendとか、TransparentBLTつかえばいいだけでわ。
0483デフォルトの名無しさんNGNG
僕、僕!ちょっと待ちたまえ、AlphaBlendや、TransparentBLTはWin2000以降
でないと、使えないのだよ!
0484デフォルトの名無しさんNGNG
>>483
ヘルプには98以降って書いてあるよ?
0485478NGNG
>483
Oh!X 2001春号をみていませんな。
0486463NGNG
レス無しか・・・
0487なんとなく哀れを誘ったのでNGNG
>>486
知らん物だがちょっと調べてみた。
こんなことが書いてあるのな

http://www.microsoft.com/japan/developer/library/vccore/vcconlibraryimplementationchanges.htm
----------------------------------------------------------
CInternetSession
バッファの正当性チェックの強化
MFC のインターネット関連のすべての関数で、メモリ バッファのポインタ引数の正当性チェックが強化されています。

非同期処理の非サポート
MFC では、INTERNET_FLAG_ASYNC がサポートされていませんでした。このフラグを設定すると、MFC のデバッグ ビルドでアサートします。
----------------------------------------------------------
0488474NGNG
(ノ_<。)うっうっうっ
0489デフォルトの名無しさんNGNG
>>488
ちょい待ってて
0490デフォルトの名無しさんNGNG
すみません
CIPAddressCtrl
等でBYTEでIPアドレスを取得すると
BYTE型でIPアドレスが受け取れるのですが、
このBYTE型、例えば16進数で64を
 ・Stringで"64"に変換したり、
 ・int型で64に変換する
にはどうしたらいいでしょうか?
0491489NGNG
待ちます!!
リロードボタン連打して待ってます!!!
o(^^o)(o^^)o わくわく
0492デフォルトの名無しさんNGNG
>>490
sprintf
0493デフォルトの名無しさんNGNG
>>487
ありがとう。
ワーカースレッドに入れるしかないか・・・
0494いやーはははNGNG
>>489
思わずいろいろ試していてしまった。
http://www06.u-page.so-net.ne.jp/ga2/toku/VC/Doc/Doc007.html
ココを見て変形したスクロールビューを使ったもの↓
http://members.tripod.co.jp/g54g45g/efedewView.txt

結局上手い方法は思いつかず、スクロール画面位置の原点を座標計算に
加えてみただけ。なんかアレなのでこの際丸投げ

ライコスメールで

ID:【g54g45g】
PASS:【7ftakr】
の受信トレイに入れときます
”efedew.lzh”の”efedewView.cpp”

役に立つかどうか・・・

0495デフォルトの名無しさんNGNG
VC++sp4での話です。

MFC AppWizardで作成したSDIプロジェクトで、ウインドウを4つにスプ
リッタし、それぞれにCRichEditViewを貼り付けたいのですが、ClassWizardで
「クラスの追加(&L)...」→「新規...」を選択した後に表示される
「基本クラス(&B):」のコンボボックスの中にCRitchEditViewが表示されません。

MFC AppWizardの6/6で基本クラスにCRichEditViewを指定すると、一つ目のスプリッタ
ウインドウにはCRichEditViewが貼り付けられるのですが、残りのスプリッタウインドウ に貼り付ける為のCRichEditViewをClassWizard等を使い簡単に作成する方法ってないで
しょうか。
0496デフォルトの名無しさんNGNG
すみません 少々教えていただきたいのですが
 クラス間でデータ等のやりとりを行うには
 どのような関数を使用すればいいのでしょうか?
0497デフォルトの名無しさんNGNG
それはまた非常に哲学的な問題だな。
0498デフォルトの名無しさんNGNG
>>495
適当なクラスから派生させて、基本クラスを書き換える。
0499495NGNG
>>498
ありがとうございます。
0500500NGNG
⊂(゚ε゚⊂ )⊃≡ 500取ったけどキニシナイ!!
0501デフォルトの名無しさんNGNG
>>494
いいヤツだなお前
0502デフォルトの名無しさんNGNG
496です

 具体的に言うとデータの入出力用のクラスがあって、
 インスタンス化した元のクラスに対して「出力準備完了」など通知
 したいんですが・・・・・・


  呼び出し元  ーーーーーーーー>  入出力クラス
          インスタンス化           

  呼び出し元  <−−−ーーーーー  入出力クラス
         入出力準備完了通知    


こんな感じでできないでしょうか?
 スレッドとかプロセス同士だとできそうなんですが、
 入出力用のクラスを気にせずに呼び出せるようにしたいもので・・・・
0503デフォルトの名無しさんNGNG
>>502
お好きなようにやればよいではないか。

class MsgHandler {
public: void io_ready();
};

class IO {
MsgHandler* pMHan;
public: IO( MsgHandler* p ) : pMHan(p { /* ... */ pMHan->io_ready(); }
};

class Yobidashimoto : public MsgHandler {
/* 略 */
};
0504503NGNG
いかん間違えた。中途半端にJavaの癖が…
public: virtual void io_ready() = 0;
とかでよろしこ。
0505デフォルトの名無しさんNGNG
インスタンス化後、入出力準備完了まで戻ってこないとか。
0506デフォルトの名無しさんNGNG
>>503

 おおおそうやればいいのか! 
 今まではUNIXでCとかやってたんですが
 子供が親の参照もってるのがちょっとなんか違和感あるなあ

 でもこれでうまくいきそうです。ありがとうございます。
0507 NGNG
.NETに付属のMFC7.0はWIN95では動作しないのですか?
0508デフォルトの名無しさんNGNG
>>507
http://pc.2ch.net/test/read.cgi/tech/1017674939/l50
できいてみ。
0509デフォルトの名無しさんNGNG
モードレスダイアログ上の仮想リストビューを
DefWindowProcのパラメータで動かしているけど、
ダイアログ外の操作で生じた変更を、
すぐにリストビューに反映させるにはどうしたらいいかなぁ。

一応、試しに親からUpdateData(FALSE)とかやってみたけどやっぱダメだった。
0510デフォルトの名無しさんNGNG
>509
RedrawItems呼んでみるとか。
0511デフォルトの名無しさんNGNG
>510
うん、これだ。助かったぜぃ。
0512デフォルトの名無しさんNGNG
FrontPage2kで作成したサイトをリソースとして.exe内に取り込んだら、
内部リンクが全て効かなくなってしまいました。リンク部分を"res://〜"で
書き直せばいいのですが、自動的に書き直すようなことってできますか?
0513デフォルトの名無しさんNGNG
LINE INから入力したアナログの音をエフェクト処理(エコーなど)して、
タイムロス無しでそのままWAVE OUTから音を出すソフトってVISUAL C++で
作れますか?
既に保存してあるWAVEファイルを加工するソフトは結構ありますけど
そういうのじゃなくてギターなんかのアナログエフェクトと同じ事がしたいんです

ちなみに僕はまったくプログラムできません(C言語がほんの少しだけ。)
出来るか出来ないかだけでいいので教えてください。

多分

line in→標本化→アナログ/デジタル変換→エフェクト処理→
デジタル/アナログ変換→wave out(waveファイルじゃなくて音が出したい)
(line in→wave out の間にタイムロスほとんどなし)

みたいなことをしたいんですけど…
0514デフォルトの名無しさんNGNG
人がほとんど感じないようなタイムロス(5ms以下?)を実現するなら、
通常アプリケーションでは難しい、というかほとんど無理。

カーネルモードで動くドライバならばできるかもしれないけど、
素人にはおすすめできない。
0515デフォルトの名無しさんNGNG
無理ですか。。もし出来るのなら勉強して作りたかったんですけど。。
0516デフォルトの名無しさんNGNG
CView派生クラスの中に項目数に応じて自動的にスクロールバーが付くものがありますが、
スクロールバーが付く瞬間に送られているメッセージを知りたいのですが、
何のメッセージが送られているのかspy++でもよくわかりませんでした。

あと、DelphiでいうStringGridのようなものはないのでしょうか?
FlexGridというActiveXコントロールがあるようですが、
ActiveXではなくて、MFCのようにソース付のものがあれば教えてください。
0517デフォルトの名無しさんNGNG
とりあえずcodeguru逝け
0518デフォルトの名無しさんNGNG
ピクチャボックスってサブクラス化できないのですか?
0519518NGNG
自己レスです。

ピクチャボックスのIDを
IDC_STATICからIC_PICT_ONEにしたらできました。
0520仕様書無しさんNGNG
>>513
RTOSからつくるこった。
5μmsから応答するぞ。
0521デフォルトの名無しさんNGNG
小もない質問ですが、ダイアログベースのソフトをVC++で作ってます。
で、配布するときにMFCのDLLを付けて配布しないといけないじゃないですか。
(無いと実行できないからですよね。)
で、そのDLLを実行ファイル(EXE)に組み込めないでしょうか?
0522デフォルトの名無しさんNGNG
>>521
スタティックリンクでやればいいんじゃなかったかな?
0523デフォルトの名無しさんNGNG
>>520
DOSモードで動かせばいいじゃん。
割り込み応答だけ速くてもしょうがないし。
0524Disca ◆NAfP6znE NGNG
プロジェクト>設定Win32Release>MicrofundationClass
スタッティックライブラリ

問題解決デス^^
0525デフォルトの名無しさんNGNG
>スタティックリンク
Professional以上のEditionでないとダメなのでそこんとこ注意だ。>>521
0526デフォルトの名無しさんNGNG
vc6でダイアログベースでプログラムを作っています。
http://techtips.belution.com/ja/vc/0012/
を参考にして常にアクティブなアプリにしようと思いましたが、
どうもアクティブになりません。

F:\Vc\HukumaDen\HukumaDenDlg.cpp(239) : error C2065: 'SPI_GETFOREGROUNDLOCKTIMEOUT' : 定義されていない識別子です。
F:\Vc\HukumaDen\HukumaDenDlg.cpp(241) : error C2065: 'SPI_SETFOREGROUNDLOCKTIMEOUT' : 定義されていない識別子です。

とエラーがでます。なにかヘッダ等をインクルードしなけらばいけないのでしょうか?
 
0527デフォルトの名無しさんNGNG
>>526
winuser.h
#if(WINVER >= 0x0500)
#define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000

つーか、grepしる!
で、OSが98の場合はそのまま書いちゃえ。

0528デフォルトの名無しさんNGNG
MDIを作成すると自動的に子ウィンドウが出来るんですけど、
それとはまた別に、独自のダイアログを挿入したいのですが、
(もちろん、MDIのMainFrameからはみ出さないように)
どう書くべきですか?
0529526NGNG
>>527
ありがとうございます。

>つーか、grepしる!
grepってなんですか?
と思ってしらべてみたら、すごい便利なものですね。
VCの中にあるのかな?探してみます。
0530デフォルトの名無しさんNGNG
スレの趣旨とは関係ないかもしれんが、

XPでVC++使っててデバッグしようとすると
良くとまるのですが。SPとかもでてないし。

どのPCでもとまるぞ
0531デフォルトの名無しさんNGNG
リストボックスについて質問です。
リストにアイテムを加えていくとき、addstring()でやっていくと
1アイテム一行になりますが、1アイテムにつき二行以上を使って、
選択時もそのアイテムをクリックすると二行以上選択できるように
したいんです。AddString("aho\r\nbaka")で試しましたができません
でした。そんな風なことはできるんでしょうか?
0532デフォルトの名無しさんNGNG
>>531
オーナードローでしこしこする。
それかcodeguruやcodeprojectでさがす?
0533デフォルトの名無しさんNGNG
ありがとうございます。探してみます・・
その前にまた問題が・・
ひとつのダイアログ画面に三つリストボックスを入れたいんですが
二つ目を入れてコントロールのメンバ変数を作ると、ダイアログを閉じた
時に強制終了してしまうんです。何が原因と考えられますか。
0534デフォルトの名無しさんNGNG
533です
プレコンパイルヘッダーを削除してビルドしたらしっかり
動いてくれました・・いったいなんだったんだ。
0535デフォルトの名無しさんNGNG
>>534
は?
それってコンパイラオプションと作り方が違ってたってことか?
ってゆーかエラーコードくらい書け!
0536デフォルトの名無しさんNGNG
ソケットについて教えて下さい

CAsyncSocketクラスを使用してインスタンスをつくり、
read関数を使って受信したデータを読み込もうとしているのですが

 例えば
CAsyncSocket Sock;
BYTE *buf;
と定義されていて
Sock.read(buf,2000);
とした場合、
 実際に受け取ったデータが1500バイトぐらいだった場合
 1500バイトであるというのを確認するにはどうしたらいいでしょうか

また、read関数でデータを取り出した際に全てのデータを取り出せて
 いなかった場合、通知などは行われるのでしょうか?
 
 詳しい方教えて下さい〜
0537デフォルトの名無しさんNGNG
>>536
CAsyncSocketにreadなんてメソッドあったっけ…
Receive()なら受信バイト数を返してくれるけど。

> また、read関数でデータを取り出した際に全てのデータを取り出せて
>  いなかった場合、通知などは行われるのでしょうか?

ネットワークプログラミングスレにもあったような気がするけど、ストリーム型では
「どこがデータの終端か」をライブラリが知ることはできないので、アプリ側でデータ
の区切りを指定する必要がある。
ということで、終端にEOFをつける決まりにしておくとか、HTTPみたいに
Content-Lengthを送っておくとか。

データグラム型なら基本的にパケットが勝手に結合されたりすることはないので、
ReceiveFrom()で受信した時点で完了。1パケットのサイズを超えるデータを扱う時
には、TCPがやってるようなことを自前で処理。
0538sageNGNG
オブジェクト名は小文字推奨
型名は最初大文字推奨
0539デフォルトの名無しさんNGNG
VS6で
CString a="draemon";
CString b;

b.Format("%d",15);
a += b;

を
CString a = "doraemon;

a += new CString.format("%d",15);
こんな風に簡潔にできないでしょうか?
 コンパイルエラーで怒られる・・・・・
0540デフォルトの名無しさんNGNG
OnItemchangedで項目の選択状態が外れたことを知りたいんだけど、
NM_LISTVIEのiItemの値が「-1」になってダメ。
なら選択状態が外れる前に取得しようか、とOnItemchangingをハンドルしてみたけど、
今度はこの関数が呼ばれない。「〜ed」の方は反応するのに。なぜ?
0541デフォルトの名無しさんNGNG
VFC-LINK逝ってヨシ!
0542デフォルトの名無しさんNGNG
>>539
CString a = "doraemon; では、右側の '"' がないぞと言うのと、CString は
format() じゃなくて Format() だぞと言うのは、おいとくとして...。

CString a;
a.Format("%s%d", "doraemon", 15);

じゃダメなの ?
0543デフォルトの名無しさんNGNG
>>539
CString a(_T("doraemon15"));
0544デフォルトの名無しさんNGNG
>>541
ワラタ。はげしく同意だ。
0545デフォルトの名無しさんNGNG
プロパティページにリストビューコントロールを貼り、

// m_listはCListCtrl
m_list.SetExtendedStyle(LVS_EX_INFOTIP | LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);

としてツールチップを表示させようとしたのですが、
なぜかツールチップがプロパティシートの後ろに表示されてしまいます。
どうすれば通常のようにリストビューの前に表示されるのでしょうか?
0546デフォルトの名無しさんNGNG
>>542

なんか書き方が悪かったっす

void nobita::ayatori(CString shizuka,int kaisuu)
{
CString suneo;

UpdateData(TRUE);
suneo.Format("%d",kaisuu);
m_doraemon = shizuka += suneo;
UpdateData(FALSE);
}


コード的にこんな感じになっちゃうんですが
 これはこれで仕方ないんでしょうか?
suneoが消せたらすっきりするかなーと思ったんですが

m_doraemon = shizuka += new CString.Format("%d",kaisuu);

 昔こんな感じのコードみた記憶があったんで・・・
VCじゃなくてJAVAだったのかなぁあれは・・・・・・
0547デフォルトの名無しさんNGNG
m_doraemon.Foramt(_T("%s%d"), shizuka, kaisuu);
じゃダメなんか?
0548デフォルトの名無しさんNGNG
(LPCTSTR)shizuka, kaisu);みたいに、明示キャストしないと
...でオブジェクトがそのまま渡ってキケンでわ?
0549デフォルトの名無しさんNGNG
void nobita::ayatori(LPCTSTR shizuka,int kaisuu)
いっそこうしよう
0550デフォルトの名無しさんNGNG
>>548
CStringに限って言えばそのまま渡しても問題ない。
0551デフォルトの名無しさんNGNG
VC++のヘルプについているサンプルのスクリーンセーバサンプルに、
ビットマップを表示するプログラムを書き足しました。
bm1にリソースから、画像をロードしてからのプログラムです。
スクリーンセーバですから、ループするわけですが、10000回目ぐらいで、
エラーが出ます。しかも、C++の実行では出ず、
時間がたてば起動するようにセットしたときに起こります。
どう直せばいいでしょうか。知恵を貸してください。

void CDrawWnd::Draw(CDC& dc, int nWidth)
{
...........

CDC mDC, *pDC = this->GetDC();
mDC.CreateCompatibleDC(pDC);

CDC mDC, *pDC = this->GetDC();
mDC.CreateCompatibleDC(pDC);
CBitmap *ob = mDC.SelectObject(&bm1);
dc.BitBlt(100, 100, 100,&mDC, 0, 0, SRCCOPY);
...........
]



0552デフォルトの名無しさんNGNG
>>546
void nobita::ayatori(CString shizuka,int kaisuu)
{
UpdateData(TRUE);
m_doraemon = shizuka += CString().Format("%d",kaisuu);
UpdateData(FALSE);
}

suneoをテンポラリオブジェクトにした。これでどうよ?
0553552NGNG
って待てよ。「shizuka +=」ってのはバグにしか見えないんだが。
shizukaも変更するってのは、ホントに意図したものなんか?
0554デフォルトの名無しさんNGNG
>>553
その前に、お前は CString().Format() の型を知っているのかと小一時間...
0555デフォルトの名無しさんNGNG
>>553
まあ、>>539 見ると本人は意図してるみたいね。また、MSDN にも...

次の例は CString::operator += の使い方を示しています。

// CString::operator += の例
CString s( "abc" );
ASSERT( ( s += "def" ) == "abcdef" );

なんて書いてあるぐらいだから、変じゃないのかもね。
0556デフォルトの名無しさんNGNG

inline CString Format(LPCTSTR pszFormat, ...)
{
TCHAR szBuf[1024];
va_list arg;
va_start(arg, pszFormat);
_stprintf(szBuf, pszFormat, arg);
va_end(arg);
return CString(szBuf);
}

どうしてもスネオが嫌いで足し算が大好きなら、
これヘッダに張っとけ。
っていうか、VBじゃだめなの?
0557デフォルトの名無しさんNGNG
>>556

_vstprintf()でした。偉そうにいってごめん。
0558デフォルトの名無しさんNGNG
>>557
つーか、CString::FormatV() じゃダメなのか ?
0559デフォルトの名無しさんNGNG
何より質問者が出てこないんじゃ・・・
0560デフォルトの名無しさんNGNG
どうも >>539です

 >>552さん
そそそそうそれです!そんな感じの・・・・
 テンポラリオブジェクトってやつなんですね
 でも今ちょっとやったところなんかコンパイルないっぽい・・・・

 他にも
 >>547さん
 のおっしゃられているようにm_doraemon.Foramt(_T("%s%d"), shizuka, kaisuu); でも同じようにできるんですね

sprintfを調べて、
 自分が未熟だと気づくまで小一時間
 気づいてからもう小一時間
 やっとなんとかできそうです!

 答えていただいたみなさんありがとうございました
0561デフォルトの名無しさんNGNG
テキストファイルの下から5行目を取得したいときにはどうすればよいのでしょう?
CFile::Seekを使えばできそうな気がするのですが、
下から5行目というのをどう判断すればよいのかがわかりません。
0562デフォルトの名無しさんNGNG
>>561
改行
0563デフォルトの名無しさんNGNG
>>562
どんなコード書けば下から改行を数えられるのかがわかりません・・・
0564デフォルトの名無しさんNGNG
tailのソース嫁
0565デフォルトの名無しさんNGNG
560です

 いろいろ調べたりしてて思ったんですが、MSのヘルプって分かりにくい・・・
 自分の質問もなんか初歩的なものだったみたいだし・・・・

 他に参考書のスレッドがあるのを承知でお伺いしたいんですが、
 ここのスレッド的に「せめてこれ読んでから質問せいよ ゴルァ!」
 のありますか?あったら教えて下さい
 
 お願いします
0566デフォルトの名無しさんNGNG
>>565
MSのヘルプ
0567デフォルトの名無しさんNGNG
VCLの方が使いやすいよ。
0568デフォルトの名無しさんNGNG
たとえば、const・・・これは初期化以後の代入を不可にしますが、これを
アセンブラに直すとどういう風になっているのでしょうか?代入をブロック
するっていうのはなんかフラグを立てて一度代入をするまえにフラグが
たっていれば代入不可になるみたいな処理がおこなわれているのですか?
0569デフォルトの名無しさんNGNG
>>568
書き換え不可のメモリ領域に配置するとか。

「const指定に違反したコードをコンパイラがチェックしてエラーにするだけ」
で、コンパイルされた後には違いがないという場合が多いと思うが。
0570デフォルトの名無しさんNGNG
>569
>書き換え不可のメモリ領域に配置するとか。
それは‥‥const_castとかmutableとか、初期化とかに
いろいろ問題がでそう‥‥
0571デフォルトの名無しさんNGNG
>>570
const_castはそもそもそういう危険を承知した上で使うキャストだが。
0572デフォルトの名無しさんNGNG
えっと・・・果たしてMFCスレに相応しい話題なのかなぁ、と・・
0573554NGNG
>>560
> そそそそうそれです!そんな感じの・・・・
> テンポラリオブジェクトってやつなんですね
> でも今ちょっとやったところなんかコンパイルないっぽい・・・・

おいおい、>>554 は、見てくんねぇのかよ。

> 他にも >>547さんのおっしゃられているように
> m_doraemon.Foramt(_T("%s%d"), shizuka, kaisuu);
> でも同じようにできるんですね

お前は、shizuka にも代入したいんと違うかいと小一時間 (もう飽きた...)
0574デフォルトの名無しさんNGNG
>>568
最近の子は、ハードウェアを全然知らんのか ? CASL/COMET ぐらいやっといた方
がいいぞ。
0575デフォルトの名無しさんNGNG
今MFCについて学んでいるのですが、C++の勉強という意味で
その内部の構造についても勉強したいと思っています。

C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include(うちの環境)
にある afxwin.h に色々なクラスの定義があるとこは分かったのですが、
実際のメンバ関数本体はどこにあるのでしょうか?

C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC
の中にあるのではないかと思い探しているのですが、最近MFCを始めたばかりで
難しい名前が沢山並んでいるのでどこにどのクラスのメンバ関数本体があるのか分かりません。

ファイル名とクラス名には何か関連性があるのでしょうか?
実際に使いたいものは CRect と CPoint と CSize なのですがどこか分かりません。
どうかよろしくお願いします。
0576デフォルトの名無しさんNGNG
デバッガで追ってけばいつの間にかMFCのソースの中に。
0577デフォルトの名無しさんNGNG
デバグ汁
0578デフォルトの名無しさんNGNG
つか調べたい関数名で検索しる!
0579デフォルトの名無しさんNGNG
もしかするとCEditViewのスクロールバーってはがせませんか?
さっきからウィンドウスタイルに「!WS_HSCROLL」とかやって頑張ってみてるんですが。
0580デフォルトの名無しさんNGNG
.inlファイルかな?
0581デフォルトの名無しさんNGNG
>>563
なぜ下から数えようとするの?
全行数から取得したい行を減算する方法はだめなの?
0582デフォルトの名無しさんNGNG
>>579
それをやるなら style & ~WS_HSCROLL
ただし、すでに付いてしまったスクロールバーを外す効果しかない。
最初からスクロールバーが出ないようにしたいんだったら
ES_AUTOHSCROLL を外すという方法がある(かわりにウィンドウ右端で
折り返されるようになるけど)。
0583デフォルトの名無しさんNGNG
>581
400Mのファイルの下40行とかで死にますがなにか。
0584デフォルトの名無しさんNGNG
>>582
両方試したんですが消えないす。
一応、OnCreateとPreCreateWindowの2カ初でやってみたんですが。
言い忘れてましたがCEditViewは分割ウィンドウに入ってます。
共有スクロールバーはもちろん外してます。
0585デフォルトの名無しさんNGNG
後ろからそれっぽい量(40行で40Kこえることはまずあるまい)
読んで数えて足りなければまた読んで・・・
0586デフォルトの名無しさんNGNG
Win XPのせいなのかMFC7(ただし当時β2)のせいなのかしら無いけど、フローティングツールバーの位置を、セーブしてロードすると場所が4pxくらいずれてるんだよ;´Д`)
マジ萎えた。
0587デフォルトの名無しさんNGNG
そうだその意気だ。もっとMFC7の話題を聞かせてくれ。
0588561NGNG
Seekで下から一個ずつ検索して改行を数えてできました。
0589デフォルトの名無しさんNGNG
>>575
1.VC立ち上げる
2.[編集]メニューかツールバーで[ファイルから検索]を出す
3.調べたい名前を入れる(「CPoint」とか「CSize」)
4.ファイルの種類をソースとかヘッダにする − 4'.[単語単位]にチェック
したりする − 4''.[サブフォルダも探す]にしておく
5.[検索するフォルダ]に
”C:\Program Files\Microsoft Visual Studio\VC98\MFC”あたりを選ぶ
6.[検索]ボタンを押す

以上
0590デフォルトの名無しさんNGNG
>>584
BOOL CMyEditView::PreCreateWindow(CREATESTRUCT& cs)
{
 BOOL bPreCreated = CEditView::PreCreateWindow(cs);
 cs.style &= ~(ES_AUTOHSCROLL | WS_HSCROLL); // 水平スクロールバーを出さない
 cs.style &= ~(ES_AUTOVSCROLL | WS_VSCROLL); // 垂直スクロールバーを出さない
 return bPreCreated;
}

という風にやれば出なくなるはずだけど。
ちなみにAppWizardの作ってくれたスケルトンほとんどそのまま。
0591デフォルトの名無しさんNGNG
>590
ありがとうございます。いや、やっと消えましたよ。
やれやれだぜ、です。
0592デフォルトの名無しさんNGNG
バッチ処理的なプログラムを組んでるんですが
ウィンドウ作らずにCWinAppに関数組み込んで作ってるんですが
注意する点は何かありますか?
0593デフォルトの名無しさんNGNG
>>592
なんでWinMainからにしないのかと問い詰めたい。
0594デフォルトの名無しさんNGNG
>>593
あっ、やっぱりそうですか。MFCは使いたかったんです。
それで、
MFCを使ってSDKを組むって気づいたのが、
プログラムがなかなか出来上がってときだっだんです。
0595デフォルトの名無しさんNGNG
app.Run()がしたいだけなんちゃうかと..
0596592NGNG
CWinApp::InitInstance
でバッチ処理の関数読んで
関数抜けたらそのまま終了。って感じなんですがそれでいいのかなと、
CWinApp::InitInstanceって初期化関数なので。
0597デフォルトの名無しさんNGNG
なんで初期化中に全部の処理が終わってるんだ?
なんで初期化中に全部の処理が終わってるんだ?
なんで初期化中に全部の処理が終わってるんだ?
なんで初期化中に全部の処理が終わってるんだ?
なんで初期化中に全部の処理が終わってるんだ?

お前が小説読み始めたとき、「序文」で物語が終わってたら
どうおもうんだ?
0598デフォルトの名無しさんNGNG
それで済む処理しかしないんだろ。
0599デフォルトの名無しさんNGNG
WIN2KとBCB6とVS.NET

MFC7使ってるんだけど、ビルドしようとすると
このユーザーのセキュリティ設定が原因で、プロセスを作成できません。これらの設定はビルドで必要です
というエラーが出てビルドできねっす(^_^;;
win2kのセキュリティ関係らしいんだけど、ユーザーのグループはVSデベロッパーでアドミンなのに・・・
VC++系だけ駄目で、VBやVC#ではビルドできます
おまけに統合環境のプログラムがCPU100%食ったままになって、タスクマネージャで殺さないと残ったままになるし

同じ2kでもノートでやってみるとちゃんとビルドできるんです
BCBとの相性が悪いんだろか?

同じような事になった人居ませんか?
解決策求ム
0600デフォルトの名無しさんNGNG
>>599
これ?
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q313363
0601デフォルトの名無しさんNGNG
幾つかのアルゴリズムの実行速度を比較する為に,
10万回の繰り返しにかかった時間を計測する.
のような事をしたいのですが,どうすれば良いのでしょうか.
どこかにサンプルはありませんでしょうか?
0602デフォルトの名無しさんNGNG
変数1=時間を取得();
 アルゴリズム10万回実行();
時間を取得()−変数1;
0603デフォルトの名無しさんNGNG
>>601
>>ms-help://MS.VSCC/MS.MSDNVS.1041/vclib/html/_crt_clock.htm
0604SSE2NGNG
Windows Media Audio and Videoを語ろう【part2】
http://pc.2ch.net/test/read.cgi/avi/1018368846/

Windows Media Audio and Videoを語ろう【part1】
http://pc.2ch.net/test/read.cgi/avi/976722195/

オフィシャルサンプルビデオ
http://www.microsoft.com/japan/windows/windowsmedia/WM8/video.asp

Windows Media エンコーダ 7.1
http://www.microsoft.com/japan/windows/windowsmedia/WM7/encoder.asp

Windows Media エンコーダ 7.1 日本語FAQ
http://www.microsoft.com/japan/windows/windowsmedia/WM7/encoder/faq.asp
Windows Media 8 Encoding Utility(英語のみ)
http://www.microsoft.com/japan/windows/windowsmedia/download/default_1.htm
Windows Media 8 Encoding Utility アスロンXP_SSEパッチ
http://www.geocities.co.jp/SiliconValley-Oakland/8071/wmv.html
Windows Media 8 Encoding Utility GUI
http://www.abdn.ac.uk/~u71ds/wm8egui/
http://www.alcv.f2s.com/file/WM8EUtl_GUI.lzh

WindowsXP用のWindows Media Bonus Pack
http://www.microsoft.com/presspass/press/2001/Dec01/12-13XPBonusPackPR.asp
http://www.microsoft.com/windows/windowsmedia/download/bonuspack.asp

コーデック
http://codecs.microsoft.com/codecs/i386/wmv8ax.cab
wme Batch Encoding
http://users.hoops.ne.jp/marumesoft/soft02.htm#03
上下逆さまのファイルができるのを解消できるレジストリファイル。
http://www.abdn.ac.uk/~u71ds/wm8egui/VerticalYUVFlipOn.reg

Windows Media Player 7.01 for Mac
www.microsoft.com/japan/windows/windowsmedia/download/mac7.asp

Asftools
ttp://cool.sj.net.cn/~souxin/software/asftools230-souxin.exe
ttp://go.to/asftools

flaskmpgのwmv変換
ttp://www.dvd-digest.net/downloads/files/flaskmpeg/wmvcreator.zip

M4U -MPEG4U-
ShortURL: http://m4u.uni.cc
RealURL: http://www.oak.dti.ne.jp/~oak/m4u/

Corona関連ニュース
http://pcweb.mycom.co.jp/news/2001/12/12/27.html
http://www.watch.impress.co.jp/av/docs/20011212/ms.htm
http://www.watch.impress.co.jp/pc/docs/article/20011212/ms.htm

dvdチップメーカーのWMV対応発表
http://www.zdnet.co.jp/news/0112/12/e_dvd.html

0605599NGNG
>>600
この通りにやっても出来んのよ

もしかして俺だけ?(汗
0606599NGNG
こっちだった
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q151176
0607デフォルトの名無しさんNGNG
ウィンドウの分割についてだけど、
左右に分割してそのどちらか一方をさらに上下に分割する方法はうまくいく。
たとえば左側が1行右側が2行。
でも右側を3行や4行に増やすとエラーになるのはなぜ?
CreateView()の記述は右側の行数分増やしてあるのに。
0608607NGNG
早くも自己解決。

↓この例を見て
CreateStatic( this , 1 , 2 );
CreateStatic( &this->m_wndSplitter1, 2, 1, ...

↓こうする物だと勘違いしてた。
CreateStatic( this , 1 , 4 );
CreateStatic( &this->m_wndSplitter1, 4, 1, ...

↓これが正解だね
CreateStatic( this , 1 , 2 );
CreateStatic( &this->m_wndSplitter1, 4, 1, ...
0609デフォルトの名無しさんNGNG
エディットボックスに変更があると「保存する必要の可能性あり」っていうフラグが自動的に立って
「保存しますか」って聞いてきますけど、これって自由に変えられないんでしょうか?
未保存でも警告を出さないようにしたりとか、逆に変更がなくても出るようにしたりとか。

あと「保存する必要の可能性を示すフラグ」って何か名称あります?
0610デフォルトの名無しさんNGNG
>>609
CDocument::SetModifiedFlag()
CDocument::IsModified()
CDocument::SaveModified()
0611デフォルトの名無しさんNGNG
エディットボックスだから
CEdit::GetModify
CEdit::SetModify
0612デフォルトの名無しさんNGNG
教えてください
 ファイルから、
"CMD(5,7)\n"を取り出しました
5の部分をATOIでint型にするにはどうしたらいいでしょうか?

ヘルプをみるとatoiはconst char*を受け取るようになっているみたいなんで
5文字目である'5'を指定するように
atoi(FileString[4]);
とすると怒られてしまいます
 どうしたらいいでしょうか?
 ご教授お願いします
0613デフォルトの名無しさんNGNG
MFCを使う前にCを理解してくれ・・・
0614デフォルトの名無しさんNGNG
C++からはじめても平気とかいうバカがいるからこうなるんだろうな。
0615デフォルトの名無しさんNGNG
ダイアログ内のチェックボックスを無効にしようと思い、
以下のようなコードを記述しました。

void CPropertyDlg::DisableCheckBox()
{
CWnd *pWnd;

pWnd = GetDlgItem( IDC_CHECK1 );
pWnd->EnableWindow( FALSE );
}

これをリストビューから呼び出すために

CPropertyDlg dlg;
dlg.DisableCheckBox();

としていますが、
pWnd->EnableWindow( FALSE );
を実行した時点で強制終了してしまいます。

pWndが正しく取得できていないようなんですが、
原因がわからず困っています。

皆様の知恵を貸していただけないでしょうか。
よろしくお願いします。

開発環境はVC++6.0 SDIです。
0616デフォルトの名無しさんNGNG
>>615
最低限pWndのNULLチェックはしとけよ。
0617デフォルトの名無しさんNGNG
>>615
dlgを宣言しただけではダイアログはできていない。
当然その上のチェックボックスもまだ存在しないナリよ。
0618609NGNG
>>610 - 611
助かったです。
ヘルプを見てみましたが、フラグには特に名称はないようですね。
0619デフォルトの名無しさんNGNG
>>615は定番だね。
0620デフォルトの名無しさんNGNG
SDIのMFCプログラム作ってるんですけれど、
IEみたいにメニューをCoolBarの中に入れる方法がわかりません。
CoolBarの上にメニューが表示されるカタチになってしまいます。
どうしたらいいんでしょ?
(VBスレでも同じ質問があったような ^^;)
0621デフォルトの名無しさんNGNG
>>620
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/faq/iemenubar.asp
IEは、Windows標準のメニューを使っていません。
あのメニューは、Coolbar内のバンドの1つです。
0622デフォルトの名無しさんNGNG
MFC初心者ですが
ダイアログ上のコントロール(チェックボックスやボタン等)に
フォーカスが移った時にそのコントロールの説明をスタティックテキストで
表示したいんですけどやり方がわかりません。
メニューやツールバーならプロンプトで簡単に出せるんですけど
それ以外のコントロールだとお手上げです。
SPYで見てもへんなメッセージ(WM_KICKIDLEとか)しか来てないみたいです。
どうしたらいいんでしょうか?
0623デフォルトの名無しさんNGNG
> メニューやツールバーならプロンプトで簡単に出せるんですけど

プロンプト?
0624622NGNG
>>623
リソースエディタでプロパティを開いてプロンプトという項目を書いてやると
それがステータスバーに出てくるんです。
名前よくわかりません。
0625622NGNG
解決したかもしれないです。
サブクラス化とかいうのをやれば良いようです。
ただ、コントロールが沢山あるので大変です・・。
コントロールの種類ごとにサブクラス化しなきゃならないんでしょうか。
もっと良い方法は無いでしょうか。
0626デフォルトの名無しさんNGNG
NM_SETFOCUS
0627622NGNG
>>626
ありがとうございます。
とりあえずClassWizardでOnNotifyを追加してみたんですけど
色々触ってみてもそこに実行が移りません。
なにか設定が必要でしょうか?
0628デフォルトの名無しさんNGNG
>>627
コントロールのスタイルの「通知」にチェック
0629622NGNG
>>628
それでもダメなようです・・。
チェックボックスやボタンコントロールで試しています。
0630デフォルトの名無しさんNGNG
>>629
WM_NOTIFYではなくて、WM_COMMAND で BN_* が来てるハズ。
0631622NGNG
>>630
BN_SETFOCUSで動きました。大感謝です。
これでコントロールごとに関数分けられたら最高なんですけど
WM_NOTIFYをサポートしてるのは最近のコントロールだけなんですね・・
ともかく長々とありがとうございました。
0632デフォルトの名無しさんNGNG
> これでコントロールごとに関数分けられたら最高なんですけど

普通、コントロールごとにハンドラ分けられてしまうのが
鬱陶しいんだけど。
で、まとめて処理する方法が載ってたりするんだけど。
0633デフォルトの名無しさんNGNG
CStatusBarCtrlの境界線を無くすにはどうしたら良いですかね?
0634622NGNG
>>632
コントロールごとに処理が違うんで
自分でswitch/case書くよりは
ClassWizardでやれたほうが楽かなと思って。
0635デフォルトの名無しさんNGNG
リソースエディタで作成したリソースをLoadToolBarで作成したCToobBarですけど
このツールバーのボタンをラジオボタンのように使いたいのですが
どうすればよいですか?
0636デフォルトの名無しさんNGNG
>>635
どれかが押されたら、それのメッセージハンドラで他のものを戻しちゃだめ?
MFCのフレームワークで作業しているなら、
OnUpdate〜(CCmdUI* pCmdUI)
で処理しても良いのでわ?
0637635NGNG
>>636
ありがとうございます。(遅くなったけど)
なんかグループ化して他のボタンが押されるまで押下状態を保持するとかフラグがあるんですが
どうも設定しても上手く動かないので・・。メッセージハンドラで他のモノを戻す方法を試そうと思います
0638デフォルトの名無しさんNGNG
スクリーンセーバを作成しているのですが、画面のプロパティースクリーンセーバーー設定
をクリックしたときのセーバーの設定はどのようにしてクリックされたと検出するんですか?
というか、設定をクリックしたときに実行されるプログラムはどうかくのですか?
0639デフォルトの名無しさんNGNG
ScreenSaverConfigureDialog
0640デフォルトの名無しさんNGNG
昔はMSDNにWIN32スクリーンセーバの作成方法が日本語で載ってたんだが。

[画面のプロパティ]の[スクリーンセーバ]から↓の様に起動(コマンドライン)される。
(scrsaver.scrがWinnt、Windowsのフォルダにあるとする)

[設定(T)]をクリック
scrsaver.scr /c:hWnd 
         ダイアログHWND(多分)を10進表記
 
プレビューwnd(上中央の小さいスクリンセーバ画面)
scrsaver.scr /p hWnd
         プレビューwndのHWNDを10進表記

スクリーンセーバ(本番:自分で全画面を取得する)
scrsaver.scr /s

パスワード(使ったことないので良く知らん)
scrsaver.scr /a 

scrsaver.scr は自分で作成したscrsaver.exe を単純にリネームすればOK。
コマンドラインは、main(argc, argv)でもCCommandLineInfoでもGetCommandLine()受けとれる。
それからVC6のMSDNにはSAVERというサンプルがある。こっちの方が参考になるかもしれん。
(他にscrnsave.libを使う方法があるが、良く知らん)
0641620NGNG
>>621
サンクスです。
こんなダイレクトな記事があったなんて、見落としてた…鬱
0642デフォルトの名無しさんNGNG
MFCのダイアログベースアプリケーションを作ろうとしてます。

[プロジェクト]→[プロジェクトへ追加]→[コンポーネント及びコントロール]で、
「Microsoft Coolbar Control, version 6.0.lnk」を挿入。
それをダイアログに貼り付けてとりあえず実行したところ、
例外処理 (初回) は BBSExpDlg.exe (KERNEL32.DLL) にあります: 0xC000008F: Float Inexact Result。
という例外が発生しているようです。(アウトプットウィンドウにて)

プロパティをみても「このコントロールはContainedControlsコレクションをサポートしていません」と
言われてしまうのですが、ひょっとしてVCからは使用できないのでしょうか?
だとしたらどうすりゃいいんだろう…

VC6.0(SP5)+Win2k
0643デフォルトの名無しさんNGNG
FormViewで表示するダイアログの切り替えってできます?
Show/Hide駆使するしかないかなあ…
0644デフォルトの名無しさんNGNG
コマンドラインといえば__argvと__argcで十分。
0645デフォルトの名無しさんNGNG
>>643
codeprojectにサンプルがいくつかある
0646643NGNG
>>645
サンクスです。
codeguruもあったっけ、そいえば…
0647麗恵香NGNG
魔法のiらんどでつくったHP不正に改ざんされてパスワード変えられた。誰か不正アクセスの仕方とか教えてください。お願いします。
0648えいこNGNG
たすけてください。いま、MFCで自作のプロパティーシートのコンボボックスに
デフォルトで設定されているプリンタの用紙サイズと用紙の向きを取得するという
プログラムを組んでいるのですが、超初心者なので、まったく、どこをどうしたら
いいのかもわからずに悩んでいます。わかる方がいらっしゃたら、詳しく教えて
いただけないでしょうか?よろしくおねがいします。
0649デフォルトの名無しさんNGNG
こいつはネカマに一票。
0650デフォルトの名無しさんNGNG
CWinApp::GetPrinterDeviceDefaults()
0651デフォルトの名無しさんNGNG
以前質問したんですがまた聞きます

CToolBarでボタンをラジオボタンのように使えないでしょうか?

ツールバーのスタイルにTBSTYLE_CHECKGROUPというのがあって、これが使えないか?と思い
ウイザード(SDI)が最初から作り出すツールバー(m_wndToolBar)にボタンを追加してみました。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_ALTDRAG , WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // 作成に失敗
}
//ここから追加
TBBUTTON button[5];
for(int i = 0 ; i < 5 ; i++){
button[i].fsState = TBSTATE_ENABLED;
button[i].fsStyle = TBSTYLE_CHECKGROUP;
button[i].iBitmap = 0;
button[i].idCommand = m_wndToolBar.GetItemID(10);
button[i].iString = 0;
}
CToolBarCtrl &ToolBarCtrl = m_wndToolBar.GetToolBarCtrl();
ToolBarCtrl.AddButtons(5,button);
//ここまで

これだと一応他のグループのボタンが押されるまで押下状態をキープしてくれるみたいです。
ただし、ボタン一つ一つが一つのグループになっているらしく、
グループに他のボタンがないので結局押したら押しっぱなしらしいです。
問題はどうやって複数のボタンをグループ化させるのか?だと思うのですが。。。
どなたか教えてください。
0652デフォルトの名無しさんNGNG
はずしてるが、こういう情報ってツールバーにもたせるより
自分で持って、updateハンドラで処理したほうがいいんじゃない。
メニューとかと整合が取れなくなるし、

それにこういう情報って、MFCのフレームワークの中で勝手に
いろいろしててうまく言ってないってことも考えられるし。
0653651NGNG
>651です。

スタイルがTBSTYLE_CHECKだとチェックボタンになってくれます。
なのでTBSTYLE_CHECKGROUPも使い方がちゃんとあると思うのですが。
0654652NGNG
>button[i].idCommand = m_wndToolBar.GetItemID(10);

とりあえず、IDが同じじゃまずいと思う。

0655デフォルトの名無しさんNGNG
for(int i=0; i<5; i++){
m_wndToolBar.SetButtonStyle(i, TBBS_CHECKGROUP);
}
または
ボタンの更新ハンドラでCCmdUI::SetCheckを使ってチェックの制御。
0656635NGNG
>>655
ありがとうございます。
それでできました。
ところでグループを複数に分けたりとかもできるんでしょうか?
0657デフォルトの名無しさんNGNG
できます。
0658635NGNG
>>657さん
どうやったらできるのですか?
0659デフォルトの名無しさんNGNG
グループごとにセパレータで分けれこの野郎。
0660635NGNG
なるほど。どうもありがとうございます
0661652NGNG
ん?
AddButtonsだろうが、SetButtonStyleだろうが
ボタンのIDが同じだったら、チェックグループ
なんて動かないんじゃないの?
0662デフォルトの名無しさんNGNG
だからインデックス変えてるやん

> for(int i=0; i<5; i++){
> m_wndToolBar.SetButtonStyle(i, TBBS_CHECKGROUP);
> }
0663デフォルトの名無しさんNGNG
インデクスとIDは違う。
0664デフォルトの名無しさんNGNG
いや、だからー
> button[i].idCommand = m_wndToolBar.GetItemID(10);
はループでインデックス10のIDしか取ってない(=同じID)でしょ。
だから
> for(int i=0; i<5; i++){
> m_wndToolBar.SetButtonStyle(i, TBBS_CHECKGROUP);
> }
でインデックス変えてるから問題ないだろって言ってんの
0665デフォルトの名無しさんNGNG
>> button[i].idCommand = m_wndToolBar.GetItemID(10);
>はループでインデックス10のIDしか取ってない(=同じID)でしょ。
これが問題だっていってんの。
他のボタンいじったってしょうがないだろ。
0666デフォルトの名無しさんNGNG
だからその問題はコードを
> for(int i=0; i<5; i++){
> m_wndToolBar.SetButtonStyle(i, TBBS_CHECKGROUP);
> }
に変更することで解決したっての。
iの値は質問者がボタンに合わせて変えてるはずだろ。
だから>>656で「できました」って言ってんだろ。
0667デフォルトの名無しさんNGNG
SetButtonStyleはIDなんて変えないの。
だから、iの値をちゃんと設定したって直らないんだよ。

直るってんならソースみせてくれ。
0668デフォルトの名無しさんNGNG
IDなんて変える必要ないんだよ。
リソースエディタでボタン作ってそれぞれにユニークなIDつけて
それをグループ化するだけなんだから。
ソースはさっきから載せてるから実際やってくれ。
> for(int i=0; i<5; i++){
> m_wndToolBar.SetButtonStyle(i, TBBS_CHECKGROUP);
> }
0669デフォルトの名無しさんNGNG
だからそのソースのiは0からだと、違うボタンになるから
AddButtonsしたボタンをさすように変更するんだろ。

AddButtonsではIDを同じに設定してるんだから
直らないっていってんの。
0670デフォルトの名無しさんNGNG
おまえはわからんやつだな。
AddButtonsなんか使わないって言ってんだろ。
> //ここから追加
> TBBUTTON button[5];
> for(int i = 0 ; i < 5 ; i++){
> button[i].fsState = TBSTATE_ENABLED;
> button[i].fsStyle = TBSTYLE_CHECKGROUP;
> button[i].iBitmap = 0;
> button[i].idCommand = m_wndToolBar.GetItemID(10);
> button[i].iString = 0;
> }
> CToolBarCtrl &ToolBarCtrl = m_wndToolBar.GetToolBarCtrl();
> ToolBarCtrl.AddButtons(5,button);
> //ここまで
の部分を
> for(int i=0; i<5; i++){
> m_wndToolBar.SetButtonStyle(i, TBBS_CHECKGROUP);
> }
に変えるんだよ。
iの初期値は10か?それでi<15か?
さっきも言ったがこれらの値は質問者が
グループ化したいインデックスに直してコーディングしてるはずだろ。
0671デフォルトの名無しさんNGNG
>AddButtonsなんか使わないって言ってんだろ。
ハァ、話すりかえんなよ。
AddButtonsしたボタンをどうやってグループさせるかって
問題だろ。

リソースで追加してるならちゃんと動くに決まってる。
0672デフォルトの名無しさんNGNG
違う違う。質問の趣旨を把握できてないのはおまえ。
>>651をよく読め。
AddButtonsしなければならないなんてどこにも書いてない。
問題は「ラジオボタンのようにしたい」ってことだ。
AddButtonsは質問者がたまたま最初に使っただけ。
現に質問者が解決してるんだからAddButtonsなんて必要条件には入ってない。
0673デフォルトの名無しさんNGNG
>>651をよく読め。
良く読めば、問題はIDが同じってだけなんだよ。

暗黙のうちにリソースなんて持ち出して、SetButtonStyle
して解決するまでもないだろ。
0674デフォルトの名無しさんNGNG
あーそうだよ。IDが同じなのが問題だ。
でも質問者はSetButtonStyleの方法を選んでそれでできたんだとよ。
そんなもんどっちの方法を使うかなんて質問者の勝手だろ。
どうせコード量が少なくて済むとかそんな理由じゃねーの。
つーか解決してんのにどうしてその方法にこだわるのかが謎。
0675デフォルトの名無しさんNGNG
長生きしろよ
ぶぶぶ
0676651NGNG
すみません。私が至らないばっかりに。。。
> for(int i=0; i<5; i++){
> m_wndToolBar.SetButtonStyle(i, TBBS_CHECKGROUP);
> }
をやって、追加したボタンではなくindex=0〜4の元からあるボタンでラジオボタンになってることを
確認したんです・・。
ご両人には感謝してますので、お騒がせしました。
0677デフォルトの名無しさんNGNG
話が落ち着いたところで、質問いいかな?

Staticコントロールを派生させて
コントロール(クラス)一個作ったんですど
(これをCStaticXとします)

このクラスに MouseMoveやDown のハンドラ作っても
取れないんでしょうか?

Paintはとれていて意図した描画は行うのですが・・・

やっぱり親(ダイアログ)で処理しなくちゃ
駄目なんでしょうか?
0678デフォルトの名無しさんNGNG
サブクラス化(Win32)しる。
0679デフォルトの名無しさんNGNG
CPenを使って直線を書いたのですがスクロールしても場所が移動しません。
クライアント座標の同じ位置に再描画されて真っ黒になってしまいます。
普通にスクロールしたいのですが、どうしたらよいのでしょうか。

CSclollviewクラスを使っています。

わかるかたおられましたらよろしくおねがいします。
こんな感じで書いております。
CClientDC dc(this);
CPen pen, *pOldPen;
pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
pOldPen = dc.SelectObject(&pen);
dc.MoveTo(0, 20);
dc.LineTo(50,20);

dc.SelectObject(pOldPen);
pen.DeleteObject();
0680デフォルトの名無しさんNGNG
>>679
五郎や、そういうときにはOnDrawを使うのですよ。
0681デフォルトの名無しさんNGNG
返事ありがとうございます。
OnDrawの中に書いているのですが・・・・また違うのでしょうか??
表示はできています。
0682デフォルトの名無しさんNGNG
OnDrawにはPrepareDCされたpDCが与えられるんじゃなかったかな
0683デフォルトの名無しさんNGNG
おいおい問題点が違うぞ

スクロールされた座標とDCの座標は違うんだよ。
スクロール分足して座標を指定しろ。
0684デフォルトの名無しさんNGNG
>>683
おまえの方が問題点が違う。

OnDrawに

CPen pen, *pOldPen;
pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
pOldPen = pDC->SelectObject(&pen);
pDC->MoveTo(0, 20);
pDC->LineTo(50,20);
pDC->SelectObject(pOldPen);

と書くだけでできるが。
0685デフォルトの名無しさんNGNG
OnDraw()ではスクロールされた量だけずらして描画するようにして
スクロールが起きたらInvalidate(FALSE)とかやればいいと思うよ?

MFCってのはそう言うやり方をするのです。
0686デフォルトの名無しさんNGNG
大きなファイルをEDITに開きたいんですが。
どうすればうまくいくのでしょうか?
CreateWindow(
TEXT("EDIT") , NULL ,
WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |
ES_AUTOHSCROLL | ES_AUTOVSCROLL |
ES_LEFT | ES_MULTILINE ,
0 , 49 , 290, 70, hwnd , (HMENU)EDIT_ID1 ,
((LPCREATESTRUCT)(lp))->hInstance , NULL
);


0687デフォルトの名無しさんNGNG
EDITは64kバイトの制限があるよ。たしか。。
0688デフォルトの名無しさんNGNG
つーかまず何がうまくいかなかったのかくらい書けよ。。
0689686NGNG
>>687
そうなのそれ(64K)制限にぶち当たっているんです。
どうすればいいの?
0690デフォルトの名無しさんNGNG
リッチエディット!!
0691686NGNG
>>688
失礼しました。
うまく問題なく動いてるんですが。
VBのRichTextみたいに、大きなファイルも表示させたいんですけど、
64Kまでしか開かないので、どうするのかなと思いまして、
0692686NGNG
>>690
もしかして、それが答えですか?
0693デフォルトの名無しさんNGNG
なあ、もうVC使う意味ないだろ・・・
0694デフォルトの名無しさんNGNG
じゃあなにつかうんだよえ?
こたえてみろよ
いえねーだろ
そうだよな
おまえもVCつかってんだから
0695686NGNG
フリーコンパイラBCCだったりする。(w
0696デフォルトの名無しさんNGNG
スレ違いを自慢してるのですか?
0697デフォルトの名無しさんNGNG
>>695
もうアフォとしか言いようがないな
0698相談室2の941NGNG
検索サイトとかのURLエンコード(日本語が%21%5A%C2とかになるやつ)を
楽にやる方法ありませんか?
0699デフォルトの名無しさんNGNG
>>698
URLエンコードは、IE5以降が入っている環境ではUrlEscape()。IE4以前なら自前で。
その前に文字コードを変換する必要があるなら、適当な変換ライブラリを拾ってくる。
0700698NGNG
>>699
サンクスです。早速やってみます。
0701旅行者NGNG
>>692
95/98 はそれが限界。
NT系なら EM_SETLIMITTEXT でもっといっぱいOK。
という、95系の悲しい事実
0702いつでもどこでも名無しさんNGNG
すいません。どうしてもわからないので質問させてください。

CSplitterWnd を使って分割ウィンドウを作ったのですが、
分割したウィンドウそれぞれに異なった ツールバー を付けたいのです。

フレーム作成時( CFrameWndの派生クラス内の OnCreateClientメンバ )に
CSplitterWnd::CreateStaticして
CSplitterWnd::CreateView でヴューを作成後に
CToolBar::CreateEX 引数に CSplitterWnd::GetPane(0,0) とかして
いるのですが、
コンパイルは通り、動きはするのですが、
分割ウィンドウ内にはビューしか表示されず、目的のツールバーが表示されません。

どなたかご存知の方、宜しくお願いします。
0703デフォルトの名無しさんNGNG
素直にCToolBarCtrlを使う。
0704デフォルトの名無しさんNGNG
ダイアログに二つ以上のスピンボタン配置すると
おちるんですが、そういうものですか?
0705デフォルトの名無しさんNGNG
そういうものです
0706デフォルトの名無しさんNGNG
>>705
ヲイヲイ…
0707デフォルトの名無しさんNGNG
>>706
ぉぃぉぃ
0708デフォルトの名無しさんNGNG
>>707
はいい奴だ。
0709デフォルトの名無しさんNGNG
タブコントロールの文字の色は変更できますか?

0710デフォルトの名無しさんNGNG
できない
0711709NGNG
>710
サンクス。やっぱりそうっすか!ってレス速いよ(笑

ちなみにボタンの文字色はオーナードローでどうにかってことでOK?


つか、むやみに色換えるなってことか?
0712デフォルトの名無しさんNGNG
オーナードローすればー。
0713デフォルトの名無しさんNGNG
ツールバー上にEditBoxを作ったのですが、これに文字列をセットするには
どのタイミングでやればよいのでしょうか?
OnCreateでやっても実行するとエラーが出てしまいます。
0714デフォルトの名無しさんNGNG
>>711
>>710は嘘。タブコントロールはオーナードロー出来なかった気がするけど、
WM_CTLCOLOR系をいじれば変えられた気がする
0715709NGNG
>714
って〜ことは、サブクラス化しないと駄目ってことですか?
0716709NGNG
>715の発言は無し。勘違い。

>714
CTLCOLOR定数にタブ無いんだけど…
やっぱむりっぽい?
0717デフォルトの名無しさんNGNG
>>714
TCS_OWNERDRAWFIXED
>>713
OnCreateで自分自身に適当なメッセージをPost。
そのメッセージが届いたところで初期化する。
0718702NGNG
>>703
すばやいレス有難うございます。
お返事遅れて申し訳ありません。

さっそく試してみます。
0719713NGNG
>>717
ありがと。それでうまくいった。
0720デフォルトの名無しさんNGNG
あほな質問かもしれませんが
CString型の文字を16進コードに変換するにはどうすればいいですか?
sprintfみたいなことをしたいのですが
0721デフォルトの名無しさんNGNG
CString a = "ABCDFG";
CString b = CString().Format("%02x %02x %02x", str[0], str[1], str[2]);

CStringは普通の文字列ポインタと同じような読み出しができるようになっている。
ってお父さんに教わらなかったのか?

MSDNしっかり嫁。
入門本なんか読むなバカ。
0722720NGNG
>>721
おお〜すばらしいっすね
ありがとうございました。
確かに入門書ばかり読んでました
0723デフォルトの名無しさんNGNG
>>721
しっかり読めよ。
0724デフォルトの名無しさんNGNG
>721のaの意味がよく分からないのですが・・・
0725デフォルトの名無しさんNGNG
>>724
それよりFormatの使い方が・・・
多分説明用に書くときにミスったんだと思うが。
0726デフォルトの名無しさんNGNG
>721
神
0727デフォルトの名無しさんNGNG
>>724
CString に文字列リテラル (const char *) を代入できることを説明してるんでしょう。
0728デフォルトの名無しさんNGNG
それならこう説明したほうが・・・
CString a = _T("ABCDFG");
CString b;
b.Format(_T("%02x %02x %02x"), a[0], a[1], a[2]);
0729初心者NGNG
初めまして。初心者なのですが分からないことがあるのですが、
教えてもらえますか?スピンコントロール2個を連動させるという
設定をしようと思っているのですが、どうもうまくいきません。
合計の最大値が決まっていて最大値から片方のスピンの値をマイナスした
値がもう一方のスピンの最大値になる、という形を作りたいんです。
今のところ下記のようなコードを書いたのですが、なぜかエラーが・・・
どこか間違っている所などあったら教えてください。
BOOL CDialog2::OnInitDialog()
{
CSpinButtonCtrl* pSB1 = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);
CSpinButtonCtrl* pSB2 = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN2);
pSB1->SetRange(0,40);
pSB2->SetRange(0,40);
return FALSE;
}

void CDialog2::OnKillfocusEdit1()
{
max1 = GetDlgItemInt(IDC_EDIT1,NULL,FALSE);
mm_max2 = 40-max1;
pSB2 -> SetRange(0,mm_max2);//ここで問題が起きてるみたい・・
}
void CDialog2::OnKillfocusEdit2()
{
max2 = GetDlgItemInt(IDC_EDIT2,NULL,FALSE);
mm_max1 = 40-max2;
pSB1 -> SetRange(0,mm_max1);
}
長くなってしまってすいません・・・よろしくお願いします。
0730デフォルトの名無しさんNGNG
いつものことだけど、エラーってコンパイル時?実行時?
>pSB2->SetRange(0,mm_max2);//ここで問題が起きてるみたい・・
単に
CSpinButtonCtrl* pSB2 = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN2);
pSB2->SetRange(0,mm_max2);
にするってことじゃなくて?
0731初心者NGNG
実行時にエラーが出ます。コンパイルは普通に通ります。EDITから値を
取れているようだし、SetRangeの実行時になにやら問題があるようで・・
0732デフォルトの名無しさんNGNG
>>731
実際にそのコードを(max1などはint max1などとして)書いてやってみたけど
問題なくできたよ。
別の部分に原因があるか、それかリビルドしてみるとか。
0733デフォルトの名無しさんNGNG
>>729
俺はMFCをまったく触ったことないから、もしかしたらまるで見当はずれかもしれんけど。

>pSB1->SetRange(0,40);
>pSB2->SetRange(0,40);

ってことは、二つとも、範囲が0〜40なんだろ?
んで、

>合計の最大値が決まっていて最大値から片方のスピンの値をマイナスした
>値がもう一方のスピンの最大値になる、という形を作りたいんです。

ってことは、

>mm_max2 = 40-max1;

これは、80-max1が正しいんじゃないのか?
0734初心者NGNG
おお、そうですか・・・ありがとうございます!よかったぁ・・
悩み続けてここだけに20時間ほど付きっきりだった(笑)
他の部分をチェックしてみようと思います。ほんとうにありがとう。
0735初心者NGNG
>>733
えっと、どちらも合計の最大値が40で、一方のスピンが30まで行った場合
だったらもう一方がRangeを(0,10)にするという意味でした。分かりづら
かったかもしれないです。わざわざレスありがとうございました。
0736初心者NGNG
先ほどスピンの質問をした初心者です。ありがとうございました。
立て続けに質問で申し訳ありません・・・。
CPropertyPageの派生クラスCDialog1でpublicに宣言された
int m_radio;の値を返す関数Getm_radioの戻り値を

public:
int m_radio;
int CDialog1::Getm_radio();
//class CDialog1 : public CPropertyPageで宣言
__________________________
int CDialog1::Getm_radio()
{
return m_radio;
}

という関数を使って戻り値をCFrameWndの派生クラスCMainFrameから

void CMainFrame::OnOpenDialog()
{
int m_radio = CDialog1::Getm_radio();
//(以下略)

こんな感じで呼び出そうとコーディングしているのですが、
コンパイル時に"error C2352: 'CDialog1::Getm_radio' :
静的でないメンバ関数の中で呼び出しが正しくありません。"

と言うエラーが出てしまいます。あまりに初心者なので根本的に
何か大間違いをしている可能性があるような気がするのですが・・・
問題などありましたら教えてください。お願いします。
0737デフォルトの名無しさんNGNG
test
0738デフォルトの名無しさんNGNG
C++の勉強の勉強はやったんだけど、
どうやってWinのソフトウェアを作ればいいのか全然わからない。
Visual C++を使ってなんか作りたいんだけど、
どのように勉強したらいいでしょうか?
お勧め本とかホームページ教えてくれますか?
0739デフォルトの名無しさんNGNG
↑スレ間違えた。
0740デフォルトの名無しさんNGNG
>>736
public:
int m_radio;
//↓int CDialog1::Getm_radio();
int Getm_radio();

//class CDialog1 : public CPropertyPageで宣言
__________________________
int CDialog1::Getm_radio()
{
return m_radio;
}

という関数を使って戻り値をCFrameWndの派生クラスCMainFrameから

void CMainFrame::OnOpenDialog()
{
//↓int m_radio = CDialog1::Getm_radio();
CDialog1 dlg;
int m_radio = dlg.Getm_radio();
//(以下略)

俺ならこんな感じに書く
0741デフォルトの名無しさんNGNG
エディットボックスをクリックすると
ボックス内の文字列を選択するようにしたいのですがいい方法ありますか?
SetFocusメッセージでCEdit.SetSel(0,-1)をやってみましたが
だめみたいっす・・・クリックのメッセージないし・・
0742デフォルトの名無しさんNGNG
>>741
CEdit派生クラスのOnLButtonUpでSetSel(0,-1)
0743741NGNG
>>742
レスありがとうございます。
たすかりました。
0744sinNGNG
カレンダーコントロールで月の初めの方の日や最後の日をクリックすると
月が変わってしますがこれを出来ないようにする方法はありますか。
NewMonthメッセージで対応しようとしても月が変更されたことを取得できず
どうしていいのやら分かりません。
0745デフォルトの名無しさんNGNG
WINCORE.CPPに「C++オブジェクトを他のスレッドに渡すのは危険だ」とあるので、
ワーカースレッド作るときに CHogeWnd (:CWnd)の thisポインタを渡す代わりに、
this->m_hWnd を渡してやって、ワーカースレッド側で
 CHogeWnd* m_pHogeWnd = (CHogeWnd*)CWnd::FromHandle(hWnd)
とやって CHogeWndオブジェクトへのポインタを取得します。

ワーカスレッド内では「ずーっと」このポインタで CHogeWndのメンバを呼び出し
たりしています。これってもしかして危険? NG大将?

というのも、CHogeWndのメンバ変数に m_pHogeWnd->m_xxx とアクセスすると、
おかしな値になっているんです。テンポラリオブジェクトとか、パーマネント
オブジェクトとかその辺の絡みですか?
0746デフォルトの名無しさんNGNG
>>745
C++インスタンスとHWNDのマップはスレッドローカルなので、
>>CHogeWnd* m_pHogeWnd = (CHogeWnd*)CWnd::FromHandle(hWnd)
こんなことしても、インスタンスのポインタは取得できないと思うYO。
0747デフォルトの名無しさんNGNG
MFCのバイブルみたいな本教えて。
わたくし初心者本で一通り勉強したけどほとんど初心者です。
0748デフォルトの名無しさんNGNG
MFC internal
0749デフォルトの名無しさんNGNG
>>747
これ。
http://www.ascii.co.jp/books/detail/4-7561/4-7561-1749-X.html
基礎部分を網羅的に教えてくれる。
これ読んでから、ウイザード無しでも組めるようになった。
0750デフォルトの名無しさんNGNG
>749 ありがとうございます。
よさげな本なのにamazonで調べたら在庫がないよー。
探してみる。
0751745NGNG
>>746
なるほど。
じゃ、親(CHogeWnd)のメンバ変数にアクセスしようと思ったら、CHogeWnd の this ポインタを渡してやらないとだめだけど、それが危険だ(?)、ということですね。

//WINCORE.CPP には CWnd::FromHandle を使えというコメントが書かれているんで、それを使えば万事OKと思っていたんですが。

まぁ、今は親の HWNDにメッセージを送っていろいろやってます。
0752デフォルトの名無しさんNGNG
>>744
SetRange で選択できる範囲を制限すればいいんじゃない?
0753デフォルトの名無しさんNGNG
>>745
FromHandleで返ってくるポインタはDeleteTempMapで殺されるから、で正解?
以下、MSDNの CWnd::DeleteTempMap の解説。
「CWinApp オブジェクトの入力待ち処理から自動的に呼び出され、
 FromHandle メンバ関数で作成された一時的な CWnd オブジェクトを削除します」
0754 NGNG
終了させるときexit(0)で終了させたりしたらまずいですか?
0755超初心者NGNG
hello windowsをやりたくて、以下のプログラムを書きましたが、
エラーが出てしまいました。どうしても原因が分かりません。
スペルミスでないのなら原因を教えてもらえませんか?

プログラム:
#include <afxwin.h>

class CHelloWindow : public CFrameWnd
{
public:
CHelloWindow();
void OnPaint();
DECLARE_MASSAGE_MAP()
};

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

BEGIN_MASSAGE_MAP( CHelloWindow, CFrameWnd )
ON_WM_PAINT()
END_MESSAGE_MAP()

CHelloApp theApp;

CHelloWindow::CHelloWindow()
{
Create( NULL, "My Hello!!" );
}

void CHelloWindow::OnPaint()
{
CString s = "こんちわ WINDOWS!!";
CPaintDC dc( this );
CRect rect;
GetClientRect( rect );
dc.SetTextAlign( TA_BASELINE | TA_CENTER );
dc.TextOut( (rect.right / 2), (rect.bottom / 2), s );
}

BOOL CHelloApp::InitInstance()
{
m_pMainWnd = new CHelloWindow();
m_pMainWnd->ShowWindow( m_nCmdShow );
m_pMainWnd->UpdateWindow();
return TRUE;
}
0756超初心者 NGNG
エラーメッセエージ:
--------------------構成: hello_windows - Win32 Debug--------------------
コンパイル中...
hello_windows.cpp
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(9) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(18) : error C2065: 'OnPaint' : 定義されていない識別子です。
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(18) : error C2440: 'type cast' : 'int *' から 'void (__thiscall CWnd::*)(void)' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換が可能なコンテキストはありません。
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(18) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(18) : warning C4508: 'BEGIN_MASSAGE_MAP' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(18) : error C2143: 構文エラー : ';' が ',' の前に必要です。
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(19) : error C2143: 構文エラー : ';' が '{' の前に必要です。
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(19) : error C2447: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関数ヘッダーがありません。
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(19) : error C2143: 構文エラー : ';' が '}' の前に必要です。
cl.exe の実行エラー

hello_windows.obj - エラー 8、警告 1
0757デフォルトの名無しさんNGNG
デスクトップか…。
0758超初心者NGNG
フォルダ作るのめんどくさかったんです。
0759デフォルトの名無しさんNGNG
1.マクロ関数の行末にセミコロンが足りない。
2.void型なのにreturn;が無い。(この場合は不定なint値が返るのでエラー。)
なのか?
0760デフォルトの名無しさんNGNG
つーか俺も初心者なので良くわからん。
結局のところ試行錯誤だ!
0761デフォルトの名無しさんNGNG
>スペルミスでないのなら原因を教えてもらえませんか?
スペルミスですが何か?
0762デフォルトの名無しさんNGNG
>2.void型なのにreturn;が無い。(この場合は不定なint値が返るのでエラー。)

...
0763デフォルトの名無しさんNGNG
晒
0764デフォルトの名無しさんNGNG
スペルミスなんですね。どもです。
探してみます。
0765超初心者NGNG
すんまそん。どこのスペル間違ってるんですか?
わかりませんでした。
0766デフォルトの名無しさんNGNG
スペルミスまで丸投げかよ
0767デフォルトの名無しさんNGNG
> 2.void型なのにreturn;が無い。(この場合は不定なint値が返るのでエラー。)

・・・・・・・・・・・。
void *の間違いだろうか・・・・・
0768デフォルトの名無しさんNGNG
>>765
C:\Windows\デスクトップ\hello_windows\hello_windows.cpp(9) : error C2143: 構文エラー : ';' が '}' の前に必要です。
たとえば、
こういうエラーメッセージがあったら、hello_windows.cppってファイルの9行目に
エラーがあるってこと。
9行目とその前後をチェックしてみ。
0769デフォルトの名無しさんNGNG
スペルミス直したらプロジェクトの設定でリンクタブのプロジェクトオプションの
/subsystem:console を /subsystem:windows に直してビルドだ。
それで動いた。
初心者でも超でも丸投げはどんなもんよ。
0770デフォルトの名無しさんNGNG
そして永遠に綴り間違いには気付かないという罠。
MS-IMEのカタカナ語英語辞書を有効にしておけよ…。
0771初心者NGNG
見つかりました。DECLARE_MESSAGE_MAP()でしたね。
みなさまが優しくてほんと助かりました。ありがとうございます。
0772デフォルトの名無しさんNGNG
超が取れたことに一体何人が気付いているのだろう。
0773 NGNG
例えば、
CString b;
b.Format(_T("%02x %02x %02x"), a[0], a[1], a[2]);
のように_T は付けた方がいいんですか?
0774デフォルトの名無しさんNGNG
俺はつける。
他はしらん
0775デフォルトの名無しさんNGNG
>>773
UNICODEとMBCSで同じコード使いたかったらつけろ。
UNICODEにするつもりが無いならつけなくてもいいし。
0776デフォルトの名無しさんNGNG
質問です
 リストビューを表示する前に項目をあらかじめ選択させたいのですがどうしたらいいでしょうか?
 以下の2つの方法を試したのですがうまくいかないんです
 ・アイテムをInsertする前に
  InsertするLV_ITEM構造体のstateにLVIS_SELECTEDをセットする
setItem.state |= LVIS_SELECTED;
 ・int SetSelectionMark( int iIndex );を使用する

 どうしたらいいでしょうか?
 あと、CPropertySeatでウィンドウの下にあるヘルプのボタンを隠したいのですが
 m_psh.dwFlagsのPSH_HASHELPをオフにするにはどうしたらいいでしょうか?
0777デフォルトの名無しさんNGNG
>>776
CPropertySeat ってなんだ ?
0778デフォルトの名無しさんNGNG
オフにする?
m_psh.dwFlags &= ~PSH_HASHELP
か?
0779デフォルトの名無しさんNGNG
>>776
表示更新を停止した状態で作成して選択。
その後、更新する。

やり方忘れたんで、わかる奴書いてくれ
0780デフォルトの名無しさんNGNG
WM_SETREDRAWだな。
最初(アイテムを追加する前)にこれで更新停止しておいて、
追加後、選択。それからまたWM_SETREDRAW
0781デフォルトの名無しさんNGNG
MDIのプログラミングをしているのですが、VC++みたいに、ツールバーと
同様にツリービューや、エディットボックスを組み込むにはどうすればいいでしょうか?
0782デフォルトの名無しさんNGNG
たくさんあるチェックボックスを配列に代入(?)したいのですが
クラスウィザードのメンバ変数の追加でやろうとするとうまく行きません。
要は
while(i<20){
if(m_chk1[i]){...}
i++;
}
という感じでチェックボックスが
チェックされているか判定したいわけなんですが、どうしたもんでしょうか
0783デフォルトの名無しさんNGNG
ID配列を作ってループ、チェック状態を配列に格納しる。
0784デフォルトの名無しさんNGNG
>>728
なぜ for() 文使わんのかと小一時間...。i の初期化も忘れないように。
0785デフォルトの名無しさんNGNG
チェックボックスの IDを連番に(resource.h編集して)しておけば、
ID配列要らないから、いいかもね。
0786デフォルトの名無しさんNGNG
>>782
ウィザード使わずに自分でやれば?
0787デフォルトの名無しさんNGNG
ビットマップを読み込みコンパチなCDCを作成し、保持するクラスを作ったんですが、
このクラスのメンバCreate(CDC *pDC)にクライアントのDCポインタを渡したいのです。

これはアプリ起動時に一回しかCreateしません。こういうのは何処に持つべきでしょうか?
ドキュメントに持ったとしてCreate(CDC*pDC)を呼び出すタイミングって??
あとCDocumentやCWinAppやCMainFrameからViewクラスのオブジェクトってどうやって参照するんですか?
そもそもView派生クラスのオブジェクトって何処にあるの??
0788デフォルトの名無しさんNGNG
SDIアプリにツールバーを二つつけました。
この二つのツールバーの状態をファイルに保存/復元するには
どうすればよいのでしょうか?

SaveBarState/LoadBarStateではレジストリまたはプライベートiniに
保存することになるので、
CFile fileWrite;
if(fileWrite.Open(_T("state.ini"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite)){
CArchive ar(&fileWrite, CArchive::store);
CDockState state;
GetDockState(state);
ar.WriteObject(&state);
ar.Close();
fileWrite.Close();
}
などとして状態を保存してみたのですが、これを
CFile fileRead;
if(fileRead.Open(_T("state.ini"), CFile::modeRead)){
CArchive ar(&fileRead, CArchive::load);
CDockState* state = (CDockState*)(ar.ReadObject(RUNTIME_CLASS(CDockState)));
SetDockState(*state);
ar.Close();
fileRead.Close();
}
で復元すると二つのツールバーの位置が逆になってしまうのです。
0789782NGNG
>>783,>>784,>>785,>>786
レスありがとうです。
なんとか
CButton* m_chk[0]=(CButton*)GetDlgItem(IDC_CHECK1)
CButton* m_chk[1]=(CButton*)GetDlgItem(IDC_CHECK2)
:
:
でできましたが、ID配列てどうやるんでしょうか。
なんか便利そうなので良かったら教えてください。>>783
それとIDが連番なら配列的に使えるんですか?どのように?>>785
0790785じゃねーけどNGNG
>>789
> それとIDが連番なら配列的に使えるんですか?どのように?>>785
「どのように ?」と来たか、応用が利かない奴と見られてちょっと痛い
ぞ。

ID 配列作る時でも...

for(i = 0; i < ...; i++){
CButton* m_chk[i] = (CButton *)GetDlgItem(IDC_CHECK1 + i);
}

と書けるだろ ? ちょっとした操作だけなら、配列に入れる必要もないよ
な。
0791ひよこプログラマNGNG
Visual C++6.0でメーラを作ろうと思ってるんですが、
そこの表示部分にCHtmlViewを使って横着しようと考えて悩んでいます。
CHtmlViewのターゲットとなるURLは、リソースかファイルか、
あるいはネット上に存在しなければならないとありますが、
これを、「何か文字列を与えればそれをHTMLと解釈して表示してくれる」みたいな
使い方はできないものでしょうか?

今のところ、テンポラリファイルに一度書き出して
それをfile://で読み出しているのですが、
どうも格好が悪いものです。
なんとかなりませんかねぇ?
0792デフォルトの名無しさんNGNG
static int id_hairetu[] = {
IDC_CHECK1,
IDC_CHECK2,
IDC_CHECK3,
};

int i;
for (i = 0; i < sizeof(id_hairetu) / sizeof(id_hairetu[0]) ++i)
{
;
}

コントロールのIDをきちっと整列しておけばわざわざ配列を作らなくても
連番で処理できるってだけ。
コントロールも全部自分で作成してるなら、IDをそろえるのが楽。
共同作業とかでやってるなら、どんな変更が入るかもしれないから
ID配列みたいのをわざわざ作って確実に処理をする。

連番もいいけど、今まで見た中で最悪だった社内ライブラリ(藁)では
BOOL GetCheck(BOOL **fCheckTbl, int idStart, int idCnt);
みたいのあった。

ID連番にしなきゃいけねえだろばか
結果は結局配列で受け取るんだろばか
いちいち中でGlobalAllocすんなばか
なかんじ

くれぐれもこんなばかなのつくらんように。

Wizardの作ったコントロール名をそのまま使うのやめれ。

0793デフォルトの名無しさんNGNG
>>792
GetCheck() てーのは、何を返すんだろう ?
俺なら BOOL *GetCheck(int idStart, int idCnt); にするが...。
連番にするかは、プロジェクトのポリシーだと思うから、連番にすると決
めてあるなら、これでも良いとおもう。
結果を配列にするかどうかは、結果の使い方しだい。どれか一つでも
チェックされていたらとか、5 個以上チェックされていたらとかいろいろ
やるなら、とりあえず配列で返すのが良いとおもう。

要は、これだけ見て良いか悪いかは >>792 以外にはわからん。
0794789NGNG
>>790,>>792
レスサンクスです。勉強になるです。
0795788NGNG
レス付かなかったけど一応やりたいことはできたので書いておく。
二つのツールバーのそれぞれのCreateExの第5引数でIDを指定すると、
>>788のコードで保存/復元ができた。
もっと簡単な方法はないかな?
0796デフォルトの名無しさんNGNG
MFC勉強中なんですが
手書きでプログラム組めた方が良いのでしょうか?
0797デフォルトの名無しさんNGNG
>>796
普通手書きじゃない?
0798デフォルトの名無しさんNGNG
>>796
まず、
MFCで出来あがるアプリを見て、
それで満足するのならば、それを使え。
0799デフォルトの名無しさんNGNG
>>796
手書きでコーディングしても、結局はキーボードで打ち込まないとビルドできないから
最初からキーボードを使ったらいいんじゃないですか?
0800デフォルトの名無しさんNGNG
OCR...
0801デフォルトの名無しさんNGNG
ああもう、つまらんネタカキコはやめれ。
0802デフォルトの名無しさんNGNG
(´-`).。oO(MFC専用のコーディングシートってないのかなあ?)
0803デフォルトの名無しさんNGNG
>>802
なんだ MFC 専用ってのは ? C++ 専用って言うんだったらまだわかるが...。
0804787NGNG
CDocumentからViewを得る方法はありますか?
0805デフォルトの名無しさんNGNG
まただ。またこの質問だ。
俺は疲れている。
0806デフォルトの名無しさんNGNG
GetFirstViewPosition>GetNextView
0807デフォルトの名無しさんNGNG
Viewのオブジェクトは何処にあるのですか?
0808デフォルトの名無しさんNGNG
無論、メモリ上にあります。
ほかにどこにあると思うのですか?
0809デフォルトの名無しさんNGNG
>808
かわいそうに。知識が無くてそんなことしか書き込めないんですね。
0810デフォルトの名無しさんNGNG
スレ違いならともかくなぜ>805や>808のような書き込みをするのか?
0811デフォルトの名無しさんNGNG
>810
本当に理由が知りたいわけでもないのに、
そんな質問をするのと同じ理由からですよ。
 素直に、>>801というとか、あなたが的確な
答えをだしてあげればよろしかろうに。
0812デフォルトの名無しさんNGNG
>811
それはちがうな。スレと関係ないことを書くなって意味だよ。質問スレで
「その質問は飽きた」これを弁護して、>810を非難する神経ならスレから出てってくれ。
0813デフォルトの名無しさんNGNG
>>807=804=787か?
それだったら、GetNextViewで得たビューがViewオブジェクトだから、
目的の(CView派生)クラスにDYNAMIC_DOWNCASTをするべし。
0814デフォルトの名無しさんNGNG
>812
「張り紙するな」という張り紙のある壁を見た思いです。
0815デフォルトの名無しさんNGNG
>>814
たしかにそうだが、言いたい放題の奴より注意する奴が文句言われるのは何か違う
0816デフォルトの名無しさんNGNG
>814
張り紙するなと言う張り紙はしても問題ないよバカ
0817デフォルトの名無しさんNGNG
>>814
張り紙するなとラクガキしてください
0818デフォルトの名無しさんNGNG
MDIで、メニューの中に独自のものを足すじゃないですか。
そのときに、起動するとどうしても淡色表示になってしまいます。
あれを、なくすにはどうすればいいでしょうか。
0819デフォルトの名無しさんNGNG
>>818
その前に何が作りたいの?
「〜みたいなアプリケーションのウィンドウが作りたい」
っていった方が絶対わかると思われ。
例えば、
「フォトショップの横っちょに出るウィンドウみたいなのが
作りたいです。」
とか。
0820デフォルトの名無しさんNGNG
>>818
クラスウィザードなりで
そのメニューのハンドラ作れば
淡色表示じゃなくなる
0821デフォルトの名無しさんNGNG
>>819
それだとそのアプリ持ってない人にはわからないと思われ。
つーか>>818みたいな簡単な質問ならそんなこと聞かなくても(略
0822デフォルトの名無しさんNGNG
ファイルの説明を取得するにはどうしたらいいのでしょう?

前にどこかのHPで見たのですが・・・
検索しても見つかりませんでした。
0823デフォルトの名無しさんNGNG
CFile::GetStatusのこと?
0824デフォルトの名無しさんNGNG
>>823
違うんです。

例えば
拡張子がdocだとMicrosoft Word 文書とかです。
0825デフォルトの名無しさんNGNG
>>822
http://www.asia.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/vcug/_asug_overview.3a_.version_information_editor.htm
0826デフォルトの名無しさんNGNG
>>824
SHGetFileInfo
0827デフォルトの名無しさんNGNG
>>826
レスありがとうございます。

SHGetFileInfoを調べてみたのですがアイコンの取得しかありませんでした。
0828デフォルトの名無しさんNGNG
サンプルじゃなくてMSDN嫁
0829デフォルトの名無しさんNGNG
>>828
分かりました。

けど英語しかなっかた・・・
まあがんばってみます!
0830822=824=827=829NGNG
皆さんありがとうございました。
SHGetFileInfoで目的のことが出来ました。
0831デフォルトの名無しさんNGNG
dfsdfsdfsdfせgれgれgれgれgれgれgれgれgれgrっっっっっw
0832デフォルトの名無しさんNGNG
>>821
でもさ、MFCの一番最初にぶつかる壁に、
「まず、VC++のドッキングウィンドウや
フォトショップの小さいウィンドウやフラッシュの小さいウィンドウは
実はViewじゃなくてControlBarです。」
っていう最強の罠がはってあるジャン。
いまじゃ、みんなの共通の知識になってるみたいだけど
始めたばっかりのころはいろんなMFC関連の書籍をあさっても
全然のってなかったことに激怒したよ。
んでさ、見た目に複数のウィンドウがあるアプリをみると
MFC初心者の人達はMDIで作ろうとするんだけど上手くいかないし、
そもそもアプローチがまじぃっつーところから教えてほしいなと、
あの頃は思ったわけよ。でもいらんおせわだったらすまんこ。
0833デフォルトの名無しさんNGNG
age
0834デフォルトの名無しさんNGNG
ウィンドウを静的に、下の図のよう形で分割するには
どんな方法があるだろうか?

■■□□
■■回回
■■回回
○○回回
0835デフォルトの名無しさんNGNG
CHOCOAみたいな分割だな。


縦に二つ -> 左右を上下に分割
0836うとNGNG
あるモーダルダイアログで、ショートカットキーを定義したくて
ダイアログでPreTranslateMessageを継承して、WM_CHARで処理した
んですが、最初はちゃんと動くんですが、その内にWM_CHARがこなく
なってしまいます。
どうしたら良いのでしょうか、なんかが根本的に違うような気も
するんですが。なにかヒント欲しいです。
0837デフォルトの名無しさんNGNG
>>836
ショートカットキーの実現にはWM_CHARじゃなくてアクセラレータを使う
ダイアログでアクセラレータを使う場合は
PreTranslateMessageでTranslateAcceleratorを呼び出す
0838うとNGNG
>>837
ありがとうございます
調べに逝ってきますです
0839デフォルトの名無しさんNGNG
>>836
そもそもPreTranslateMessageにWM_CHARはこないのでは?
でも最初は動くんですか?
WM_CHARてのはTranslateMessageして生成されるもんだと
思ってたんですが、違う?
0840デフォルトの名無しさんNGNG
ラジオボタンにデフォルトでチェックを入れたいのですが、どうしたら良いでしょう?
0841デフォルトの名無しさんNGNG
>>840
SetCheck()
0842デフォルトの名無しさんNGNG
>>841できました。ありがとう。
0843sageNGNG
キホンでしょう。この位は本とかwebみようよ。
0844デフォルトの名無しさんNGNG
>843
うるさい。ばか
0845デフォルトの名無しさんNGNG
>>843-844
その位sageていこうよ。
0846デフォルトの名無しさんNGNG
.(DOT)の仮想キーコードってあるんですか??
0xBEみたいなんですけど、ヘッダにはありませんでした。
KeyPadの.ならVK_DECIMALがあるらしいですけど・・・
0847デフォルトの名無しさんNGNG
>846
VK_PERIOD
0848デフォルトの名無しさんNGNG
もともとドットは.じゃなくて・だし。
0849846NGNG
>>847
それ見当たらないですよ??
たしかVJ++ではVK_PERIODはあったような気がするんですけど・・・
WINUSER.Hでいいんですよね??
0850デフォルトの名無しさんNGNG
>>849
存在しないなら、決まってないと言うことだ。
たとえば、;の仮想キーコードも106/101で違ったはず。
その辺はキーボードドライバでWM_CHARに変換される
0851デフォルトの名無しさんNGNG
VK_Dとかは何ヘッダに書いてあるの・・?
0852デフォルトの名無しさんNGNG
>849 >851
#define VK_OEM_PERIOD 0xBE // '.' any country

WinUser.h の VK_ を define してるとこのコメント、ちゃんと読もうぜ。
0853デフォルトの名無しさんNGNG
>>852
あんたこそ嫁
OEMはインプリメントに依存する
0854デフォルトの名無しさんNGNG
つーか、MSDNにはVK_OEM_PERIODってWin2k限定って書いてあるぞ
0855デフォルトの名無しさんNGNG
>>846
ASCIIコードと同じヤツはヘッダに無いから
'.' か '>' のどっちかでよかったハズ
0856デフォルトの名無しさんNGNG
>>854
9xのDDKドキュメントにも「VK_OEM_PERIOD 0BEh」って書いてあるぞ。
0857856NGNG
WinUser.h でも #if(_WIN32_WINNT >= 0x0500) になってないし
0858デフォルトの名無しさんNGNG
最新の SDKじゃないと定義されてないっぽい < VK_OEM_PERIOD
0859デフォルトの名無しさんNGNG
ダイアログアプリでアイドルタイム処理をしたいのですが、
OnIdleをClassWizardで追加してもOnIdleが呼ばれてないようです。
(OnIdle内でTRACEして確認。)
どうすればアイドルタイム処理ができるのでしょうか。
0860デフォルトの名無しさんNGNG
メッセージループを自分でまわしてその中でOnIdle呼べば?
0861デフォルトの名無しさんNGNG
ADO扱った本や、
サイトありませんか?

ハマっちゃて・・・
0862デフォルトの名無しさんNGNG
>>859
MSDN で WM_KICKIDLE を検索すれば何か見つかるかも
0863デフォルトの名無しさんNGNG
WM_KICKIDLEハンドラで
UpdateDialogControls(this, TRUE);
とやってもON_UPDATE_COMMAND_UIがSDIアプリのように来ないんですよねぇ。
ダイアログアプリでもメニュー更新ハンドラで
pCmdUI->SetCheck(1);
のようにしたいだけなんですけど。
0864デフォルトの名無しさんNGNG
http://codeguru.earthweb.com/dialog/OnUpdate.shtml
0865デフォルトの名無しさんNGNG
>>864
それやるならWM_INITMENUPOPUPでいいんじゃないかってのと、
同じcodeguruのdialogカテゴリで言うならなぜ
ttp://codeguru.earthweb.com/dialog/dialog_updateui.shtml
の方法(>>863と同じ方法)ではできないのかと。
0866デフォルトの名無しさんNGNG
前者は無し、勘違い。
後者のttp://codeguru.earthweb.com/dialog/dialog_updateui.shtml
ができないのはなぜ?
0867デフォルトの名無しさんNGNG
あぁまたしても勘違い…
UpdateDialogControlsはコントロール向けか…
ぐだぐだになったけど要するに>>864で解決ってことで。
0868デフォルトの名無しさんNGNG
メモリの解放について質問します。
ボタンを押すごとに前に描いた線を消して、新しい線を描きたいのですが、
それを 200 回くらい繰り返すと途中でメモリが足りなくなってしまいます。
今は、背景と同じ色で塗りつぶしてから新しい線を描いています。
他によい方法があれば教えてください。
よろしくお願いします。
0869デフォルトの名無しさんNGNG
とりあえず、コードだせ。
0870デフォルトの名無しさんNGNG
400回ぐらいMoveTo LineToしても全然平気だけど。
penとかDCとかブラシとか開放わすれてません?
0871デフォルトの名無しさんNGNG
メモリの解放について質問って言ってるから開放の仕方がわからないのでは。
0872デフォルトの名無しさんNGNG
>>869 これがソースです。よろしくお願いします。

CDC* pDC;
pDC = GetDC();

CPen newPen;
CPen *pOldPen;

CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap MemBitmap;
MemBitmap.CreateCompatibleBitmap(pDC, 520, 200);

CBitmap *pMemBmp=MemDC.SelectObject(&MemBitmap);
MemDC.BitBlt(r_t_x, r_t_y, 520, 200, pDC, r_t_x, r_t_y, SRCAND);
MemDC.SelectObject(pMemBmp);

pDC->SelectStockObject(NULL_PEN);
pDC->Rectangle(rx, ry, lx, ly);
pDC->SelectStockObject(BLACK_PEN);

newPen.CreatePen(PS_DOT, 1, BLUE);
pOldPen=pDC->SelectObject(&newPen);

pDC->MoveTo(x_r_x, x_r_y);
pDC->LineTo(x_l_x, x_l_y);
pDC->MoveTo(y_t_x, y_t_y);
pDC->LineTo(y_u_x, y_u_y);

MemDC.SelectObject(&MemBitmap);
pDC->BitBlt(r_t_x, r_t_y, 500, 200, &MemDC, r_t_x, r_t_y, SRCAND);
MemDC.SelectObject(pMemBmp);

MemBitmap.DeleteObject();
MemDC.DeleteDC();

newPen.DeleteObject();

ReleaseDC(pDC);
0873デフォルトの名無しさんNGNG
pOldPenをSelectObjectし忘れ?
0874デフォルトの名無しさんNGNG
>>873
忘れてました…
できました。
ありがとうございます。
0875デフォルトの名無しさんNGNG
なんでGetDCしてんの?
0876デフォルトの名無しさんNGNG
AppWizard の SDI で作ってます。
適当なファイルを読んだ後にタイトルにファイル名を表示させたいのですが、
ドキュメントの Serialize の読込みの後、CDocument::SetTitle() では
違うのでしょうか? 変更されない……。

0877876NGNG
age よう。
0878876NGNG
age てなかった……
0879876NGNG
CMainFrame に OnUpdateFrameTitle を書いて、
SetWindowText するという方法で目的は達成できませした。

が、OnUpdateFrameTitle を MSDN で引いてみると COleClientItem の
メンバとなっているようなのですが、CMainFrame の親と COleClientItem って
何か関係あるんでしょうか?
0880デフォルトの名無しさんNGNG
>>879
CFrameWndのドキュメントが不完全なだけ。
ありがち。
(一応MFCのバージョンが変わったら、そこが変わってないかどうか
確認する必要がある)
0881デフォルトの名無しさんNGNG
既出かも知れないけど

複雑な図形上をマウスで押した際の判定に
CRgnとPtInRegionを使っているんだけど
Win2KではOKなのに、Win98、Meじゃだめでした。

直前にViewに対してFillRgnで描画を行っているんだけど
それはちゃんと表示されてます。

原因がつかめず、難儀してます。
お知恵を拝借
0882デフォルトの名無しさんNGNG
>>881
引数にPOINT構造体を渡してみたらどう?
0883デフォルトの名無しさんNGNG
ステータスバーの中にプログレスバーをつけたいのですが、
CStatusBarCtrlの中からCProgressCtrlをCreateすれば上手くいきます。

ただ、できればApp Wizardの作ったスケルトンを大幅に変えないで
実装したいのですが、どうするのがスマートでしょうか?

CStatasBarの派生クラス内からCProgressCtrlをCreateできればいいのですが
上手くいきません。

見当違いのことを書いているのかもしれませんが、その指摘も含めて
よろしくお願いします。
0884デフォルトの名無しさんNGNG
MFCでvectorとかlistのコンテナって
使えないんですか?
0885デフォルトの名無しさんNGNG
すんません
ヘッダーファイルをインクルードしたらでけますた
0886デフォルトの名無しさんNGNG
ダイアログ上のCEDit内でTabが全文選択になってしまってこまっています。
どう設定すればTab文字が入力出来ますか?
0887デフォルトの名無しさんNGNG
ダイアログベースのアプリで
シリアライズってどーやるんだ。。。。
0888デフォルトの名無しさんNGNG
あの、VCのようにMDIでも1つのプロジェクトしか実行できないものがあるじゃないですか。
この手のものは、MDIの子ウィンドウに複数の種類がありますでしょう?
ソース用のテキストだったり、コントロールデザイン用であったり…。
新規作成を押すと、そのあたりが全て初期化されますよね。
そのような、MDIのアプリケーションの複数の子ウィンドウの取り扱いはどのように
すればよいのでしょうか?
0889デフォルトの名無しさんNGNG
888
したいことがよく判らんが取りあえずこのあたりでも読んでみれば?
http://www.microsoft.com/JAPAN/developer/library/jpbkgnd/TechArt/VTools/vc/MFCFAQ.htm#mfcfaqdocs
0890デフォルトの名無しさんNGNG
>>888
Documentをツリー上にして出来たよ。
>>889
面白そうなので読もう、いまさらMFCとか言われそうだけど・・・
0891デフォルトの名無しさんNGNG
何をすればいいのか教えてください。
0892デフォルトの名無しさんNGNG
>>889
用は、VC++のようにMDIの子ウィンドウに複数の種類を持たせたいのです。
そして、それを取り扱いたいわけです。
0893デフォルトの名無しさんNGNG
DocTemplateを複数登録すれば?
0894887NGNG
すんません
シリアライズは実装したんですが、
実際にファイルのオープンや書き込みは
ダイアログベースではどの関数でやればよいのですか?
0895デフォルトの名無しさんNGNG
CFileDialog
0896887NGNG
ファイル名まで取得して、
その後なんですが・・・・ウウウ
0897デフォルトの名無しさんNGNG
フレームワーク使わないなら素直にfprinfとfscanf使おう
 �@CFileDialogからファイル名を取得
 �ACFileでオープン
 �BCArchive ar
 �CCxxDocと関連
 �DオブジェクトのSerialize ar<< CObjectxx
0898887NGNG
ありがとうござんすっ
0899デフォルトの名無しさんNGNG
っていうか.NETのこの時代にMFCを真剣に学んでる
奴等って....(゚д゚)ポカーン
まあ...時代の風に乗り遅れるなよとしか
言いようがないが....
0900デフォルトの名無しさんNGNG
>>899
.NETではドライバは書けません。
そう言うことです。
0901デフォルトの名無しさんNGNG
MFCだとドライバ書けるのかと聞きたい
0902デフォルトの名無しさんNGNG
>>901
.NETでCPLは書けません。
0903デフォルトの名無しさんNGNG
新しモノ好きなだけ〜
0904デフォルトの名無しさんNGNG
っていうかもはやMFCはクライアント
サイドで.netに取って代わられるんでしょ?
つまりMFCはデバドラでもしこしこ書いてろ
ということでよろしいか?
0905デフォルトの名無しさんNGNG
>>904
MFCはともかくネイティブコンパイラは残るでしょ。
取りあえず.NETを支えてるのがWin32である以上。
0906デフォルトの名無しさんNGNG
ngen=ネイティブコンパイラ?
だったら.NETでもいいと思われ
0907デフォルトの名無しさんNGNG
905
Win32が残る以上、皮一枚のMFCは残るでしょう
0908デフォルトの名無しさんNGNG
>>905
.NETのクラスライブラリは最終的には
Win32APIを呼び出しているということですか
0909デフォルトの名無しさんNGNG
>>908
そらそうでしょう。Widowsプログラミングとはそう言うものでしょう。
0910デフォルトの名無しさんNGNG
最終的にはBSDのシステムコールを呼び出す実装もあるようだが?
0911デフォルトの名無しさんNGNG
WindowsXPの浸透率≒.NETの浸透率
は成り立つか?
0912デフォルトの名無しさんNGNG
XPとNETは何の関係も無い。
0913デフォルトの名無しさんNGNG
.NETつかってみてーなぁ
0914デフォルトの名無しさんNGNG
とうとう900突破かぁ
0915デフォルトの名無しさんNGNG
CPropertySheetでDoModalして、処理が戻ってきたら
GetActiveIndex()を使ってアクティブだったpageのインデックスを
取得したいんだけど、なぜか0しか返ってこない。
SetActiveIndexなら、DoModal前に指定すればちゃんとそのpageが
アクティブになって表示されるのに。なぜ?
0916デフォルトの名無しさんNGNG
SetActiveIndexって何
0917デフォルトの名無しさんNGNG
すいません。
MDIでChildWindowにダイアログで設計したものを挿入することは出来ますでしょうか?
SDIでは出来るんですけども、MDIではどうにもなりません。ソースとして挿入できれば
便利かなと思います。
0918デフォルトの名無しさんNGNG
Θ_Θ ・・・
0919デフォルトの名無しさんNGNG
>>915
DoModalが終わった後ではすでにプロパテーシートが消えてるからじゃない。
0920デフォルトの名無しさんNGNG
プリンタへの印刷について質問です。
・途中で用紙サイズを変更することは可能でしょうか(同じスプールにです)
->Wordとかは出来るようなので可能かとも思うのですが
・各企業は自社プリンタ用の拡張機能の仕様を公開しているのでしょうか
0921デフォルトの名無しさんNGNG
>>919
かなぁ? じゃあどうやって取得したらいいんだろう。
ぐーぐってもヒット数は10件に満たない数だし。

それとSetActivePageだったね。Indexじゃなくて。
0922デフォルトの名無しさんNGNG
>>921
GetActivePageじゃ取れないんだね?

だったらプロパティシートのOnOKハンドラとかで
GetActivePageでもしてメンバ変数m_nIndexとか作って
その変数に入れておけばいい。それで
if(sheet.DoModal() == IDOK){
  int nIndex = sheet.m_nIndex;
}
とか。
0923デフォルトの名無しさんNGNG
COLORREF color;
CPaintDC dc(this); // 描画用のデバイス コンテキスト
// デスクトップを取る
CWnd* pwndDeskTop = GetDesktopWindow();
CDC* pDeskTopDC = pwndDeskTop->GetDC();
// 自分の領域にデスクトップからコピー
dc.BitBlt( 0,0, 200, 200, pDeskTopDC, 0, 0, SRCCOPY );
pwndDeskTop->ReleaseDC(pDeskTopDC);

これでデスクトップの画像を取得し,表示。
この後に、

for(j=0;j<yh;j++)
for(i=0;i<xw;i++){
color=pDC->GetPixel(x0+i,y0+j);
r=GetRValue(color);
g=GetGValue(color);
b=GetBValue(color);
c=(r+g+b)/3;
pDC->SetPixel(x1+i,y0+j,RGB(c,c,c));
}
のような操作で白黒化を試したのですが、
1度ワークスペースに描写してからGetPixelでは
無駄な処理(ワークスペース内に描写)があって効率が悪い気がします。

デスクトップ上から直接RGB値をとりこみ、メモリ上で処理(この場合は白黒化)、
その後にワークスペース内に描写させるにはどうすれば良いのでしょうか?
質問ばかりですいません。
0924デフォルトの名無しさん NGNG
age
0925デフォルトの名無しさんNGNG
>>922
CPropertySheetにはOnOKはないので、DestroyWindow時にメンバ変数に格納してみた。
で、DoModalから処理が戻ってきたときにそれを指定、で成功。蟻が父さんっ。
0926デフォルトの名無しさんNGNG
>>923
DIB
0927デフォルトの名無しさんNGNG
リストビューコントロールで、インストールシールドのダイアログ選択のように、
各リストにチェックボックスを表示するにはどうすればいいですか?
0928デフォルトの名無しさんNGNG
CListCtrl& list = GetListCtrl();
list.SetExtendedStyle(LVS_EX_CHECKBOXES);
のこと?
0929デフォルトの名無しさんNGNG
有難うございます。試してみます。
0930デフォルトの名無しさんNGNG
すいません。このチェックボックスにソースからチェックを入れたり、
チェックされているかどうか調べるにはどうすればいいですか?
0931デフォルトの名無しさんNGNG
TreeViewを使って、エクスプローラのようなものを作ろうと思ったのですが
最初に全フォルダを調べてViewに登録しようとすると、ありえないと思いますが
フォルダが数万とかあった場合に、マズイ気がします。
何か他にやり方はないものでしょうか?
0932デフォルトの名無しさんNGNG
途中で追加しる。
0933デフォルトの名無しさんNGNG
>>930
自己解決しました。
0934デフォルトの名無しさんNGNG
モーダルダイアログにWM_KICKIDLEメッセージハンドラを実装して
アイドル処理を行い、その経過をダイアログ上にプログレスバーで表示しています。
メッセージハンドラ内で処理が終了したらEndDialog()を呼びたいのですが
ASSERTにひっかかって落ちてしまいます。
どうしたらうまく処理を抜けるんでしょうか?
0935934NGNG
タイマーで監視して終了すればうまくいきました・・。
でもなんか納得イカン!!
0936931NGNG
>>932
やっぱりそれしかないですか。
でも結局、大量にフォルダがあるフォルダや下層に行くほどヤバくなってきそうですけど
回避方法は無いんですか?
0937デフォルトの名無しさんNGNG
>>934
処理が終わったらユーザ定義メッセージをポストするとか
0938デフォルトの名無しさんNGNG
>>936
IEの「お気に入り」みたく、開いてるフォルダ以外は全て閉じるとか。
つまりフォルダを開くときだけサブフォルダを走査する。

フォルダの階層って制限あったような気がするけどなぁ。
0939934NGNG
>>937
そんな方法が・・!
それでばっちり動きました。
そっちのがキレイなんでそうさせてもらいます。
ありがとうございました!
0940デフォルトの名無しさんNGNG
900も中盤にさしかかったので新スレです。

■ VisualC++(MFC限定)相談室 4■
http://pc.2ch.net/test/read.cgi/tech/1021620974/
0941デフォルトの名無しさんNGNG
 
0942デフォルトの名無しさんNGNG
■ VisualC++(MFC限定)相談室 4■
http://pc.2ch.net/test/read.cgi/tech/1021620974/
0943旧スレ埋めNGNG
■ VisualC++(MFC限定)相談室 4■
http://pc.2ch.net/test/read.cgi/tech/1021620974/
0944デフォルトの名無しさんNGNG
■ VisualC++(MFC限定)相談室 4■
http://pc.2ch.net/test/read.cgi/tech/1021620974/
レス数が900を超えています。1000を超えると表示できなくなるよ。