トップページ⇒tech
943コメント302KB

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001MFCNGNG
Managed Code?知らん!

前スレ ■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/test/read.cgi/tech/989902845/
0002956NGNG
>957
おお、立てやがった!?
でも話題とか特に無いんだよな〜
・・・質問できるまで消えないでね。
0003デフォルトの名無しさんNGNG
じゃあ質問。unixのmanコマンドは女性差別ですか?
0004デフォルトの名無しさんNGNG
とりあえず954の回答を待とうや
0005デフォルトの名無しさんNGNG
質問です。
ある一定時間だけループさせたい場合、やはりCTimeとか、CTimeSpanとかで
経過時間を利用しか無いですか?何かシンプルな方法があったら教えてください。

あと、wait(BASICにあった気がする)みたいなひたすら待つような命令って無いすかねぇ?
0006デフォルトの名無しさんNGNG
SetTimerとかSleepとか。
00075NGNG
>>6
ありがとうございます。

waitの変わりとしてSleepは使えそうです。
ところでSleepってシングルスレッドでも使えますよね?使う意味の有無は別として・・・
0008質問者NGNG
>EnableWindowでできますよ。
>ボタンに割り当てる画像(操作不能時)のリソースIDを
>"hogehogeX" にしてますよね?

からかわれてると思ったけど、いいヒントになりました。
いやー、さすがに2チャンネル風回答ですね。
0009デフォルトの名無しさんNGNG
>>7
できるけど、ウィンドウ持ってるスレッド眠らせると、
ユーザには凍ってるようにしか見えんぞ。
00105NGNG
>>9
OKです。凍らせます。
一応、ループ中にCPU占有度を下げる目的でやってみようかと思います。
0011デフォルトの名無しさんNGNG
>>8
普通に答えたんだけど……
0012デフォルトの名無しさんNGNG
フルカラーのビットマップをビットマップリソースとして
登録して、CTreeCtrlにくっつけて使ってるのですが、
16色になってしまいます。何がわるいのでしょうか?
0013デフォルトの名無しさんNGNG
>>12
オマエが悪い。
0014デフォルトの名無しさんNGNG
MFCでMD5みたいなハッシュ関数を使いたいのですが、
どうやればいいのでしょうか?
0015デフォルトの名無しさんNGNG
RTFの何番かに関数がありましたよ。
0016デフォルトの名無しさんNGNG
RTFって何?
0017デフォルトの名無しさんNGNG
>>16

Run Time Functions
0018デフォルトの名無しさんNGNG
>>16
Rich Text Format
0019デフォルトの名無しさんNGNG
RFCじゃった。
0020デフォルトの名無しさんNGNG
eの値を小数点以下100桁まで求めるプログラムと
πの値を小数点以下100桁まで求めるプログラムを教えてください。
0021デフォルトの名無しさんNGNG
マルチポストウザ氏ねヴォケ
0022デフォルトの名無しさんNGNG
質問です。
CStringの文字列をFormatなどでまとめて16進表記したいのですが
どうすればいいのでしょうか?やはり1バイトずつ%Xするしかないのでしょうか?
002322NGNG
レス無いので、勝手に不可能と断定しました。
ループまわして1文字ずつやっていきます。
0024デフォルトの名無しさんNGNG
エディットコントロール(CEdit)のキャレット位置の取得/設定って可能?
002524NGNG
下のようにして一応できたが、こうするしかないわけ?
(あ、エディットコントロールはシングルライン)

CEdit* m_edit;

UINT GetPos()
{
POINT point;
::GetCaretPos(&point);

return LOWORD(m_edit->CharFromPos(point) );
}

void SetPos(UINT pos)
{
POINT locate = m_edit->PosFromChar(pos);
::SetCaretPos(locate.x, locate.y);
}
0026デフォルトの名無しさんNGNG
>>24-25
GetSel / SetSel で出来なかったっけ?
0027デフォルトの名無しさんNGNG
ダイアログを使わずに、親ウィンドウ+子ウィンドウ×複数を
表示させて、エセチャットみたいなのを作りたいのですが、
イマイチよく分かりません。ヒントだけでも教えてもらえると
うれしいです。
SDIで作れば良いのは分かったけど、親ウィンドウから
子ウィンドウを呼び出す方法が分からない。
0028デフォルトの名無しさんNGNG
>>27 とりあえずどんなコード書いたか見せてみ。
0029デフォルトの名無しさんNGNG
割り込み質問で申し訳ないです。

CWndクラスのタイトルバーの部分のみのサイズ(上下)を取得するには
どうすればよいのでしょう?
デフォルトは18ピクセルだと思いますが、デスクトップのプロパティで
変わってしまいます。
0030デフォルトの名無しさんNGNG
>>29
int n = GetSystemMetrics(SM_CYCAPTION);
0031デフォルトの名無しさんNGNG
>>30
ありがとうございます。
0032色数を知るには?NGNG
Windowsプログラム実行時にシステムの表示可能色数の設定を調べる事はできるんでしょうか?
コントロールパネルの画面設定でやる256色とかHighColorとかTrueColorとかの現在の設定を知りたいんです。
スレ違いだったらゴメンなさい。
0033デフォルトの名無しさんNGNG
EnumDisplayDevices
EnumDisplaySettings
GetDeviceCaps
辺り
0034デフォルトの名無しさんNGNG
CDCのオブジェクトからDIBを取得するにはどうすればいいですか?
0035デフォルトの名無しさんNGNG
CDCってカメラ?
0036デフォルトの名無しさんNGNG
>>35
それは CCD。
0037デフォルトの名無しさんNGNG
ここのスレ役立ちますね
回答しておられるかたには、フリーでご活躍のプログラマーさんも
いらっしゃるのですか?
003834NGNG
自己解決しました。どうもです。
GetDIBits()を使うと出来ました。一応ログとしてかいとく

GetDIBits()にはパラメータは以下を与える。
・取得したいCDCのhDC(pDC->GetSafeHdc())
・そのDCのビットマップハンドル((HBITMAP)pdc->GetCurrentBitmap().m_hObject))?←ホントはもっと違うやり方をした。
・BITMAPINFO構造体(ここにサイズとかカラー情報をこちらで指定してやる。これがフォーマットを指定するという事らしい)

そして以下を受け取れる
・LPVOID型のlpvBitsにこちらが指定したカラー情報にあったフォーマットでデータがセットされる
・lpvBitsにNULLを指定した場合はBITMAPINFO構造体に値を入れてくれるらしい

そのあとは・・・
・このデータを加工したりしてあそぶ。

※フォーマットが24ビットでプレーン数1だとgrb、grb・・・と1ドットづつgrbの順で埋められるらしい。しかも上下逆?
003934NGNG
ごめん。grbじゃなくてbgrの順だった

ところでなんかさぁ・・・MFCでもSDKでも何を渡して何を得られるのかいまいち判りづらくない?
MSDNってそういうことちゃんと書いてないよね。
HBITMAPとかCBitmap::m_hObjectとかさぁ、なんかたくさんあるけどどれとどれが同じだとかサパーリわからんよ。
0040デフォルトの名無しさんNGNG
>>38
上下ひっくり返るのはDIBの特徴ですな。
ファイル形式とか解説した本とかによく載ってる。
Bitmap周りに関しては、MSDNの記述がどうこうよりも、
地道に弄り回してknow how得るくらいしか手はない、
と個人的には思う。

参考になる所としては、
http://www.sm.rim.or.jp/~shishido/windows.html
とかは個人的にお勧め。
0041デフォルトの名無しさんNGNG
>>40
トップダウンのDIBも(今は?)作れるでしょ。
アクセス速度的にはトップダウンのほうが有利だとかどこかで見たような
気がするけど実際どうなんだろう?
どうでもいいけど全然MFCの話題じゃないな(w
0042デフォルトの名無しさんNGNG
>>41
BITMAPINFOHEADERのbiHeightを負にするとトップダウンになるね。
気にしてなかったから、いつからできるようになったのかは知らんけど。

# そういやその昔、WinGインストール時に、
# トップダウン有利かボトムダウン有利か、
# 実際に描画してベンチマークしてる節があったっけ。

>どうでもいいけど全然MFCの話題じゃないな(w
そうだね(w
でもまあ、CBitmap使うにしても必要な事項ではあるということでsage。
0043デフォルトの名無しさんNGNG
あるフォルダ/ファイルに対して現在ログオンしているユーザに
書き込み権限があるかどうかを判断するにはどうすればよいでしょうか。
0044デフォルトの名無しさんNGNG
実際に何か書いてみるとか。
0045デフォルトの名無しさんNGNG
ツリーコントロールに表示するビットマップが16色になってしまいます。
256色とか使えるようにするにはどうしたらいいでしょうか?
004643NGNG
>>44
便利なAPIとか無いかなーなんて。
とりあえず書こう…
0047デフォルトの名無しさんNGNG
このスレ便利ですね
0048デフォルトの名無しさんNGNG
MFCのCProgressCtrlを使って自作ツールに
データを読み込んでいる間、プログレスバーを表示させ、
データ読み込み時間に応じてプログレスバーの位置を
変化させる機能を実装させたいと思ってます。
一般的なアプリケーションで行っているあの機能です。

CProgressCtrlのサンプルはいくつかネットで探したのですが,
プログレスバーの位置をデータ読み込み時間に応じて
変化させるという方法がわかりません。

上記の件についてご存知の方いれば,
教えてもらえると助かります。よろしくお願いします。
0049デフォルトの名無しさんNGNG
>48
なんで進捗率じゃなくて読み込み時間に応じて変化させる
必要があるのかは知らんが、やりたいんなら時間毎にプログレス
バーを更新させればいいだけだろ。
0050デフォルトの名無しさんNGNG
初めまして。
さっそくですが、質問を。

先日めちゃイケを見ていて、(浜口イイ!)
果たして、俺は一日にどれだけマウス(ポインタ)を移動させているのか?
気になりました。

タイマーを利用したのは作成できました。
しかし、移動していないのにGetCursorPos()を使って現在位置を得るのは、
いささか間抜けです。

ダイアログ外でのマウスの位置を「マウスの移動」によって、
ゲットしたいです。いい案を乞います。
0051デフォルトの名無しさんNGNG
>50

キャプチャーすれば?
フックすれば?
0052デフォルトの名無しさんNGNG
MFCの入門書をいくつか読みました。
だいたい基礎的なことはOKになったので、MFCのテクニック的
なこととか、ネットワーク回りについて勉強したいと思ってい
ます。そうした場合のお勧めの本って何かありますか?
0053デフォルトの名無しさんNGNG
どいつもこいつもレベル低いな。
MFCのソースついてるんだから解析して理解しろ。
0054デフォルトの名無しさんNGNG
>>52
推薦書籍はスレ違い
0055デフォルトの名無しさんNGNG
>>53
あるクラス(例えば、CButton)のソースを検索するにはどうしたら
よいのですか?
実際のヘッダですら、afx〜〜.hなどで定義されているし、規則性が・・
0056デフォルトの名無しさんNGNG
>>55
"CButton" でgrepすればよかろ。
0057デフォルトの名無しさんNGNG
ここって、前はもっとレベル高い人がいたのに、
今じゃ簡単な質問にもまともなレスがないね・・・
0058デフォルトの名無しさんNGNG
けっこう人へったんじゃねーか?
0059デフォルトの名無しさんNGNG
>>55
デバッガでトレースすれ。
0060デフォルトの名無しさんNGNG
>>59
アフォ?
0061デフォルトの名無しさんNGNG
>>57
あんたみたいなのがいるからな(w
0062デフォルトの名無しさんNGNG
CHtmlViewクラスにページを表示する時はNavigate2関数を使用
すればいいというのは分かったのですが、この方法だとファイル
かwebの情報だけしか表示できません。

プログラム中で処理されたHTML等を直接表示するには一度ファイル
に書き出し、Navigate2関数で呼び出す方法しかないのでしょうか?

CString型のクラスに入っているHTMLのテキストを直接表示させる
方法等があれば教えてください。

よろしくお願いします。
0063デフォルトの名無しさんNGNG
msdnを探せば確かあるはず。
about:blankがキーワードだ(不確か)
0064デフォルトの名無しさんNGNG
>62

COMを勉強しろ。
IEがどのようにしてできているかがわかる。
COMを直接いじればIEは自由自在に操れる。
0065デフォルトの名無しさんNGNG
IHTMLDocument だっけ?
ただ、62 のスキルではちょっと難しいかもね。
006662NGNG
>>64
COMを勉強している時間があまりないので、、、
何かサンプルがあったら教えてほしいのですが、、、
0067デフォルトの名無しさんNGNG
>>66

たかが2chごときで真剣に教えてもらおうとするな。
0068デフォルトの名無しさんNGNG
COBOLやJAVAに、難しい知識は不要です。
0069デフォルトの名無しさんNGNG
>>66
> COMを勉強している時間があまりないので、、、
だったら金払ってプロのプログラマに頼め。
0070デフォルトの名無しさんNGNG
68 が何を言っているのかがわからん
007148NGNG
>なんで進捗率じゃなくて読み込み時間に応じて変化させる
>必要があるのかは知らんが...
CProgressCtrlで進捗度(データを読み込んでる進捗度)
 を反映させる方法が知りたいです。
 説明不足でした。よろしくお願いします。ぺこりん。
0072デフォルトの名無しさんNGNG
>>71

SetPos じゃだめなのか?
0073デフォルトの名無しさんNGNG
>62
IE使ってる2chブラウザのソースでも眺めれば〜
大抵ソースはでるはいだけどな(ワラ
007462NGNG
>>73
デルファイはよくわからないのです。。。
しょうがないので、一度ファイルに出力してやるようにします。
トホホ、、、
007548NGNG
>SetPos じゃだめなのか?
 SetPosでプログレスバーの位置を指定できるのは
 分かるのですが,進捗度(データ読み込みの)を
 取得する方法がわからないです。よろしければ
 教えて下さい。
0076デフォルトの名無しさんNGNG
おもしろレスが思いつかないので放置
0077デフォルトの名無しさんNGNG
マジレスしてやれよ・・・
0078デフォルトの名無しさんNGNG
進捗度が‰だとするなら、1000*read_length/total_lengthでわかるだろ。
あとは、SetRange(0,1000)しといて、SetPos( Permil )で
いけるんやないのか。

あー、しかし、「読み込み時間に応じて」いうのが引っかかるな。
いつ終わるか、いうんは、予測するしかないわけで、read_speedを
ひっぱってきて、(1000*read_time/(total_length/read_speed))でも
使おういう話なんか?
0079ネット初心者再びNGNG
また達人達に質問します、、

いまCSocketを使ったクライアントとサーバー作って、ファイル転送機能つきチャット作ってますが、
クライアントがログインする時に自分のデータ(名前などいろいろ 約5行)を送りますが、
sendで送ってったら、 相手のほうが受信する時、それを同時に受信してしまった(分かりにくくてすみません
{詳しい説明:
例えば、サーバーはクライアントがログインした直後、sendは別々に、4回送った()
1回目 /server xxxxxx
2回目 /name xxxxxx
3回目 /otheruser xxxxxx xxxx xxxx
4回目 /tekitou xxxx xxxx
んでクライアント側がなぜか
"/server xxxxxx /name xxxxxx/otheruser xxxxxx xxxx xxxx/tekitou xxxx xxxx"
と言う風に、全部一気に受け取った。 これじゃコマンドの解析が不可能になるからかなり困る、、
}
CSocketはブロッキングとかいう機能で、送った後相手が受け取らない限り返ってこないと言う風に
見えたが、勘違いしたのかな?
そして、なにか妙案あればぜひ伝授していただきたい、お願します。
#コマンド受け取ったあと返事して、また送ればいいが、多少面倒なので、、、
0080ネット初心者再びNGNG
質問するだけでちょっと悪いかなーと思ったので笑える話ひとつ。
さっきの質問の奴、6時間以上も詰まってやっと気付いた。どうだ、こんな笑えるアホなかなか居ないだろう。
0081ネット初心者再びNGNG
あ、、眠いから何かいてるかわけわからない、、、
ローカルだとどうやらマシン早いのかなんかの理由で、全部別々に受信してくれるから正常に動く、でも
ノート(セレロン650)だと4回のコマンドが2回にまとめられる。ネットになると、全部で一行。ネットむずかしいねー
ムキになって虫取ろうと頑張ったがもう限界、、、お休み、、
0082デフォルトの名無しさんNGNG
(゚Д゚)ハァ?つか、ネットワークについて、理解が不足しているな。
sendや、その下のTCP/IPスタック、OSがどういう風にpacketを飛ばすかは、
あんたの自由にはならないの。どうしても自由にしたかったら、UDP使えば〜。

普通は、デリミタをつけるとか、メッセージ長をつけるとかするけどな〜

>CSocketはブロッキングとかいう機能で、送った後相手が受け取らない
>限り返ってこないと言う風に 見えたが、勘違いしたのかな?
OS・ドライバ・プロトコルスタックのバッファはどうなる。
0083ネット初心者再びNGNG
ふむ、、 つまり、CSocketは相手が受け取らないと帰ってこないのはそうだが、ハードウェアやOSが
受け取ってバファに入れるからソケットが受け取る時は一緒になると言うことですね?
ちゃんと考えれば分かるのにおれの馬鹿(ToT) レスありがとうございました。
0084ネット初心者再びNGNG
えーと、メッセージ処理全部直してうまく動くようになったが、不可解な現象が起きてます、、
デバッグビルドでは正常に動くプログラムが、リリースビルドでは凍って動かない。リリースなのでなんで落ちたか分からないし、、
しかも、VCの中で実行ボタン押して実行すると、正常に動く。
わけわからない質問ですが、このような症状起きた場合まず何見ればいいでしょうか?
0085・・・NGNG
>>83
本当に分かったのか?端からみてても訳わかんないぞ。
CSocketっていうか、ストリーム転送してるだろ?レコード境界がないってMSDNに書いてなかったか?
もう対策が分かったならいいが。
0086デフォルトの名無しさんNGNG
自分の能力の限界をわきまえて、debug版で配布すれば〜。
凍ったところで、VCでプロセスアタッチして、機械語の中を
はいずり回れば〜。
リリース版にデバッグ情報でも混ぜ込めば〜。
0087デフォルトの名無しさんNGNG
CSplitterwndでCEditを1stペインにすると、X軸のスクロールバー
がなくなる。MSDNでもおかしくなるからやめとけみたいなことが書いてあるのですが、
そこをナントカうまくやる方法ないですかね?要はスクロールバーがほしいのですが・・
0088いっぱいいっぱいNGNG
mafxcrd.lib : ライブラリが見つかりません
というエラーメッセージが出てしまうのですが、どうすればなおるのか
わかりません、どなたかご教授くださいお願いします。
008987NGNG
・・・・。
解決しました。しかも結構あっさりと。
かなりはずかしいので、とりあえず消えときます。
009087NGNG
消えとくと書いといてナンですが、訂正(いまさら)
誤)CSplitterwndでCEdit
↓
正)CSplitterWndでCEditView

失礼しました。今度こそ消えます。
0091デフォルトの名無しさんNGNG
>>88
まずは検索。
0092デフォルトの名無しさんNGNG
>>86
デバッグ版は配布しちゃいかんよ
0093デフォルトの名無しさんNGNG
配布禁止なのは、デバッグ版DLL(MSVCRTD.dll等)だけなんじゃ
なかったっけ?
0094デフォルトの名無しさんNGNG
そうだけどそれないと動かないし
0095デフォルトの名無しさんNGNG
スタティックリンクすれば?
0096デフォルトの名無しさんNGNG
素のWin98はmsvcrt.dllをシステムディレクトリから読むようですが、
カレントディレクトリにあるdllを使うようにはできんでしょうか。
Second Editionからなら.local等で何とかなることはわかったんですが。
0097デフォルトの名無しさんNGNG
>>95
それで配布していいの?
つーかそんなでかいのDLしたくない(;´Д`)
0098デフォルトの名無しさんNGNG
再頒布可能なDLLをアプリケーションに取り込むことはできないのですか?
MFCスタティックリンクみたく。
0099デフォルトの名無しさんNGNG
>97
でるはいのソフトつかったことない?
それに、サイズなんて圧縮すりゃそんなにかわらないよ。
0100デフォルトの名無しさんNGNG
>>99
なぜでるはい?
010132NGNG
33番の名無しさんありがとうございました。
おかげさまでうまい事できました。
0102デフォルトの名無しさんNGNG
>>98
見た目の誤魔化しでよけりゃあ、あるよ。
0103デフォルトの名無しさんNGNG
>>102
どんな?
0104デフォルトの名無しさんNGNG
CViewのメンバ、OnUpdate(protected)をpublicにしちゃった者です。
なんか弊害ありますかね?
0105105NGNG
簡単なことで恐縮ですが、
ダイアログでエディタボックスを使ってデータ結果を表示したいのですが
どういう風にプログラムを作ればいいのかわかりません。
どうすればいいのでしょうか?
0106デフォルトの名無しさんNGNG
>>105
猫にも劣るヤツ
0107デフォルトの名無しさんNGNG
>>105 いいから入門書一冊買え。
ダイアログとエディットボックスが表示できるようになってからまた来い。
0108デフォルトの名無しさんNGNG
Bitmapを読み込むときにHBITMAPとかいろいろ使うじゃないですか。
それを、最終的にはCBitmapクラスに格納したいんですけど、
方法知っておられますか?
0109デフォルトの名無しさんNGNG
>>108
CBitmap だけでなく、基本クラスのメンバを見てみ。
0110ネット初心者エピソード1NGNG
>84 の問題でいろいろいじって、エラー処理して、無限ループなども注意してやっても、やっぱりだめ。
とりあえずおかしいことに、VCの中で実行ボタンを押すと正常に実行できるが直接そのファイルを実行すると
無限ループ突入。VCのなかの実行ボタンは実行する以外なにか特別な処理でもしてるのでしょうか?
卒研だからべつに人前で実行できればいいからリリースにしなくてもいいが、どうしてもきになるので、、、
0111デフォルトの名無しさんNGNG
>110
無限ループ中にプロセスアタッチしてみろ。
0112ネット初心者エピソード1NGNG
すみません、プロセス アタッチはなんでしょうか、、、?検索してもわからない、、(汗
凍ってCPU100%になるが落ちないのでわけわかめ。
0113デフォルトの名無しさんNGNG
>>105
ダイアログクラスに、EditBoxに対応するCEdit型のメンバを追加して、
そのメンバを経由してアクセスすればいいよ。かんたんかんたん。

ところで、なんで簡単なことだって知ってるのかしらん?
0114デフォルトの名無しさんNGNG
>112
VCなら、ビルド->デバッグの開始->プロセスへアタッチ。
0115ネット初心者エピソード1NGNG
>114
VCの中の実行ボタンだと正常に実行されるから困る、、、ま、いいか。放置(;´Д`)
0116デフォルトの名無しさんNGNG
だからー。プロセスへアタッチは、VCで実行してない
プロセスを取り込む、って事。
ふつーにプログラムを実行して、�dだところで、
VCを立ち上げ、プロセスへアタッチするの。
0117デフォルトの名無しさんNGNG
>>102はどこ逝った?
俺も興味あるんだけどな〜。
0118デフォルトの名無しさんNGNG
あれだろ。リソースなんかに埋め込んで、実行時にテンポラリファイルに
書き出して、LoadLibraryする、っていう方法じゃないのか?
最近だと、かちゅ〜しゃプラグインのkage.exeあたりが使ってるな。
(あれはあれで、実行時メモリ書き換え&スタック実行なんかが
混ざってて、結構おもしろい。)
0119デフォルトの名無しさんNGNG
>>118
なるほど・・・確かにごまかしだな。
まあ、アーカイブを展開したときに余計なDLLを見せないっていう
利点にはなるけど。
0120デフォルトの名無しさんNGNG
ListViewに表示されているリストの内容を取得するという
部分を作っているのですが、リストの内容の取得方法が分からず
難儀しています。

void CxxxView::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
 HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
 // TODO: この位置にコントロール通知ハンドラ用の〜〜
 CListCtrl& List = GetListCtrl();
 CxxxDoc *pDoc = GetDocument();
 LVITEM itm;
 List.GetItem(&itm);
 Doc->CSName = List.GetItemText(itm.iItem,0); //CString CSName

 最初の内、このようなやり方で取得できるだろうと思っていたのですが、
ListCtrl::GetItem() では LVITEM の行位置(iItem)のパラメータを変更
しない事に気づき、いろいろ手段を探してみたのですが詰まってしまいました。
 ListCtrlで行位置を取得する手段について、教えていただけませんでしょうか?
0121デフォルトの名無しさんNGNG
>>120
リスト中のどのアイテムを取得したいのかよくわからないのだけれど、
現在フォーカスがあるアイテムのインデックスなら
List.GetNextItem(-1, LVNI_FOCUSED)
で取得できると思う。選択されているアイテムを全部取得するなら
nFlagsにLVNI_SELECTEDを指定してループ。

GetItemでアイテムの属性を得るには、LVITEMのmask, iItem, iSubItemに
あらかじめ値を設定する必要がある。テキストを取得したいなら、さらに
文字列取得用の領域を用意しておいてpszTextとcchTextMaxもセット。
0122デフォルトの名無しさんNGNG
BITMAPを貼り付けた CStaticに、EnableWindow(FALSE) しても、
淡色表示にならないんですが。
何で、ならないんだろう? そんな仕様、無いですよね?
0123122NGNG
ちなみに、IsWindowEnableではちゃんと FALSEが返ってきます。
 EnableWindow(FALSE);
 UpdateWindow();
でも駄目。
試しに、リソースのプロパティで「無効」にチェックを入れても淡色表示にならないし。

もともとそういう仕様? それとも環境依存?
0124デフォルトの名無しさんNGNG
>>122
自動的に淡色表示にはならんだろ。
オーナードローにして自分で淡色描画すれ。
0125デフォルトの名無しさんNGNG
困ってます。
TIFFファイルをCStaticに表示させたいのですが
さっぱりわかりません。
どなたか教えてもらえませんでしょうか?
0126デフォルトの名無しさんNGNG
Textout よりも printf
0127デフォルトの名無しさんNGNG
本や、Web上のHowToページをみながら
VC++6.0+MFCでモードレスダイアログを作って、表示してるんですが、
このモードレスダイアログが表示されてる間、親ウィンドウが
アクティブになっても前に出てこないのですが、どうすればこの
モードレスダイアログが後ろに行くんでしょうか?
ダイアログウィンドウの属性を変えるのでしょうか?

ちなみに、親からはこう呼んでます。

(CDialog*)pDlg->Create( IDD_DIALOG1 );
//IDD_DIALOG1はダイアログのリソースID
0128デフォルトの名無しさんNGNG
>>127
親ウィンドウのアクティベーションを引っかけてダイアログの属性を変える。
が、そんなクソUIのアプリなんか使いたくねえけどな。
0129デフォルトの名無しさんNGNG
ミ田+Mとかでデスクトップ見ようとすると、
忘れ去れたモードレスダイアログが出てきたり。
0130デフォルトの名無しさんNGNG
問) "hogehoge,hoge"という文字列をhogehogeとhogeに分けたい。
次の例文をお願いだから簡略化してください。
例文)
CString hoge==("hogege,hoge");
CString hoge2=hoge.SpanExcluding(",");
hoge.Delete(0,hoge2.GetLength()+1);

ASSERT(hoge=="hoge");
ASSERT(hoge=="hogege");
0131デフォルトの名無しさんNGNG
>>130
簡略化?
0132130NGNG
>>131
SpanExcluding(),Delete(),GetLength()といった感じで、
ちょっとストレートじゃないので。
0133デフォルトの名無しさんNGNG
>>132
i=hoge.Find(',');
hoge2=hoge.Mid(i+1);
hoge=hoge.Left(i);

じゃダメ?
0134130NGNG
なんか、一応strtokとかでスパッといきそうですが・・・・。
CStringには無いのかー!?
0135130NGNG
>>133
すいません。気が付きませんでした。
参考にさせていただきます。
0136デフォルトの名無しさんNGNG
仕事以外でVC++つかうとき、
どんなものをつくっているか
教えてくれぃ
0137120NGNG
>>121
 出来ました!どうもありがとうございます!
0138127NGNG
>>128
くそUIでしょうか・・・。

では、どういったUIが望ましいのでしょうか?
わからなくなってしまいました。

「ダイアログ上のなんらかの情報を見ながら
メインウィンドウの入力をしていく」というUIを
持つアプリを、よく見かけるような気がしていて、
似たような事をやりたいのですが、
これは、モーダルダイアログではないんでしょうか?

また、「親ウィンドウのアクティベーションを引っ掛けて属性を変える」
との事ですが、まず、親ウィンドウのイベントの引っ掛け方が
よくわかりません。
教えていただけますか?

あと、属性を変えるのは親ウィンドウと、ダイアログのどちらでしょうか?
属性とはウィンドウスタイルフラグで良いのですか?

レベルが低すぎるのであれば、初心者コーナーを教えていただければ幸いです。

質問ばかりで申し訳ないですが、よろしくお願いします。


0139デフォルトの名無しさんNGNG
クーパーは、モードレスダイアログはインターフェースとして最悪で、
ツールバーが取って代わるべき、みたいなことを言ってたな。
0140デフォルトの名無しさんNGNG
>>138
>レベルが低すぎるのであれば、初心者コーナーを教えていただければ幸いです。

それすら自分で探せないのか?
0141デフォルトの名無しさんNGNG
>>139
最悪はモーダルダイアログだと思うんだけどなぁ。
0142デフォルトの名無しさんNGNG
>>138が実現したいことって、要するにヘルプのような気が。
あるいは、メール返信での「元発言参照」とか。

ダイアログじゃなくてただのウィンドウでいいと思われ
0143デフォルトの名無しさんNGNG
>141
何で?
0144デフォルトの名無しさんNGNG
>>138
親ウィンドウにスッポリ隠れていたらモードレスダイアログをアクティベーとできなくなりますが。
0145仕様書無しさんNGNG
上のほうでちょっと扱われていることなのですが、
DoModalじゃなくてCreateを使いたいのですが、引数をどうやって
あてがえばいいかわかりません。DoModalみたいに引数なしで
やるとエラーが出てしまうのですがどうすればいいでしょうか。
0146デフォルトの名無しさんNGNG
いっつもthisポインタをわたしてたような
0147デフォルトの名無しさんNGNG
CDialogベースでダイアログを作成して,
そのダイアログにリストボックスを作成しました。

ですが,ダイアログの大きさを変えても,
リストボックスの大きさはそのままで
サイズ変更がされません。。
いろいろプロパティをいじっているのですが・・

どなたかダイアログサイズを変更すると
リストボックスのサイズも変更する方法を
ご存知の方いらっしゃれば教えて下さい。
よろしくお願いします。
0148デフォルトの名無しさんNGNG
ダイアログのOnSizeで引っかけて、リストボックスにSetWindowPosとか?
0149デフォルトの名無しさんNGNG
ダイアログにサイズグリップを表示させるにはどうしたらよいでしょうか?
0150デフォルトの名無しさんNGNG
>>147
自動では変わらんから、OnSizeハンドラで自分で
ダイアログに合わせてリストボックソの大きさを変えろ
0151デフォルトの名無しさんNGNG
>>145
CDialog::Create()の第1引数?
だったら、そのダイアログのリソースID(IDD_ABOUTとか)を
指定すればいいかと。
0152デフォルトの名無しさんNGNG
>>151補足
ClassWizard使ってダイアログクラスを作成すれば

class CAboutDlg : public CDialog
{
public:
  enum { IDD = IDD_ABOUTBOX };

みたいに生成されるから、CAboutDlg::IDDを使う。

…ってCDialog::Create()の話じゃなかったらスマソ
0153デフォルトの名無しさんNGNG

 ダイアログ上のピクチャーコントロールに線を加工としたのですが、
以下のやり方で試したところ、返り値では問題がない時のものが
返るのに、実際には引かれていないと言う状態になってしまいました。
 何か抜けているかアホな間違いをしているかのどちらかだと思うのですが、
問題点について教えていただけませんでしょうか?

 置いた場所はOnInitDialog() になります。


CDC *pDC;
CWnd *pict=GetDlgItem(IDC_PICTURE);
pDC = pict->GetDC();

CPen NewPen(PS_SOLID,2,RGB(0,255,0));
CPen *OldPen = pDC->SelectObject(&NewPen);

pDC->MoveTo(0,0);
pDC->LineTo(200,10);

pDC->SelectObject(OldPen);
m_PoBar.ReleaseDC(pDC);
0154デフォルトの名無しさんNGNG
pict->GetDC()で取得したdcを、
なぜ、m_PoBar->ReleaseDCで解放していますか?
0155153NGNG
>>154
 あ゛っ、直し抜けです(涙
 ここは問題に関係……あるのでしょうか?
0156デフォルトの名無しさんNGNG
OnInitDialogで描画処理をやってもダメだよ!
0157仕様書無しさんNGNG
145です。
いろいろアドバイスありがとうございます。
やりたいことはSDIで作ったウィンドウにダイアログを追加して、SDI
のウィンドウのツールバーに作ったボタンを押すとダイアログが立ち上がり
ダイアログに文字列を入れた後にダイアログにあるボタンを押すとSDIで
作ったウィンドウに文字が入力されるようなものを作りたいと思ってます。

とりあえず。ダイアログクラスをCmyDlgとして、ツールバーに作ったボタン操作の
記述に
CmyDlg myDL;
myDL.DoModal();

とやると立ち上がるのですが、Createでやりたいと思い、ただ書き換えてみたの
ですが引数無しでエラーが出ました。

まだ初めて1ヶ月の初心者ですが、クラス間で値を受け渡す行為ができず、戸惑い
を覚えています。まあ、これからもこのスレッドで勉強させていただこうと思います。
0158デフォルトの名無しさんNGNG
>>153
OnPaintに書いてください。
0159デフォルトの名無しさんNGNG
>>157
第一引数にダイアログのIDを指定してください。
関数の使い方などはMSDNで確認したほうがいいです。
0160仕様書無しさんNGNG
159さん、ありがとうございます。
第一引数にダイアログのIDを指定したところ
コンパイルは通りました。しかし、ツールバーの
ボタンを押しても画面が少しちらつくだけで
ダイアログが立ち上がらないんですよね。
DoModalでやるとあっさり立ち上がるのに。
0161デフォルトの名無しさんNGNG
ShowWindow(SW_SHOW)が必要だったような。
0162デフォルトの名無しさんNGNG
>>160
「モードレスダイアログ」について勉強したほうが。
ShowWindow(SH_SHOW);
でダイアログを表示します。
0163デフォルトの名無しさんNGNG
CEditViewに表示した文字列をクリックすると、文字列の一部が選択状態になるプログラムを
作りたいのですが、方法が分からず困ってます。どなたか力を貸してください。
たとえば、
AAA BBB #CCC
と表示されているとき、#CCCの一部をクリックすると、#CCC全体が選択状態になるというものです。
(AAAとBBBは選択状態にならない)

いまのところ、OnLButtonClk上でCEdit::SetSelをしようと考えているのですが、#CCCを判別
できないのです。よろしくお願いします。
0164デフォルトの名無しさんNGNG
VisualC++で、MFCでWindowsソケットを使用したプログラムを作る時
最初のスケルトン作成時に、「Windowsソケット」という項目にチェックを
入れないとWindowsソケットのプログラムは書けないのでしょうか?
この項目にチェックを入れることで、何が行われるのかが全く分かりません。
ただsocket関係のヘッダをインクルードするだけじゃ駄目なんでしょうか。
0165デフォルトの名無しさんNGNG
>164
両方ともためしてみてた?
0166デフォルトの名無しさんNGNG
MFCで、中が塗りつぶされない円を書きたいのですが・・・
0167デフォルトの名無しさんNGNG
>>164
WSAStartup()/WSACleanup()もよろしく。
0168164NGNG
>>165
「Windowsソケット」にチェックを入れないで作った場合は動かないのですが
MFCに不慣れな為に、本当に駄目なのかどうか分からないのです。

>>164
あ、一応Win32API・・・SDKと呼ばれてるやつですか。
APIではソケットプログラムを作った事があるので、ソケットの知識はあると思います。

聞きたいのは、スケルトン作成時の「Windowsソケット」をチェックする事の意味というか
これをチェックしないと動かないのかどうか、そしてチェックすることによって
何が行われるのかといった事なのです。

ちなみに、API(SDK)では、Wsock32.libをプロジェクトに入れて
winsock2.hをインクルードすれば良いだけです。
0169168NGNG
あ、上の>>164じゃなくて>>167でした。失礼。
0170167NGNG
>>168
「Windows ソケット」をチェックすると、AfxSocketInit()がInitInstance()に
入ったりします。
AfxSocketInit()の詳細はソースを見てもらうとして、要するにアプリケーション
開始時にWSAStartup()、終了時にWSACleanup()を呼び出します。

…というところでオッケー?
0171164NGNG
>>170
ありがとうございます。分かりました。
それらの処理を自分で行うならば、チェックしなくても動くのですね。

という事は、今動いていないのは自分のせいか。
MFCでプログラム作るのは初めてなので、こんなものかな。
0172デフォルトの名無しさんNGNG
質問します。

CDHTMLEdit をダイアログに貼り付けて、RichEdit のような感じで編集(フォントのサイズや色など)したいと思っています。
この時、何らかのイベントで CDHTMLEdit の選択された範囲を知る事は可能でしょうか?
何バイト目から何バイト目みたいな形が望ましいのですが、範囲さえ取れたら何でもいいです。

また、テキストの何文字目から何文字目がクライアント座標でどの範囲かを知ることは可能でしょうか?

Google でもそれらしい記述の文書が見つからなかったのですが、
何か参考になりそうな文献やサイトでもいいので、どなたか教えて下さい。
0173デフォルトの名無しさんNGNG
>>166
それVC系スレで何回も出てる質問なのでネタとみなします。
0174153NGNG
>>158
>>156
 出来ました! どうもありがとうございます
0175デフォルトの名無しさんNGNG
>>173
どこに書いてありますか?
0176デフォルトの名無しさんNGNG
>>175
しつこい人なんて嫌いです!(ぷいっ
0177デフォルトの名無しさんNGNG
>>160
MFCならCWinAppのInitInstance()の戻り値がFALSEになってると思われます。
m_pMainWndにメインダイアログのポインタを代入してからTRUEを返すようにしてみてください。
0178デフォルトの名無しさんNGNG
Visual C++はVisual C++でできていてそのVisual C++からVisual C++ができてそのVisual C++からVisual C++が作成されたんですね?
0179デフォルトの名無しさんNGNG
違います。
Visual C++はVisual Basicでできていて、
Visual BasicはVisual C++でできているのです。
0180デフォルトの名無しさんNGNG
また次のソフトも MFCに頼ってしまいそうで鬱駄。
いいかげんMFCを使わないで開発したいが勉強する
時間がなかなかとれない。愚痴でスマソ
0181デフォルトの名無しさんNGNG
>>179
、、、、、どっちが先?
0182デフォルトの名無しさんNGNG
OutlookExpressのメール本文が表示されてるペインは
MFCのどのクラスで実装されてると思いますか?
CScrollViewじゃ役不足ですかね。
やはりCRichEditViewかなあ。
0183デフォルトの名無しさんNGNG
Visual C++はMicrosoft Cが、Visual BasicはQuick Basicが
放射線を浴びて突然変異したものです。
0184デフォルトの名無しさんNGNG
そして、Microsoft CはLattice Cが、放射線を浴びて突然変異したものです。
0185デフォルトの名無しさんNGNG
>>182
CScrollViewあたりから派生た毒痔のクラスかも知れん
0186デフォルトの名無しさんNGNG
>>183,184
寒いからやめろ
0187デフォルトの名無しさんNGNG
MFCでも凝ったユーザーインターフェースって作れますか?
お薦めの本があれば、教えてください。
0188デフォルトの名無しさんNGNG
>>187
「凝ったユーザーインターフェース」っていったいなんだよ
それを定義しないとはじまらないだろ?
0189デフォルトの名無しさんNGNG
定義なんかいらねーよ
0190デフォルトの名無しさんNGNG
じゃあ宣言すれ
0191デフォルトの名無しさんNGNG
class DecolatedUserInterface;

あとよろしく
0192デフォルトの名無しさんNGNG
本格的に冬休みだね
0193デフォルトの名無しさんNGNG
DecoloredUserInterface;
//脱色済みユーザインターフェース
0194デフォルトの名無しさんNGNG
DecoloredUserInterface;
//黒人お断りユーザインターフェース

…ともとれる。
0195仕様書無しさんNGNG
CPointで配列ってできますか?
そんでもって配列に対してさらにxだけを呼び出すことってできますか?
0196デフォルトの名無しさんNGNG
>>195
やってみなよ、とりあえず。

> そんでもって配列に対してさらにxだけを呼び出すことってできますか?
日本語が意味不明。x を呼び出すって、どういう意味?
0197デフォルトの名無しさんNGNG
C++ビルダーからの移行者なんですが、ピクチャボックス
のサイズをGUIから設定することはできないのでしょうか
0198デフォルトの名無しさんNGNG
新年あげ
0199デフォルトの名無しさんNGNG
質問です。
最初にCScrollViewをAppWizardで作成し、その後にCTreeViewとCListViewを
追加したのですが、ビルドするとCTreeViewとCListViewが定義されていません
とエラーが出てしまいます。
順番を変えて、最初にAppWizardでCTreeViewを作成すると、ちゃんとビルドできるのです。

最初にCScrollViewを作ると、クラスを追加出来ないのでしょうか?
0200デフォルトの名無しさんNGNG
>>199
どうやって追加したのかが知りたいと思われ
0201199NGNG
>>200
自己解決しました。
#include "afxcview.h"をインクルードすることによってビルドできました。
最初にCViewやCScrollViewを作って、後からクラスを追加した場合、このヘッダが
挿入されないようですね。

ちなみに、まず最初に、ワークスペースの新規作成からAppWizardで基底クラスに
CScrollView(CViewでも結果は同じ)を選んでスケルトンを作成をします。
次にClassWizardで新規にクラスを追加でCTreeViewを作成してビルドしました。
これだと自分でヘッダを追加する必要があるみたいです。
最初にAppWizardの基底クラスでCTreeViewを選んで、後からClassWizardで
CViewやCScrollViewを追加すると、問題なくビルドできます。

でももしかしたら、単に私のVC++がVer5.0だからかもしれません・・・。
0202デフォルトの名無しさんNGNG
基本的すぎて場違いだと思うんですが、求人の所に
Visual C/C++(VB)経験者ってあるんですけど
なんのことですか?ここに書いてあること見てもさっぱり
わからなくて、良かったらどなたか分かりやすーく
説明していただけませんか?
0203デフォルトの名無しさんNGNG
要はそこではたいした開発はしてなくて、入社してもすぐハケーンされて
運がよければVC,VBが使えて、運が悪いと、何年も型落ちを重ねたツールや
聞いたこともないようなツールで説明書は紛失中みたいなところで
開発させられるって事です。
俺はもうなれた。
0204デフォルトの名無しさんNGNG
>>202
説明も何も、 Visual C++とかVBを使ってことがあるってことだろ。
0205デフォルトの名無しさんNGNG
>>202
いやね。恥ずかしい。
そんなことまで言わせるの。
0206202NGNG
恥ずかしいのですがそのVisual C++とかVBてのがわかりません(汗)
0207デフォルトの名無しさんNGNG
>>206
マイクロソフトのサイトに説明があるよ。
0208デフォルトの名無しさんNGNG
>>203
まじ?求人でVCのを探してたけど無駄なのか・・・
そういう会社を避けるコツみたいのを教えて欲しい
0209デフォルトの名無しさんNGNG
Iriaなんかにある「クリップボードを監視」するような機能ってどうやってるんでしょう?
タイマーで一定時間ごとにクリップボードを見に行く??
0210デフォルトの名無しさんNGNG
>>209
SetClipboardViewer() すると変更のたびにメッセージが飛んでくるなり。
0211デフォルトの名無しさんNGNG
ClassWizardで基本クラスをCWndにしたクラスを作りたいんだけど、どうやったら良いの?
CWndは選択肢に無いので作れないのかな。
0212デフォルトの名無しさんNGNG
>>211
下から2番目にある「generic CWnd」を選択しましょう。
漏れもこのトラップに引っかかったよ(藁
0213211NGNG
>>212
あ、本当だ。これなのか(笑)

おかげさまで出来ました。ありがとうございます。
0214デフォルトの名無しさんNGNG
CSocketを使ってデータを転送させようとしているのですがどうもうまくいかず、困っています。
CSocketから派生させたCMySocketクラスを作り、CSocketFile、CArchiveと関連付けてデータを送受信しています。
送信データはなんとかまともに動作するようになったのですが
受信データが半角でへへへへへへココココオオオオオオオオオ
のようになってしまい、うまくいきません。
CArchiveのIsBufferEmptyメソッドは絶えず1を返してしまいます。
CMySocketのReceiveを確認してみると
へへへへへへココココオオオオオオオオオ
の後にちゃんと正しいデータが存在していることがわかりました。
うまくデータを受信するにはどうしたらいいのでしょうか?

送信部分のソースは
// CArchive* m_pOut
m_pOut->WriteString("Hello");
(*m_pOut) << (WORD)0;
m_pOut->Flush();

受信部分のソースは
// CArchive* m_pIn
CString string,string2;
while(!m_pIn->IsBufferEmpty())
{
m_pIn->ReadString(string);
string2 += string;
}

お願いします…
0215デフォルトの名無しさんNGNG
>>210
さんきゅー
0216デフォルトの名無しさんNGNG
SDKとMFCでプログラム組んでる人って、仕事とか関係なくて自分で好きなプログラム作る時
どっち使う?
なんかさあ、今までSDKだけでやってきたんだけど、MFCやらなきゃいけないことになって
勉強中なんだけど、何だかSDKより面倒に思える。
今までウィンドウプロシージャに書いてた処理をどこに置けば良いかよく分からんし
ドキュメント/ビューアーキテクチャが面倒なものにしか思えない。
ついついドキュメントクラス使わずに済ませてしまう。
やはりMFCでファイル入出力する場合、ドキュメントクラスにまとめてシリアライズ関数でってのが
一般的って言うか、ベターなの?

SDKより開発効率悪いMFCのプログラム書いてるの俺くらいだろうか・・・鬱だ。
0217デフォルトの名無しさんNGNG
>>214
まず、そのプログラムは、ふつうの(ソケットではない)CFileの時はきちんと動くのか?
0218デフォルトの名無しさんNGNG
>>216
その気持ち、すごくわかる。

そもそもMFCってのは、Officeを開発するために作ったものを切り出し、
フレームワークと称してWindowsアプリケーション支配の道具としたものだから、
ドキュメント・ビュー・アーキテクチャは当然、
「ファイルを開く」「ファイルに保存する」といった形態のアプリケーションしか
想定していない。

しかし素直にシリアライズでファイル入出力を実装しちゃうと、
アプリケーションのバージョン間でファイルに全く互換性がなくなってしまう。

なぜなら、もし互換性を保とうとするなら、クラスにメンバ変数ひとつ加えることすら
できないことになるからね。

その証拠に、これはつい最近までOfficeの各アプリケーションの決まり文句だったでしょ?

バージョン間の互換性を維持しようとすると、ファイル入出力をシリアライズで手を抜くことは、
途端にできなくなってしまう。それどころか、むしろ、もっと面倒になる。

確かに、MFCはインベント駆動のプログラムをうまく包み込んでいると思うが、
フレームワークという点では、Java や C++Builder などの方が、ずっと進んでいるようだ。
0219デフォルトの名無しさんNGNG
MFCを使ってスタティックライブラリを作ったのですが、このライブラリを
プログラム(MFC、ダイアログベース、スケルトンはAppWizard)にリンクして
デバッグビルドすると、
> LINK : warning LNK4098: defaultlib "mfc42.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
> LINK : warning LNK4098: defaultlib "mfcs42.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
> LINK : warning LNK4098: defaultlib "msvcrt.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
という警告が出ます。
これはスタティックライブラリの作り方に問題があると思うのですが、
どのような原因が考えられますか?
それともこれは仕方なく、このライブラリを使うプログラム側で
いちいち /NODEFAULTLIB:library を指定しなければならないのでしょうか?
0220デフォルトの名無しさんNGNG
>>219
そのライブラリを構成するオブジェクトが、おそらく Release ビルドされているから、そうなる。
だからそのライブラリの Debug 版を作ってリンクすれば吉。
0221デフォルトの名無しさんNGNG
>>220
ありがとうございます。
デバッグ版をリンクすることでデバッグビルドでの警告はなくなりました。

ということは、通常はリリース版スタティックライブラリを
プログラムのリリースビルドで使うので、デバッグビルド時にこの警告が出ても
気にしなくて良いのでしょうか?
0222デフォルトの名無しさんNGNG
>>221
それだとデバッグ時にライブラリ内の関数へステップインできなくなるはず。
あと、メモリ管理が Release 版と Debug 版で違うから、場合によっては不安定になる。
0223デフォルトの名無しさんNGNG
デバッグ用のライブラリとリリース用のライブラリを両方作って、
構成ごとに適切なライブラリをリンクするようにしてもよし。

中まで追いかける必要がないなら気にするな。
0224219NGNG
>>222-223
ありがとうございます。開発時にはデバッグ用、リリース用の
両方のライブラリを用意してそれぞれリンクすることにします。

ところで仮にこのようにMFCで作ったスタティックライブラリの
リリース版を公開したとして、使用者側がデバッグビルド時に
警告が出たとしてもそれは仕方のないことですよね?
それともデバッグ版、リリース版両方を公開するのでしょうか。
通常はどのようにするのか教えてください。
0225デフォルトの名無しさんNGNG
公開しているわけじゃないけど、たとえば Visual C++ には両方のライブラリが含まれてる。

ってゆーか普通、ソース非公開の「MFC な」ライブラリは、
スタティックライブラリにはしないと思うが。
0226デフォルトの名無しさんNGNG
ヘッダで、#pragmaをつかって相手の環境に合わせてランタイムを指定するとよし。
0227219NGNG
> ってゆーか普通、ソース非公開の「MFC な」ライブラリは、
> スタティックライブラリにはしないと思うが。

そうなのですか…
ありがとうございます。すっきりしました。
0228デフォルトの名無しさんNGNG
>>226
#pragmaを使うとは、

#ifdef _DEBUG
 #pragma comment(lib, "debug_hoge.lib")
#else
 #pragma comment(lib, "release_hoge.lib")
#endif

ということでしょうか?
0229デフォルトの名無しさんNGNG
>>218
VERSIONABLE_SCHEMAは使ってる?
0230デフォルトの名無しさんNGNG
質問です。
イメージ付のダイアログで、ボタンを押すとCFrameWndクラスを継承
したウィンドウを表示するプログラムを作りました。
このウィンドウを閉じたときに、ウィンドウとダイアログが重なって
いると、イメージが消えてしまっているのでダイアログの再描画
を行いたいのですが、ウィンドウ側のソースからダイアログの再描画
を行う方法がわかりません。どなたか教えてください。
あと、このような場合にはダイアログに自動的にWM_PAINTメッセージ
は送られないのでしょうか。
0231デフォルトの名無しさんNGNG
>230 なんか 質問です。! なんてやられると そもさん せっぱ みたいだな
0232デフォルトの名無しさんNGNG
MFCのクラスウィザードで新たにクラスを追加する時に
基本クラスを選ばなければなりませんが、別にどこクラスからも
派生させる必要の無いオリジナルのクラスを作って追加したい場合
どこクラスを基本クラスに選べば良いのですか?
0233デフォルトの名無しさんNGNG
えらばなきゃいいじゃん
0234デフォルトの名無しさんNGNG
CObjectの機能が必要なら、そこから派生させますが、
そうでなければ勝手にcppファイルにクラスを書いて、
プロジェクトに追加します。
0235デフォルトの名無しさんNGNG
>>233
いや、選ばないとクラス追加できないのですが・・・。
必ず選ぶことになるのです。

>>234
その場合、メッセージマップとかは全部自分で記述しなければならないのですか?
メッセージマップの定義とか良く分からないので、全部クラスウィザードに
任せたいのですが、それだと基本クラスを選ばないといけないみたいなので・・・。
0236デフォルトの名無しさんNGNG
メッセージマップが要るなら、親はCWnd(以下派生クラス)に
決まったも同然ではないか?
0237デフォルトの名無しさんNGNG
>いや、選ばないとクラス追加できないのですが・
クラスの種類Genericにしてるか?
0238デフォルトの名無しさんNGNG
「新規ファイルにクラス書いて、.hと.cppをプロジェクトに追加」
よりは、
「genericCWnd で追加して、.hと.cppから不要なとこ削除する」
方が楽だから、俺はそうしている。
勿論ヘッダの class CHoge : public CWnd の ": public CWnd" も削除。
0239デフォルトの名無しさんNGNG
>>238
.hは.cppにincludeしてあれば、依存関係で、勝手に
プロジェクトに追加されるはずだよ。
0240デフォルトの名無しさんNGNG
CEditに表示される文字の幅を均等にしたいのですが、
なんかいい方法はありますでしょうか?
0241デフォルトの名無しさんNGNG
固定ピッチフォントをCreateFontして、SetFont。
0242240NGNG
>>241
ありがとうございます。早速やってみたのですが、nCharSetに
SHIFTJIS_CHARSETを指定すると、英文字の幅が異なってしまいます。
かといって、ANSI_CHARSETだと日本語の文字を認識しません。
これはどうしようもないのでしょうか?
0243240NGNG
フォントに"Terminal"を指定したらうまくいきました。ご迷惑おかけしました
0244みゆNGNG
VC++6.0で
新規作成で
MFC AppWizard→ダイアログベース→***App
を選択したもので

始めに出来ているダイアログ画面の
親を適当なもの(ウィンドウクラス名をAとする)
に変更することなんかはできるのでしょうか?

このときダイアログのウィンドウクラス名をBに設定し
親のウィンドウクラス名をAにする方法もおしえてください
0245デフォルトの名無しさんNGNG
>始めに出来ているダイアログ画面の親
意味不明。クラス階層的に親ということか?

>このときダイアログのウィンドウクラス名をBに設定し
>親のウィンドウクラス名をAにする方法もおしえてください
親のウインドウクラス名、が特に意味不明。

ひょっとしてエディタの置換でうまくいくかと思うがどうか?

ついでに、「なぜ、そんなことがしたいのか」も教えてくれ。
0246デフォルトの名無しさんNGNG
>>244
始めは親は居ないと思うけど、最初からチャイルドウィンドウをダイアログで作りたいってこと?
0247デフォルトの名無しさんNGNG
age
0248みゆNGNG
うーん、説明不足ですみませんでした.
あるソフトA(自作)で別ソフトB(自作)にメッセージを送る
とき,Bの作成がSDIでCview形式で作成したもので
A側から
///
HWND hWnd = ::FindWindow("Frame", NULL);//Frameのハンドルを取得
HWND ChildWnd;
if(hWnd == NULL){
MessageBox("Not Frame");
}
ChildWnd = ::GetTopWindow(hWnd);//Frameの子のハンドルを取得
char s[64];
CString name;
GetClassName(ChildWnd,s,64);
name = s;
if(name != "View"){
return;
}
::PostMessage(ChildWnd, WM_USER_MESSAGE, (WPARAM)0, (LPARAM)0);
///
上記のように
FindWindowでBのフレームのWindowクラス名を検索し
GetTopWindowでFrameの子のハンドルを取得し
取得した子のハンドルのWindowクラス名
を取得して,それに対してメッセージを送るように
しているのです.

今度はBの変わりに
新規プロジェクトでAppWizard→ダイアログベース→***App
で作ろうかと考えています.
始めに出来ているダイアログのウィンドウクラス名を変更できてます.

先ほど述べた方法で相手にメッセージを送っているため
C側はこのダイアログに親のウィンドウ(フレームのかわりみたなもの)
を用意させそのウィンドウクラスも設定したいのです.

こんなんで理解できますか?
お願いします
0249みゆNGNG
なんとか,自己解決しました(ぉ
新規プロジェクト
SDI→基本クラスCFormViewに
で作成して解決しました.
始めに出来ているダイアログ画面(CXXX_FORM)
のウィンドウクラス名もなんとか変更できました.

おさがわせしました.
0250デフォルトの名無しさんNGNG
ダイアログベースでワークスペースを作成したときに
C***App クラスと C***Dlg クラスができますよね。
Appのほう、使い方がよくわからないのでアプリケーションの動作を
記述するコードは Dlgクラスに書いてしまうんだけどこれはやっぱ間違いかな?

たとえば、アプリケーションのいろいろな動作はみんな Dlgクラスのメンバ関数に
なっている。自作クラスなんかは Dlgクラスのメンバ変数として確保する。
つまり Appクラスはまったく手をつけていないです。
一度、自作クラスを Appクラスのメンバにして Dlgクラスから Appクラス経由で
使おうかと思ったけど、Dlgクラスから Appクラスのハンドルは GetParent()
できなかったですし。厨な質問かもしれないが教えてください。
0251デフォルトの名無しさんNGNG
>>250
全然、問題無いっスよ。つーか、ダイアログベースってモーダルダイアログ
なんでむしろ他のウィンドウと通信しようなんてほうがオカスィ。
CXXXAppはメンバの初期化とか終了処理に使いなさい。
0252250NGNG
>>251 なるほど、どうもありがとう。

ちなみに、DlgからAppのポインタは AfxGetApp()で取得できるんだね。
まったくはずかしいぜ。
0253デフォルトの名無しさんNGNG
>>251
>つーか、ダイアログベースってモーダルダイアログ
>なんでむしろ他のウィンドウと通信しようなんてほうがオカスィ。

ま、そうともいいきれないね。

BOOL CHogeApp::InitInstance()
{
 ・・・
 CHogeDlg* dlg = new CHogeDlg;
 m_pMainWnd = dlg;
 dlg->Create(IDD_HOGE_DIALOG);
 dlg->ShowWindow(SW_SHOW);

 return TRUE;
}

終了するときは、
::AfxGetMainWnd()->PostMessage(WM_CLOSE);
0254↑NGNG
void CHogeDlg::PostNcDestroy() {
 delete this;
}
がないとメモリリークする。
0255ビルダーから浮気NGNG
ディレクトリを指定してテキストファイルをCStringListに
設定したいのですが、いまいちよくわかりません。
・ディレクトリを指定する場合の書き方
「ビルダーだと(D\\作業用フォルダ\\a.txt)のようにできたのですが・・」
・複数行の文字列をいっきにCStringListに入れる方法
を教えていただけませんでしょうか?よろしくお願いいたします。
0256デフォルトの名無しさんNGNG
CEditから派生して、色を変えられるエディットボックスのクラスを作ったのです。
=WM_CTLCOLOR メッセージの CtlColorをオーバーロードして、そこで
SetBkColor(COLORREF)を実行する方法です。
よくFAQにある奴ですね。

それで一応変えれるんだけど、エディットボックスを「読み取り専用」とか
EnableWindow(FALSE); にするとグレーのままなのです。
入力させたくない場合はどうすればいいのでしょうか。
0257デフォルトの名無しさんNGNG
スレちがいかもしれませんけど。
OSで使用している、ブラウザの情報が取りたいのですが
(Mozilla/4.0 (compatible; MSIE 5.0; Win32)ってやつ)
取得方法がわかりません。

JAVAだとGetUserAgentというAPIで取れるらしいのだが・・・。
0258デフォルトの名無しさんNGNG
>256
nCtlColor == CTLCOLOR_EDIT の時だけ処理してない?
使用不可とか読み取り専用の時には CTLCOLOR_STATIC を渡してくるよ。
0259デフォルトの名無しさんNGNG
>>257
「OSで使用している」というのは、
「インストールしてある」という意味なのか、
「起動中」という意味なのか?
っと、どっちにしろ方法はしりませんけど・・・
0260257NGNG
できれば、標準で使用しているブラウザのUserAgentが取りたいのですが、
最悪、インストールされているIEのUserAgentが取れればいいと思ってます。
0261256NGNG
>>258 そのとおりでした!なるほどです。
たしかにデバッグモードで追うと、 nCtlColor の値が
いっこうに CTLCOLOR_EDIT にならないで、if 文の中に
入ってくれなかったですわ。ありがとうございました!
0262デフォルトの名無しさんNGNG
エディットボックスコントロールのようなもので文字毎や行毎に文字色や背景色を変えるような事はできませんか?
0263みゆNGNG
2つの異なるプログラム同士の文字列の送信受信なんですが
WM_COPYDATAとなるメッセージで用いるようですが

このほかの方法ってないのでしょうか?
別にWM_COPYDATAを使えばいいんだけど(ぉ
0264デフォルトの名無しさんNGNG
>260
標準で使用しているブラウザ、となると。
・localhost : 40001 とかのポートをlistenするhttp鯖もどきをつくる
・ShellExecute("http://localhost:40001");を実行
・そのhttp鯖にブラウザがGetリクエスト。
・リクエストにはUserAgentも入って(゚д゚)ウマー
という方法しか浮かばないな。
0265257NGNG
>>264
なるほど、それは考えつかなかった。
さすがに使用はできないけど、いい案ですね。
UserAgent取る為にそこまでは普通しないよなーw
0266デフォルトの名無しさんNGNG
MDIアプリで、オリジナルのCFrameViewを通常のViewと兄弟で構築するのはどうするの?
丁度、お絵かきソフトのパレットやペンツールみたいな物なんだけど、
DIALOGやツールバーはちょっと。
後ろに隠れたり、MainFrame内で最小化したりさせたいので。
厨房な質問でスマソ
0267デフォルトの名無しさんNGNG
>>257
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Internet Settings
にぽいのがあるけど。
0268デフォルトの名無しさんNGNG
MFCっていつ親Windowが作成されるんですか?
親Windowのハンドル取得したいんですけど、それらしき部分が無いような。
MFCには
HWND hWnd;
hWnd = CreateWindow・・・
みたいな部分は無いんでしょうか。
0269257NGNG
>>267
そこのレジストリなんですけど、
どうも今使っているバージョンではないものが入っているようです。
多分インストール時のIEのバージョンではないかと思うんですが・・・。
0270デフォルトの名無しさんNGNG
>>268
GetParent ?
0271デフォルトの名無しさんNGNG
ON_NOTIFY_REFLECT(xxx,onxxx)を呼び出したいのですがどうも
やり方が良くわかりません。だれか教えて下さい。
0272デフォルトの名無しさんNGNG
ループ中にボタンをクリックして「緊急停止」などの割り込み処理
をしたいのですがどうすればいいのでしょうか
0273デフォルトの名無しさんNGNG
>268
CWnd::Create で実際にウィンドウが作られ、
HWNDは CWndのメンバ m_hWnd に格納される。

親ウィンドウのハンドルは
 CWnd* pParent = this->GetParent();
 pParent->m_hWnd or pParent->GetSafeHwnd()
で取得。
0274デフォルトの名無しさんNGNG
>>272
コンポーネントギャラリからプログレスダイアログを導入するのが簡単。
0275デフォルトの名無しさんNGNG
>272
とりあえず、マルチスレッドにしないと。
0276デフォルトの名無しさんNGNG
MDIの子ウィンドウの最大枚数を制限出来ますか?
取りあえず一枚にしたい。
0277デフォルトの名無しさんNGNG
CHtmlViewをCFormかダイアログに複数貼り付けて
使うことはできるのでしょうか?
できるとしたらどうやればいいか教えてください。
何か参考のページでもいいです。
よろしくお願いします。
0278かるかん ◆TM3.ie9w NGNG
>>276
それじゃ、MDIにする意味ないような…
それはともかく、そういう機能は元々なかったはずだから、
CMDIChildWndのOnCreate()をオーバーライドしてその中で判断するとか。
CMDIFrameWndの方でもChildWndのリストを管理する機能を入れる必要が
ありそうだけど。俺は試す気はないので。
0279デフォルトの名無しさんNGNG
>>276 == >>266 ですんで。UIに一考の余地が有りそうですが、
その方向で色々試してみます。ご教授ありがとー。
0280かるかん ◆TM3.ie9w NGNG
>>277
CForm?? CFormViewのことか?
ダイアログにViewは作れないはずだよ。それにViewのなかに
Viewを作るってのも無理な話。

普通はCFrameWnd(の派生クラス)のOnCreateClient()を
オーバーライドしてCSplitterWndをつくり、その各ペイン上に
Viewをつくるんだが。サンプルもMSDNライブラリにあるから。
0281277NGNG
かるかんさんレスありがとうです。

すいませんCFormViewのことです。

CSplitterWndを使ってやるのはできたのですが、、
最近よくあるタブブラウザみたく、タブを使って
CHtmlViewを切り替えるにはどうしたらいいので
しょうか。。。

考え方でも結構ですのでご教授ください。
0282かるかん ◆TM3.ie9w NGNG
#はぁ、やっと会議が終わったぜ。(今日は出勤日なんだよ)
俺の意見としては、CHtmlViewを使うのはあきらめろ、だな。

手っ取り早いのは、CFormViewの元になるダイアログに
ActiveXコントロール「Microsoft Web Browser」を貼り付ける、かな。
ただ、IE4以降になっちゃうかも。それと、使ったことはないので
これ以上は自分で試してくれ。
0283デフォルトの名無しさんNGNG
MainFrameクラスからドキュメントへのポインタを
取得するにはどうすればいいのでしょうか
0284デフォルトの名無しさんNGNG
ステータスバーに、現在のマウスポイント位置をが表示されるように
したいのですがどうすればいいですか?
0285デフォルトの名無しさんNGNG
>>284
WM_MOUSEMOVEを拾って自分でステータスバーに書くんじゃないか?
0286デフォルトの名無しさんNGNG
>>283
GetActiveDocument()というのがあるが、本当にMainFrameクラスからドキュメントにアクセスする必要があるかよく考えてね
0287デフォルトの名無しさんNGNG
ファイルの移動をする関数ってあるでしょうか?
コピーならあったのですが、、、

それとも、コピーしてから元ファイルを削除するという
方法を取るのでしょうか?
0288デフォルトの名無しさんNGNG
>>287
::MoveFile()じゃだめ?
0289デフォルトの名無しさんNGNG
ワイルドカード使いたいとか進行状況を表示したいとかなら
::SHFileOperation()もいいかも。
0290デフォルトの名無しさんNGNG
Visual C++ 6.0で、WindowsXPで動くプログラム
を作成することはできますか??
Windows9x系のプログラムってXPでけっこう動かない
のがあるんですよね?そのへんどうなんでしょうか・・・。
0291ひよこ名無しさんNGNG
>>290
ソース互換はあるだろうて。
使えないAPIがあればコンパイル時に怒られるだろ。
0292デフォルトの名無しさんNGNG
MFC AppWizard (dll) でオートメーションサーバーを作ろうとしています。
スケルトンにDllRegisterServerはあるのですが、DllUnregisterServerが
ありません。
DllUnregisterServerはどのように実装すれば良いのでしょうか?
それとスケルトンにDllUnregisterServerが無い理由は?
0293292NGNG
自己レスです。
書籍を参考にして次のようにしました。

STDAPI DllUnregisterServer(void)
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 COleObjectFactory::UpdateRegistryAll(FALSE);
 return S_OK;
}

MSDNライブラリにはUpdateRegistryAllのパラメータが無かったのに…
MFC AppWizard がこれを追加してくれない理由は未だわかりません。
0294AppleNGNG
Windows の「アクセサリ」→「ユーザ補助」には「拡大鏡」がありますよね。
あれを画面全体に広げたようなプログラムを作りたいのですが、簡単?
0295デフォルトの名無しさんNGNG
>>294
拡大したビットマップを画面全体に表示するとして…
いったい何を拡大するの?
0296デフォルトの名無しさんNGNG
拡大対象のアプリが操作できなくなる気がする
けど、気のせいか?
0297AppleNGNG
目の悪い人にでもパソコンが使えるようにしたいんです。
仮想ディスプレイのようなのが理想です。
マウスを画面の端に持っていくと、画面ごと移動するような・・・
仮想ディスプレイと違うのは、文字や画像がやたらデカイこと。
0298デフォルトの名無しさんNGNG
どれくらいC++言語が分かればDIRECTXに手が出せますか?
厨でごめんなさい・・・
0299デフォルトの名無しさんNGNG
C++言語とDIRECTXは関係ない>298
0300デフォルトの名無しさんNGNG
ダイアログベースのMFCアプリ作ってますが
ダイアログを非表示のまま起動することが上手くできません(SDKの方は上手くいくのですが・・・
OnInitDialogでShowWindow(SW_HIDE);しても警告でるか無視されて表示されてしまいます。

PreCreateWindowでも上手くいきません
助言お願いします
0301300NGNG
ダイアログは起動直後に現れるメインのものです(InitInstance()で生成するもの
0302ななしいNGNG
>>300
そうそう、表示されちゃうよね。
でも、MFCのコードをトレースすれば、すぐ分かるかも
(時間がなくて、漏れはやってません)
0303デフォルトの名無しさんNGNG
>>300
ウィンドウサイズを(0,0)にしちまうってのはどぉ?
0304デフォルトの名無しさんNGNG
>>300
アプリケーションクラスの
int nResponse = dlg.DoModal();
あたりを消して,自分でCreateして
ShowWindow(SW_HIDE)
0305デフォルトの名無しさんNGNG
Createを発行するなら、モードレスになるから、
メッセージループを回さないといけないような。
0306デフォルトの名無しさんNGNG
>300, 305
>>253 >>254あたりを参照。
0307デフォルトの名無しさんNGNG
ClassWizardでタイプライブラリからクラスを作成し、

// IHogeはClassWizardがタイプライブラリから自動生成したクラス
IHoge hoge;
hoge.CreateDispatch("Hoge.Object");
BOOL bHoge = hoge.IsHoge();  // BOOL値を返すメソッド

としたのですが、実行(F5)すると

Warning: attempt to call Invoke with NULL m_lpDispatch!

という警告が出てしまいます。どうすればよいのでしょうか?
ちなみにVBScriptで

Set oHoge = WScript.CreateObject("Hoge.Object")
bHoge = oHoge.IsHoge()

とした場合はちゃんと予期したBOOL値が返ります。
0308デフォルトの名無しさんNGNG
実際DirectXってどれをベースに開発するのがいいんだろう。

VBで学ぶ・・・とかVCで学ぶとか・・・とかいう本がでて
いるけど、どれで学べばいいかわからないんですよね。

VBできないからVCベースでやろうと思っているけど
0309307NGNG
AfxOleInit を忘れてただけでした。
しょーもないこと書いてごめんなさいごめんなさいごめんなさいごめんなさい
0310デフォルトの名無しさんNGNG
文字の大きさを変えて出力TextOutするにはどうすればいいんですか?
文字の色を変えるときはSetTextColorで変えられるんですけど
0311デフォルトの名無しさんNGNG
サイズの違うfontをアタッチしませう
0312デフォルトの名無しさんNGNG
やっぱりフォントの構造体を作ってそっちを選択しないと
だめなんですかね。ありがとうございます。
0313デフォルトの名無しさんNGNG
昨日よりVC++6.0なるものをはじめたのです。
とある書籍にてブラウザが作れるとのことで、その本の通りCHtmlViewを使って
簡易ブラウザなるものができました。
しかし「お気に入り」がないためにどうも使いにくい。
ということで、「お気に入り」を追加しようとMSDNを調べてみたのです。
CHtmlViewの項目に確かに「お気に入りも使えます」みたいなことを書いてある
のですが、いざ内容をみてみると「お気に入り」を扱えそうな関数がないんですが
どなたかご存知でしょうか?
0314デフォルトの名無しさんNGNG
VC6でWINキーを無効にする方法を教えてたもれ。
0315デフォルトの名無しさんNGNG
http://www.ryomonet.co.jp/kazenetu/tips/scr.html
この方法で、WINキーも無効にならぬかえ?
0316デフォルトの名無しさんNGNG
>>313
サンプルのMFCIEにあるとおもうけど。
0317314NGNG
>315
すまぬ。当方OSがWindows2000ゆえ無効にならんでおじゃる。
Windowsキーのキーコードさえ分からんでおじゃる。
0318デフォルトの名無しさんNGNG
LoadImageを使って外部からBMPファイルを読み込んでいるのですが、
2000/NTでちゃんと読みこめません。小さなBMPならいいのですが、非常に大きなサイズになると駄目なようです。
95/98/meは動作しました。

LoadImageで大きなBMPでも表示できる方法、または
他に外部の大きなbmpファイルを表示できる関数があれば教えてください。。
0319デフォルトの名無しさんNGNG
CTreeCtrlに表示するアイコンでフルカラーのものを
使うにはどうすればいいのでしょうか?
0320デフォルトの名無しさんNGNG
>>319
普通にやっても駄目?
そもそもフルカラーでやる意味が分からない?
256色で十分では?
画像ビューワで使うのかな?
0321デフォルトの名無しさんNGNG
printf
0322デフォルトの名無しさんNGNG
解説本を読むと、CDocumentがデータを、CViewが見せ方を扱うって書いてあるんだけど
CEditViewを使ったサンプル読むと、CeditViewの中のCEditってのがデータ持ってるような
気がするんだけど、勘違い?
CeditViewって、CViewの派生で、しかし、中にCEditも持ってるみたいで、
CViewもCEditもCWndの派生で、ほしたらウィンドウ2つできそうな気がするけど1つ?
CEditが入ってくると、CDocumemntとCViewとCEditの関係がぜんぜんわからん。
どねんなってるねん?
0323デフォルトの名無しさんNGNG
CEditみたいなラップクラスには、Document - View
アーキテクチャは適用外なのです。(ウインドウがデータを持つため)
CEditViewは、reinterpret_castでCEditになるんやなかったかな?
だからウインドウは1つ。
0324デフォルトの名無しさんNGNG
自分でCEditView相当を作ってDocument-Viewを適用しようとしたら、
CViewの派生クラスにCEditの機能を入れるのと、CEditの派生クラスに
CViewの機能を入れるのと、どっちが正統派?
0325デフォルトの名無しさんNGNG
CEditを使う限りMFC的に正統なDoc-Viewには成り得ないと思うよ。
0326デフォルトの名無しさんNGNG
CEditView(っていうか、CCtrlViewから派生したクラス)は、「独りDocument-View」な感じがするのは俺だけ?
0327デフォルトの名無しさんNGNG
無理にDoc-Viewやるなら、C〜CtrlをDocにして、
オーナードロー用のサブクラス化ウインドウをViewにするかなぁ?
0328デフォルトの名無しさんNGNG
ListViewとTreeViewはオーナーデータスタイルがあるんだけどね。
0329292NGNG
>>292-293です。先述のようにDllUnregisterServerを以下のようにし、

> STDAPI DllUnregisterServer(void)
> {
>  AFX_MANAGE_STATE(AfxGetStaticModuleState());
>  COleObjectFactory::UpdateRegistryAll(FALSE);
>  return S_OK;
> }

実際に regsvr32 /u hoge.dll を実行すると、

> DllUnregisterServer in hoge.dll succeeded.

となりますが、レジストリには項目が残ったままとなってしまいます。
レジストリから削除するにはどうすればよいのでしょうか?
※DllRegisterServerはAppWizardが生成したデフォルトのままです。
0330 NGNG
新規クラスを作るとき、CWndから派生させて、それを CMyclass1 とします。
そこからさらに派生させた CMyclass2 を作るとき、ClassWizardは使えないんでしょうか?
Serialize が使いたいのです。
もう、直接 CWnd → CMyclass2作ってしまおうかなと考えてます。
どうせ CMyclass1 は使わないですし。しかし、OOPL的には CMyclass1は
あるべきと考えてるのですが・・・
0331デフォルトの名無しさんNGNG
質問です。
エディットボックスで使用するフォントを和文(全角)と欧文(半角)で別のものを使いたいと考えています。
OnInitDialog()内でSetFontを使って全体のフォントを変えることはできたのですが、
ここから、全角と半角を判別してフォントを分けることは可能でしょうか?
何か良い方法がありましたら教えてください。
よろしくお願いします。
0332330NGNG
すみません、>>330 で、
CMyclass2 を ClassWizard で扱うことはできないみたいだけど、
自分で直接 Serializeをオーバーライドするコード書いたらちゃんと使えました。
0333デフォルトの名無しさんNGNG
>331
エディットボックスを使っている限りほぼ無理かと思われます。
0334デフォルトの名無しさんNGNG
>>330
そら自分で書けばできるでしょう
0335デフォルトの名無しさんNGNG
>>333
エディットボックスでは無理ですか。ありがとうございます。
リッチエディットで試してみようと思います。
0336デフォルトの名無しさんNGNG
>>319
CImageListをMSDNで見てみて
Create()の項目に載ってるよう
0337デフォルトの名無しさんNGNG
聞くの恥ずかしいのですが…
バイナリデータから30バイト目から40バイト目までを取得して
文字に変換したいのですが…どうも上手くいきません
教えていただけないでしょうか?
0338デフォルトの名無しさんNGNG
>>337
文字に変換って、
 00 10 20 30 ==> ".. 0"
それとも
 00 10 20 30 ==> "00 10 20 30"
?
0339デフォルトの名無しさんNGNG
82 A8 8A E8 82 A2 82 B5 82 DC 82 B7
=お願いしますみたいな感じなんですが…
0340デフォルトの名無しさん NGNG
for(i=29;i<40;i++){
 cs.Format("%d",byte[i]);
 csAll=csAll+cs;
}
駄目?
0341デフォルトの名無しさんNGNG
cs.Format("%02X",byte[i]);だった。
0342デフォルトの名無しさんNGNG
ありがとう御座います!
やってみます。
0343弱気な名無しさんNGNG
CEditViewから派生したクラスのOnDraw()は中身からっぽ。
なのにちゃんと表示されてる。誰が書いてるんだ?
0344デフォルトの名無しさんNGNG
Win32のエディットコントロール。
0345339NGNG
上手くできませんでした…
0346デフォルトの名無しさん NGNG
>>345
もう少し状況を書いてみて
0347339NGNG
try{
char gname[12]
file.Read(gname,12);
}
catch(CFileException *e) {
//エラー処理をします
e->Delete();
}
こういう風にしてみたのですが、
file.Seek()で移動もしようかな…と思ったけど
できませんでした。
0348デフォルトの名無しさんNGNG
「何ができないのか」を書けや‥‥
0349デフォルトの名無しさんNGNG
「どうして出来ないと判断してのか」も欲しい。
0350339NGNG
すいません…
読込みは単純に終わりました
file.seek(0x30,CFile::begin);
file.read(suimasenn,64);
後はバイナリデータを2バイト文字?
にしたいのですが
82 A8 8A E8 82 A2 82 B5 82 DC 82 B7
=お願いします
こういう変換方を知りたいんです…
0351デフォルトの名無しさんNGNG
CString使うなら(使いたくないが)

CString strBytes;
for(...){
CString strT;
strT.Format(_T("%x%x "),(0xF0 & byte[i])>>4, byte[i] & 0x0F);
strBytes += strT;
}
strBytes.TrimRight();
0352339NGNG
ありがとうございました…
感謝です!
0353ZERONGNG
皆さんに質問です。
擬似乱数を発生させるプログラムで、
int main(void)
{
int a[10], i, j, n=7;
unsigned int seed = 582;
srand(seed);
for (i=0;i<10;i++)
a[i] = 100 * rand()/RAND_MAX;
quicksort(a, 0, n-1);
for (j = 0; j < n; j++)
printf("%5d", a[j]);
printf("\n");
return 0;
}
と書いたのですが、unsigned int seed = 582; と書くと、うまくいかないんです。
581や583など、ほかの数字ではうまくいくんですが、582だけはうまくいきません。
どうすればいいか教えてください。
0354デフォルトの名無しさんNGNG
意味がわからん。582の時の数列では353のquicksortが
破綻するという意味か?それならquicksortのバグとれ、ちゅうだけの話。
0355デフォルト名無しさん(272)NGNG
ループ中に割り込み処理ができるようにAfxBeginThreadを使って
マルチスレッドを作ったのですが、今度は、外部出力からの信号を読み取って
もらえなくなってしまいました。
どうすればいいのでしょうか。対処法をお願いします。
0356日下部圭子 ◆ib749tYo NGNG
In article >>353, デフォルト名無しさん/353 wrote:
> a[i] = 100 * rand()/RAND_MAX;

RAND_MAXで割ると常に0になりますよ。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0357日下部圭子 ◆ib749tYo NGNG
In article >>356, デフォルト名無しさん/356 wrote:

> > a[i] = 100 * rand()/RAND_MAX;
> RAND_MAXで割ると常に0になりますよ。

これは間違いでした。
最初に100をかけているから大丈夫ですね。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0358デフォルトの名無しさんNGNG
TRACE!
TRACE!
0359デフォルトの名無しさんNGNG
>>356-357
……はぁ...
0360デフォルトの名無しさんNGNG
>>355
答えようが無い。もっと詳しくかいてくれ。
0361デフォルトの名無しさん(355)NGNG
>>360
遅くなってすいません。
詳しい内容として、こんな風にマルチスレッドを作ったのですが、
for(time=0;time<10;time++){
Sleep(10);
DioOutputWord( InOut, FBIDIO_OUT1_16,kekka);
AfxBeginThread(ACK,myED2);
}
UINT ACK(void *pParam)
{
CEdit* pED2 = (CEdit*)pParam;
UINT exitCode;
exitCode=0;

DioInputWord( InOut, FBIDIO_IN1_16, &InData);
while(InData == 1)
{
if(stop_flg){
AfxEndThread(exitCode);
break;
}
Sleep(10);
DioInputWord( InOut, FBIDIO_IN1_16, &InData);
if(InData != 1){
AfxEndThread(exitCode);
DioInputWord( InOut,FBIDIO_IN1_16,&InData);
return 1;
}
}

stop_flg = TRUE;
return 0;
}
原因としては、外部出力側の関数を抜けるとそのままfor関数の中に戻って
しまい、そのままずっとfor関数の処理を行ってしまっているようなのです。
for関数から抜け出すにはどうすればいいのでしょうか。
0362名無しさんNGNG
割り込んですまそ。マルチスレッドに関して。
AfxBeginThreadで呼び出す制御関数は、呼び出すクラスと同じ
クラスのメンバ関数ではダメなんですか。
コンパイルが通らないので、試しにメンバ関数じゃなく、
クラス宣言の外に制御関数を出したらコンパイル通ったんですが。
0363デフォルトの名無しさんNGNG
>>361
while(InData == 1) で無限ループしている間に、もう一回この関数に入ってくるのか?
具体的に何をどうしたいのかが分からん。
つーか、物凄く物凄いことをしてるような気がする。
行単位で「何のためにどういうことをしたくてこうしたのか」を書いてくれるとありがたい。
私には理解不能のためパス(笑)

>>362
とりあえず static にしとけー
んでもって基本を勉強しとけー
漏れもやっとくから
0364デフォルトの名無しさんNGNG
>>361
>>部出力側の関数を抜けるとそのままfor関数の中に戻って
>>しまい、そのままずっとfor関数の処理を行ってしまっている
単独で出てくる変数などがあってこのプログラムで何をしようとしているのかいまいちわからないです。期待している動作を説明してクレイ
0365デフォルトの名無しさんNGNG
>>362
別スレッド立てる時は
1.グローバル関数を作る
2.別クラスを作る      の2通り。
同一クラス内に複数のスレッドをたてるのは×
0366362NGNG
>>363 >>365 ありがとう。
やはり、363さんの言ってるとおり、基本をまだしっかり解ってないんでしょうね。
スレッドとかプロセスとか、イメージは掴めてるつもりなんですけど、実際に
コンピュータでどう実現されてるか理解してないってことかな。勉強します。
0367デフォルトの名無しさん(355)NGNG
>>364
要は簡単にいうと、インターフェースボードからの信号(InData)と
、GUIのコマンドボタンからの動作をマルチスレッドにして両方から
信号を受信できるようにしたいのです。それでこんなプログラムに
なってしまったのです。
そのプログラムを詳しく言うと、for関数の中でインターフェースボードに
信号を送ります。
UINT ACK(void * pParam)関数のところでインターフェースボード
からの信号を受け取り、その信号に対してwhile関数を抜け出し、
なおかつマルチスレッドを使って、GUIからのコマンドでもwhile
関数を抜け出して動作処理を行おうとして行き詰まっています。
 ちなみに、シングルスレッドでは、インターフェースボードか
らの信号のやり取りができるプログラムはできています。

0368デフォルトの名無しさんNGNG
>>361
悪い。もうちょっと詳しく。
まず、「外部出力」とはなんなのか。制御関数の事か?
あとfor文の中のsleep(10)はなんのためにやっているのか。
DioXXXWord(...)(ライブラリにある関数だったらゴメン)とはなんなのか。
このプログラムだとワーカスレッドがたくさん生成されるが、これは意図した事なのか?

>ループ中に割り込み処理ができるようにAfxBeginThreadを使って
そのループをワーカスレッドでやってはだめなのか?
0369368NGNG
しつこいが、if(stop_flg){
AfxEndThread(exitCode);
break;
}
のbreakもよくわからん。
0370デフォルトの名無しさんNGNG
>>368
「外部出力」ていうのは、インターフェースボードでの信号のやりとりで、
DioxxxWord()はip5000のライブラリにある関数です。(こうしないと信号のやり取りができません。)
また、インターフェースに信号を送信,DioInputWord()でコンピュータが信号を受信する関数となっています。
あと、sleep(10)ですが、単なる時間稼ぎみたいなものです。(本当は、for文使わずsleepだけでいいのかも。
く(^^;))
0371デフォルトの名無しさんNGNG
>>370
ちょい付けたし、breakはGUIのコマンドがきたら、関数を抜け出すというコマンドです。
0372暇人NGNG
こういうことでしょう。多分。

UINT ACK(void *pParam)
{
 ...
 do {
  Sleep(10);
  DioInputWord( InOut, FBIDIO_IN1_16, &InData);
 } while(InData == 1 && !stop_flg)

 if(stop_flg) {
  stop_flg = TRUE;
  return 0;
 }
 return 1;
}

作ったスレッドの終了を検知したかったら、WM_USER_XXXを定義して、
それを returnの前にでも PostMessageする。GUIの関数(ダイアログ?)に。
GUI関数側の WindowProcでそのメッセージを捕まえるんだ!
0373暇人NGNG
あ、stop_flgのとこおかしいね。
 if(stop_flg)
  return 0;
 
 stop_flg=TRUE;
 return 1;
}
0374デフォルトの名無しさんNGNG
stop_flgはvolatileなの?
0375デフォルトの名無しさんNGNG
>>372さん
ありがとうございます。それでやってみようと思います。
0376デフォルトの名無しさんNGNG
プログラムをWin32 Debugモードで動かすと、
あるポインタ変数の中身が勝手に
"0xfeeefeee"
というふざけた値になっています。どうしてでしょう?

0377デフォルトの名無しさんNGNG
>>371
369の「breakが解らん」はAfxEndThread(exitCode);の後にあったからですよ。
0378デフォルトの名無しさんNGNG
>>376
それは、キミが初期化を忘れてる兆候だ。
0379デフォルトの名無しさんNGNG
0xbacabaca じゃなくてよかったね。
0380デフォルトNGNG
MFC+VCで質問です。
ダイアログボックスベースのプログラムで
自分で作ったほかのクラスから
一番上のウインドウハンドル
m_hWndを得るにはどうしたら良いでしょう?
CxxDlg::GetSafeHandle
したり
CxxDlg::m_hWnd
したり
よくわからないままいろいろしてるのですが、どれもうまくいきません。
初心者カキコです。すまんです。
0381デフォルトの名無しさんNGNG
GetParentOwner()->GetSafeHwnd()
したり
GetParentOwner()->m_hWnd
したり?
0382380NGNG
>381
ありがとうございます。でも
それだと
CWndの下のクラスでしか使えないみたいです。
たとえば
自分でソケットを扱うクラスを別に作ってその中でウインドウハンドラをつかいたいばあい
class mySocket{
SOCKET socket

mySocket(){
//たとえばここでメインダイアログのハンドルを手にいれたい
//WSASYNCSELECTをつかったりするときに。
}
}

といった感じです。
いろんな場面でそれにぶち当たるのです・・
0383デフォルトの名無しさんNGNG
>>382
AfxGetMainWnd()->GetSafeHwnd() とかなんとかそんなの。
0384デフォルトの名無しさんNGNG
継承できるなら、ATL式に、
template<class T>
class CMySocket : public class T{
... GetSafeHwnd(),
}
class CUseSocketWnd : public CMySocket< CWnd > {};
とか、
template<class T>
class CMySocket{
... static_cast<T*>(this)->GetSafeHwnd()...
}
class CUseSocketWnd : public CWnd , public CMySocket< CUseSocketWnd > {};
するとかどうよ?
0385380NGNG
CListBox * UserList = (CListBox*)GetDlgItem
(AfxGetMainWnd()->GetSafeHwnd(),IDC_USERLIST);
UserList->InsertString(-1,"test");

リストボックスのテキストを
こんなかんじで書いてみたらコンパイラはとおりました。
でも"text"が表示されないです。

メインダイアログのクラスの中で
CListBox * UserList = (CListBox*)GetDlgItem(IDC_USERLIST);
UserList->InsertString(-1,"test");
こうするとちゃんと表示されます。うーーーーーむ
0386デフォルトの名無しさんNGNG
> AfxGetMainWnd
> アプリケーションが OLE サーバーではない場合は、アプリケーション オブジェクトの m_pMainWnd を返します。
0387デフォルトの名無しさんNGNG
超初心者です、教えてください。
 「これから始めるVC++ 6.0」 で独学しています。アプリケーションウィザード
を使って作る「時計の制作」の例で、時計のオブジェクトIDに対するメンバー関
数をCMainFrameに書くようになっています。
 他の例ではViewクラスに記述する例が多く書かれていたのでいので、そちらに
書いてみると動作しました。オブジェクトに対するハンドラをCMainFrame に割
り当てるのと、Viewクラスに割り当てることの違いは何なのでしょうか?
0388デフォルトの名無しさんNGNG
>>380
> 一番上のウインドウハンドル
> m_hWndを得るにはどうしたら良いでしょう?
> CxxDlg::GetSafeHandle
> したり
> CxxDlg::m_hWnd
> したり

一番上かはともかく、取得したいダイアログのクラスがCxxDlgってわかってるなら
CxxDlg dlg;
HWND hwnd = dlg.m_hWnd;
でいいのでは?
0389デフォルトの名無しさんNGNG
ビューとドキュメントの分離をして
わかりやすく
0390デフォルトの名無しさんNGNG
>>387
本の内容は知らないけど、メッセージはView、Doc、FrameWnd、App
それぞれのクラスに順番にルーティングされるから、どっちのクラスに
書いても動いたのでしょう。著者が書く場所を変えたのは、メッセージの
種類を分別してわかりやすくしようとしたからでしょう。
0391デフォルトの名無しさんNGNG
387 です。
 390さん有り難うございます。
 メッセージが順番にルーティングされるということは、メッセージ
ハンドラをどこに置いてもよいような感じなのでしょうか。
 確かにクラスウィザードを見てみると、クラス名を変えてもオブジェ
クトIDの内容はほとんどそのままなので、メッセージハンドラはどの
クラスに書いてもOKということなのですね?


0392380NGNG
>388
レスありがとうございます。
ずっと一生懸命
extern CxxDlg dlg;
してました。

CxxDlg dlg;
だとdlg.したときに補完機能がちゃんと働きますね!

CListBox * UserList = (CListBox*)GetDlgItem
(dlg.m_hWnd,IDC_USERLIST);
でもこれでリストボックスのハンドルを得てから

UserList->InsertString(-1,"test");
こうして項目を追加すると落ちてしまいます・・・

〜の命令が〜のメモリを参照しました。メモリがreadになることはできませんでした
のエラーです。
リストボックスの使い方もいろいろ見てみたのですが、う〜〜ん。
0393デフォルトの名無しさんNGNG
つか、GetDlgItemの戻り値くらいチェックしろよ。
0394デフォルトの名無しさんNGNG
>392
落ちるのは当たり前ですよ。
::GetDlgItem(HWND hWnd, int nID)の戻り値は、CWnd* ではなく、HWND。

こういうことだろうか?
CListBox* UserList = (CListBox*)CWnd::FromHandle(::GetDlgItem(AfxGetMainWnd()->m_hWnd, IDC_USERLIST));

っていうか、これで良いと思う。
CListBox* UserList = (CListBox*)(AfxGetMainWnd()->GetDlgItem(IDC_USERLIST));
実際可能かどうかは分からないけど。
0395380NGNG
>394
ありがとうございます。!
できました。まだMFCクラスの木構造を把握してないので、
正直わかったようなわからんようなですが、
勉強します。
0396デフォルトの名無しさんNGNG
CListBox UserList( ::GetDlgItem(dlg.m_hWnd,IDC_USERLIST) );
では?
0397デフォルトの名無しさんNGNG
>396
新しいインスタンス作ってどーすんのよ?
それに CListBoxのコンストラクタに HWNDを渡すのなんて無いよん。
0398デフォルトの名無しさんNGNG
スマソ。WTLにはあったもんやから‥‥
0399デフォルトの名無しさん NGNG
VCで作ったもののインストーラーを作りたいんですが、
VBで選んでいくだけで、できるような機能はありますか。
検索ワードでも良いので教えてください。お願いします。
0400デフォルトの名無しさんNGNG
Visual Studio® Installer
0401___NGNG
すみません。すれ違い怒られてこっちきました
猫でもわかるhttp://www.kumei.ne.jp/c_lang/mfc/mfc_01.htm
でMFCの勉強をしようと思って
第一回のソースをそのまま打ち込んでみたのですが、
#include "afxwin.h"

class CMyWindow : public CFrameWnd
{
public:
CMyWindow();
};

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

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

BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMyWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMyApp myApp;

コンパイルはできるが実行時にリンカが
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です
Debug/SDKTOMFC.exe : fatal error LNK1120: 外部参照 2 が未解決です。

この3つのエラーを出してしまいます。
VCのバージョンのせい(使っているのはVC6)
かもと思っているのですが、解決策ありましたら教えてください。
0402デフォルトの名無しさんNGNG
/MTかな
0403デフォルトの名無しさんNGNG
>>401
それって典型的なMFCしてないエラーじゃないか
プロジェクト作成でMFC APPウィザード(exe)で作った?
もしかしてWin32 applicationで作ってやってない?

俺も前にCStringをWin32 applicationで使おうとしたらそんなエラーでた
0404でふぉるとのななしNGNG
リストボックスのある行をダブルクリックするとダイアログが出て
そこのエディットボックスにリストボックスの内容が入っているという
コードを書こうとしています。
IRCやなんかのインスタントメッセージを想像してもらえるとよいかと思います)
IM ImDialog;
ImDialog.DoModal();
でダイアログを出して
その中のIDC_IMTARGET
のエディットボックスのハンドラをてにいれようとこんな
コードを書きましたが、エラーが出ます。なぜでしょうか?
CEdit* EditBoxIm = (CEdit*)ImDialog.GetDlgItem(IDC_IMTARGET);//ここでエラー
EditBoxIm->SetWindowText(ss);

0405デフォルトの名無しさんNGNG
>エラーが出ます。なぜでしょうか?
詳しくエラーの種類の書かずに対処法を求める
あなたの態度が原因ではないでしょうかね?
0406デフォルトの名無しさんNGNG
VS.NETが出たらMFCの運命は如何に・・・
0407でふぉるとのななしNGNG
>405
失礼致しました。
Debug Assertion Failed

Program C*〜〜
File:winocc.cpp
Line:76

といったエラーです。
さらにもう一つ関連する部分で疑問が出たのですが
ダイアログが最初にDoModalされた後に
初期化処理をする方法って
どうやるのでしょうか?
アプリケーションならばInitInstance
ウインドウならばOnPaintに初期化の処理を書けばいいのだと思いますが、
みようみまねで、OnInitDialog()
関数を作って書いてみたのですが、それも上記と同様のエラーが出てしまいました。
0408デフォルトの名無しさんNGNG
Winocc.cpp (76) : ASSERT( ::IsWindow(m_hWnd ) );
これの意味がわかりませんか?
ImDialogがウインドウではない、ということです。

まさか、
ImDialog.DoModal();
CEdit* EditBoxIm = (CEdit*)ImDialog.GetDlgItem(IDC_IMTARGET);
EditBoxIm->SetWindowText(ss);
と続いているのでしょうか?なら、制御がDoModalから帰ってきた時点で、
ImDialogは破棄されているはずですが。
0409でふぉるとのななしNGNG
>408
ありがとうございます。
DoModalを勘違いしていたようです。
Winocc.cppを見てみました。

ならば、と思い順番を入れ替えてこんな感じにしてみましたが
やはり同じエラーが出てしまいました。
IM ImDialog;
CEdit* EditBoxIm = (CEdit*)ImDialog.GetDlgItem(IDC_IMTARGET);
EditBoxIm->SetWindowText(name);
ImDialog.DoModal();

やはりImDialogがWindowじゃないとの
ことなのですが・・・この場合は定義してDoModalの前だから
ウインドウではないかと思ってしまうのですが・・・・


0410デフォルトの名無しさんNGNG
ちゃんとモーダルダイアログとモードレスダイアログの
処理方式の違いについて勉強しる!

DoModalを発行した時点でダイアログが作られ、そのなかで
メッセージループが廻る。制御が戻るのは、ダイアログ
プロシージャでEndDialogを発行して、ダイアログが破棄されてから。
だから、SetWindowTextをDoModalとおなじ文脈で書くのは間違い。
0411デフォルトの名無しさんNGNG
つーかだね、その機能をモーダルダイアログで実現
するのは、そもそも設計からして大間違いなんだが。
0412デフォルトの名無しさんNGNG
CFileDialog って、
CFileDialog(TRUE, _T(".txt"), NULL,
OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT,
lstrFileExt, NULL);
で問題ないよね?
VS.NET だと複数選択して開くと IDCANCEL が返って
くるんだけど…
なんか馬鹿やってるのかなぁ
0413でふぉるとのななしNGNG
>410.411
なるほど。
うんと考えてこんな感じでできました。
IM *ImDialog = new IM(this);
ImDialog->Create(IDD_IM);
ImDialog->ShowWindow(SW_SHOW);
CEdit* EditBoxIm = (CEdit*)ImDialog->GetDlgItem(IDC_IMTARGET);
EditBoxIm->SetWindowText(name);
でもなんか試行錯誤してて
すごくわかった気がします。
0414デフォルトの名無しさんNGNG
単純にIMダイアログクラスのエディットボックスにClassWizardで
CStringメンバ変数を割り当てておいて、
IM ImDialog;
ImDialog.m_strImtarget = name;
ImDialog.DoModal();
とでもすればいいような気もするけどなぁ。
IRC使ったことないからわからないけど、DoModalじゃだめらしいんで
流してくれていいけどさ。
0415デフォルトの名無しさんNGNG
>>401
メニューの[プロジェクト]→[設定]→[一般]タブ
で、[共有DLLでMFCを使用]を選択するとどう?

>>403
いや、AppWizard使ったらスクラッチで書く必要ないやろ...
0416デフォルトの名無しさんNGNG
>>406
も、も、漏れもそろそろManagedも勉強するよ・・・
0417デフォルトの名無しさんNGNG
CD-TEXTのテキストデータって
どうやって取得するんでしょうか?
0418デフォルトの名無しさんNGNG
>>416
今さらMFCを勉強してる俺って・・・
0419デフォルトの名無しさんNGNG
こう次から次へと
新しいのを出されると
困るわぁ
0420デフォルトの名無しさんNGNG
仕事でやるならともかく個人で使ってるだけなら、ManagedC++が
浸透して「CLR(・∀・)ii!!」ってなるまでMFCやってるべ。
0421デフォルトの名無しさんNGNG
・・・オラはあきらめてC#にするだ。ManagedC++なんてどこまで保証してくれるか
わからんし。
0422デフォルトの名無しさんNGNG
まだよく勉強してないんだけど、Managed C++とMFCって別物だよね?
だったら、C#でWindows Formsやった方が・・・
0423デフォルトの名無しさんNGNG
ボタン配置して、それが押されたときに
背景の色変えるのってどうしたらいいですか?

0424た。NGNG
>>423
ボタンの背景?ウインドウの背景?
ボタンの背景だったらオーナードローで書き換えて上げるしかないか?
0425デフォルトの名無しさんNGNG
>>423
もしかして、いやそんなはずは無いと思うが、万が一、何かの間違いかもしれないが



HTMLじゃないよね?
0426423NGNG
ボタンが配置されてるウィンドウの背景です。
背景色を変えれる関数ってないんですかね?

MSDNとかで調べたつもりなんですけど
初心者なもんでわからなかった…
0427デフォルトの名無しさんNGNG
Googleで「背景色 変更 MFC」を検索すれば一番最初に出たんだが・・・
SetDialogBkColorとかOnCtlColor。
0428423NGNG
>>427
それってボタン押したときに使えなくないですか?
ウィンドウの初期化に使うって書いてあったんですけど。
0429デフォルトの名無しさんNGNG
>>428
どこに書いてあったのよ
0430デフォルトの名無しさんNGNG
OnCtlColor
0431423NGNG
SetDialogBkColorの解説にそんなようなことが書いてあったような…
でもOnCtlColorの方で出来そうなんで調べてみます。
ありがとうございます
0432デフォルトの名無しさんNGNG
>>428
書いてあったとかじゃなくてまず試せよ。
0433デフォルトの名無しさんNGNG
>>428の発言はなんかフワフワしてるな。
今度からもうちょい詳しく書いてくれないと答えにくい。
0434デフォルトの名無しさんNGNG
>432
私は428ではありませんが、VCの別の問題にテンパッて居り、
解決策を求め スレを読んでいました。御助言によって開眼し
早速 試行錯誤を繰り返し、さっき 問題の原因を発見できました。

唐突な電波じみたカキコで 恐縮ですが、
お礼を言いたく・・・ありがとうございました!
0435デフォルトの名無しさんNGNG
Editボックスに変数の中身を表示させたいのですがどうすればいいのでしょうか。
ちなみにプログラムは

ss1 = "[%2d]X=%3d Y=%3d R=%4.2f \r\n",j+1,X,Y,R;
m_Status = m_Status + ss1;
myED1->SetWindowText(m_Status);

という風になっています。
どうすればいいのでしょうか。
0436デフォルトの名無しさんNGNG
>>435
>ちなみにプログラムは ......という風になっています。

?何?自分で書いたプログラムじゃないってこと?
それとも、コンパイル通らないからナントカしてくれってコト?
0437デフォルトの名無しさんNGNG
>> 435
変数の型がわからんけど、

char ss1[100];

だとしたら、

sprintf( ss1, "[%2d]X=%3d Y=%3d R=%4.2f \r\n",j+1,X,Y,R );

こうかな。

0438デフォルトの名無しさんNGNG
>>437
いや、'+'のオーバーロードつかってるから、
CStringだろう。
0439438NGNG
SetWindowTextの引数でLPCTSTRキャストしてないところからみても・・・
しかし、どうして欲しいのかが解らん。
0440デフォルトの名無しさんNGNG
ss1.Format( "[%2d]X=%3d Y=%3d R=%4.2f \r\n",j+1,X,Y,R);
じゃねーの?
0441デフォルトの名無しさんNGNG
>>438
> いや、'+'のオーバーロードつかってるから、
> CStringだろう。

m_StatusがCStringだったら、ss1はchar*でもCStringでもOKじゃん。
(m_StatusはCStringだけど)
0442438NGNG
>>441
たしかに。・・・で肝心の435は?
0443デフォルトの名無しさんNGNG
>>442
437か440でOKなんじゃないの。
なにか不足でも?
0444デフォルトの名無しさんNGNG
>>435がいないが解決、と。
0445デフォルトの名無しさんNGNG
何がしたくて何ができなかったのかを書かないで
質問する人が最近多い気がする。
0446435NGNG
ありがとうございました。
0447デフォルトの名無しさんNGNG
>>446
ワラタ
0448446NGNG
>>447
ありがとうございました。
0449デフォルトの名無しさんNGNG
CString name;
name = "御前 藻名";
SetWindowText(CString("私の名前は") + name + CString("です。"));

上記のようなプログラムがあって、変数nameに名前を入れた後、
SetWindowTextで名前の前後に文字を入れて+演算子で結合して実行したのですが、

実行結果
私の名前は
で終わってしまい、正しく表示されません。
何がおかしいのでしょうか?
0450デフォルトの名無しさんNGNG
あ、エディットボックスに表示したいんです。
0451仕様書無しさんNGNG
SetWindowText("私の名前は" + name + "です。?");
0452449NGNG
>>451
うまくできないー。
CE用のアプリケーションを開発しているんだけど、
eVCじゃ無理なのかな?
0453デフォルトの名無しさんNGNG
CEってUNICODEじゃなかった?
name = L"御前 藻名";
とかしなくても自動で変換してくれるの?
0454449NGNG
>>453
nameの部分は本来レジストリから取得しています。
引数に使っている(LPByte)(LPCTSTR)を流用して、

name2=(LPByte)(LPCTSTR)name;
とし、SetWindowTextしてみたところ、最初の一文字'a'だけ表示されるようになりました。
もうちょっとって感じなんですが、後はどうすればよいのかわかりません。(涙
教えて厨で申し訳ありませんが、ご教授よろしくお願いします。

0455デフォルトの名無しさんNGNG
>>449
…ちゃんとレジストリ読めてる?
RegQueryValueEx()を呼び出してるなら、最後の引数“LPDWORD lpcbData”は
受け取る最大文字数を指定しとかないといけないんだけど。
あと、引数に name を直接指定してないよね?
0456デフォルトの名無しさんNGNG
CDec ってMFC?
これに相当するAPI関数はないですか?
0457デフォルトの名無しさんNGNG
>456 それはVB。
Cだったらキャストするかstrto系で変換するかのどっちかだろう。
0458デフォルトの名無しさんNGNG
CListView(CListCtrl)で特定の項目だけ色を変える、とかはどうやれば良いんでしょう?
0459デフォルトの名無しさん NGNG
MFCを使い出して2週間くらいの初心者です。
とりあえずダイアログベースのアプリケーションは組めるようになりました。
そしてSDIに挑戦しようと思ったのですが、
テキストを普通に表示する方法がわかりません
TextOut関数みたいに場所を選択するのではなく
コンソール画面のように改行を含めたテキストを簡単にばーっと
表示する部分が欲しいのです。
ダイアログベースならば、EditBoxを使えば簡単に出来るのですが、
SDIの場合どのようにしたらいいのでしょう?
とりあえずドキュメントクラスにCString型の変数を作って
そこにデータをいれてViewクラスのOnDraw関数で表示すればよいの
だろうと思っているのですが・・・・。
なにやら本をみてもフォントの高さを測って
位置を計算して、出力みたいに書いてありますが、
そうするしかないのでしょうか?
Visual C入門ビギナー編、シニア編どちらも買ったのですが、書いてないのです。
ひょっとしてあまりにも簡単すぎて情報がないのでしょうか・・?


0460( ・∀・)つ旦NGNG
すみません、ちょっとご教授願えないでしょうか。
CButton等コントロールを自分でCreateするときに、
渡すIDってどうすればいいのでしょうか?

このIDはどのように使われるもので、
どういう制約があるのか等がわからないのですが…
0461デフォルトの名無しさんNGNG
>458 CustomDraw
>459 AllocConsoleして、WriteConsole (w
   エディットビューかなんか使えば?
>460 コントロールが親にWM_COMMANDとしてメッセージ飛ばすときに使う。
0462デフォルトの名無しさんNGNG
>461
なるほどエディットビューを使うのですね。試してみます。
またちょっと話が変わるのですが、
Docクラスの外部からDocumentクラスのメンバにアクセスするにはどのようにするのでしょうか?
ViewクラスではCXXDoc pDoc = GetDocument();
でpDocを手に入れていますが、自分で作った外部の関数からはGetDocument画使えませんよね。
WinAppクラスならば extern CXXApp theApp;
してメンバにアクセスできますが、Documentクラスの場合うまくいかないようです
0463デフォルトの名無しさんNGNG
ttp://techtips.belution.com/ja/vc/0056/
みれ。
0464VB厨房NGNG
VBでいうコントロール配列みたいな事はどうやったら出来るんでしょか・・・
0465デフォルトの名無しさんNGNG
>>464
コントロール配列って何?
どんな機能があんの?
0466デフォルトの名無しさんNGNG
>>465
コントロールが規則正しく並んだら面白いな。
0467( ・∀・)つ旦NGNG
>コントロールが親にWM_COMMANDとしてメッセージ飛ばすときに使う。

ありがとうございます。
しかし、そうするとWM_COMMANDを発行する気のないコントロールは
適当な値を渡して(・∀・)イイ!!という事なのでしょうか?

0468デフォルトの名無しさんNGNG
>464
ClassWizardで各コントロールにメンバ変数を割り当てた後、ソースを検索して
手作業で配列に書き直すのが楽。
書き換えた部分は //{{ …… //}} のブロックの外に出しておくのを忘れずにな。
メッセージハンドラは、IDを連番にしておいて ON_COMMAND_RANGE とかで対処。
0469VB厨房NGNG
ヤパーリvectorとかいうやつを使うのでしか?
0470VB厨房NGNG
>>468サンクス!
けどこの方法で動的に配列増やすことはできるのでしか?
コード中でコントロールをゴリゴリ増やしたいのでし。

>>469は気にしないで・・・
0471デフォルトの名無しさんNGNG
>>467
WM_COMMANDを呼びだそうが、呼び出すまいが、かぶったら駄目だし
かぶらねければ良い。

心配だったらresource.hでも覗けばよろし。
0472デフォルトの名無しさんNGNG
>471
static controlはどうなる?
0473VB厨房NGNG
>>465、>>467スマソ
説明できん。。。
Googleあたりで「vb コントロール配列」で探せば山ほど当たるからそっち見て
0474デフォルトの名無しさんNGNG
>>472
その辺は常識範囲内だろ。・・・・多分。
0475デフォルトの名無しさんNGNG
>470
動的にコントロールを増やす場合は、ON_COMMAND_RANGEとか、
ClassWizardとかを使わずに、WindowProc(仮想関数)を
オーバーライドし、WM_COMMANDを直接処理するのが良いと思う。
0476( ・∀・)つ旦NGNG
>>471
了解しました。ありがとうございます。
重複しないように気をつけるです。

私は、いままでストリングテーブルとかでダミーをつくって
それのIDを使うようにしてたんですけど…
コーディングの時に何かリソースエディタが作るIDとかと
かぶならいための方法とか
あるんでしょうか?
0477VB厨房NGNG
>>475ありがとう。
意味がほとんど分からなかったので、
自分にはまだ無理だということが分かったょ

ぅTo the see 脳
0478デフォルトの名無しさんNGNG
>>476
ID作るなら[表示]→[シンボルブラウザ]で新規作成したほうが楽では。
連番でID作ってくれるからかぶらないし。
0479学習中NGNG
ドローイングソフトを試作中です。
現在、マウスで線は書けるのですがちょっと発展させてプルダウンメニューを
追加し、「始点を固定する」、「X軸を固定する」「Y軸を固定する」の3通りの
変化を付けられるように、メニューを作成してやってみましたが、
c:\documents and settings\public\デスクトップ\draw2\draw2.cpp(12) : fatal error C1083: インクルード ファイルがオープンできません。'resource.h': No such file or directory
cl.exe の実行エラー
プルダウンメニューと元のソースの連携が出来ていないのか起動しません。どう対処したらよろしいでしょうか?
0480デフォルトの名無しさんNGNG
>VBのコントロール配列っていうやつ
CArrayでコントロールの配列クラスを作るとか。
やったことないので詳しくはわからんけど。

>>479
コメント見る限りだとresource.hが無いらしいけど、そのファイルはちゃんと
あって、インクルードされてる?
0481デフォルトの名無しさんNGNG
>>479
プロジェクトに入ってないんじゃねえの?わかんねえけど・・。
0482( ・∀・)つ旦NGNG
>ID作るなら[表示]→[シンボルブラウザ]で新規作成したほうが楽では。
おお、こんなものがあるとは、ありがとうございます。
気づけ、自分。
0483デフォルトの名無しさんNGNG
>>479
MFC でも VC++ でもない、それ以前…
対処も何も、同じディレクトリにあるべき resource.h がないって
出てるじゃん。
どこに捨てたの?
0484デフォルトの名無しさんNGNG
あるソフトをつくりたいのですが、二つexeがあるのです。
片方の方で、最初動かして、あるボタンをおしたらもうひとつの方が起動するってのを
やりたいのですが、どういうほうほうがありますでしょうか?
0485デフォルトの名無しさんNGNG
>484
ShellExecute , CreateProcessなんか。
0486デフォルトの名無しさんNGNG
>>484
ShellExecute
0487デフォルトの名無しさんNGNG
ありがとう
>485
0488デフォルトの名無しさんNGNG
もうひとつ質問なんですが、リソースに他のexeファイルを埋め込む
ってことはできるのでしょうか?
あと、その他のexeファイルを隠したいです。
0489デフォルトの名無しさんNGNG
なんでexeを二つにしたですか
0490デフォルトの名無しさんNGNG
統合するのがめんどうだったのでw
0491デフォルトの名無しさんNGNG
笑えませんが。
0492超初心者NGNG
あるディレクトリ内にある、特定の文字列を含んだファイルを
全て自動的にロードする、というプログラムはどう組んだらよろしいのでしょうか?
例えば、
abc000.dat、abc001.dat,abc002.dat…
などのファイルが存在し、ディレクトリ内の
abc●●●.datを全てロードすると言う感じで。
よろしくお願いします。

↑↑
他スレに書いたんですが、レスがついてないので
こちらでお願いすることにしました。
やはり、一つ一つロードしてみるしかないんですかね?
0493デフォルトの名無しさんNGNG
検索かなり粘って
やっとlibpngとlibjpeg組み込んでPNGとJPEGファイル
表示できるようになりました

それにしてもPNGはとにかくJPEGって
ビットマップ並に使われてるのにソースなんかを
紹介してるプログラムの本って
ほとんどないですね(私が見落としてるだけ?

つーかSDK標準で組み込んでないのがそもそも疑問
なんでだろう(w
0494デフォルトの名無しさんNGNG
>>492
MSDNで
FindFirstFile
を検索してみて
0495デフォルトの名無しさんNGNG
>>492
※ p はフォルダのパス(c:\windows など
abc●●●.datを検索したいなら

void hoge(LPCTSTR p)
{
CString cstr;
WIN32_FIND_DATA ffd;
HANDLE hFindFile;

cstr.MakeLower();
cstr.Format("%s\\abc*.dat", path);
hFindFile = ::FindFirstFile(cstr, &ffd);
if(hFindFile != INVALID_HANDLE_VALUE){
do{
cstr = ffd.cFileName; // ここのcstrにファイル名一覧がくる
}
while(::FindNextFile(hFindFile, &ffd));

::FindClose(hFindFile[0]);
}
}
0496誤爆NGNG
あ、p == pathね
0497超初心者NGNG
>>494-496
ありがとうございました。早速明日試してみます。
0498デフォルトの名無しさんNGNG
visual C++で「共有DLLでMFCを使用」というプロジェクト設定で
コーディングしていて、エラーもなくVisual C++からでもバイナリ(exe)単体でも
起動するのですが、「MFCのスタティックライブラリを使用」に設定を変えてビルドし直して
起動するとアプリケーションエラーになって起動しません。
要因としては何が考えられるでしょうか。
(Debugモードでビルドしていますが、Releaseでも同じ結果になりました。)
0499かるかん ◆TM3.ie9w NGNG
>498
スタンダードエディションではできない。
0500かるかん ◆TM3.ie9w NGNG
って、ビルドは出来てるってこと?なら違った。
大概は変数の初期化忘れとかなんだけどね。
mallocして初期化しないでそのまま使ってるとか。
0501498NGNG
>500
ビルドはできます。
その線で洗ってみますね。
0502デフォルトの名無しさんNGNG
>>498
なんで、どういうアプリケーションエラーが出てるかを書かないかなー
0503デフォルトの名無しさんNGNG
どっかに技術ML用質問テンプレみたいのなかったっけ…
あれみたいにかしこまって書かなくてもいいけど…
0504デフォルトの名無しさんNGNG
これか?
http://www.hyuki.com/writing/techask.html
0505デフォルトの7子NGNG
CViewで作っていたアプリのViewの部分を
CEditViewに変更する必要がでましたので、
CEditViewを継承して新しくクラスをつくり
アプリケーションクラスのInitInstanceの

pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CKunekuneDoc),
RUNTIME_CLASS(CMainFrame), // メイン SDI フレーム ウィンドウ
RUNTIME_CLASS(XXXNewView));
                   ↑
 この部分をXXXNewViewに変更しました。
するとウインドウの部分にカーソルが出て確かにEditViewクラスにはなっているようですが、
OnDraw関数に何か書き込んでも、表示することが出来ません。なぜでしょうか?
0506デフォルトの7子NGNG
505です。
すみません。
それ以前の問題のようでした。

CEdit *ED1 = &GetEditCtrl();
ED1->SetWindowText("test");

のこのコードをスケルトンがまっさらの状態から試してみたのですが
なにも表示されませんでした・・・。
コンパイラもとおるので何が間違っているのでしょう?・・?
0507デフォルトの名無しさんNGNG
GetEditCtrl()->SetWindowText("test");
ならどうですか
0508デフォルトの名無しさんNGNG
>>506
CEdit &ED1 = GetEditCtrl();
0509デフォルトの名無しさんNGNG
ビットマップを切り取りたいんだけどどうすればいいの?
StretchDIBits だと矩形でしょ。
それを三角形とか五角形とかでやりたい
0510デフォルトの7子NGNG
>507,508
ありがとうございます。お二方の方法を両方ともやってみました。
ところがどちらも何も表示されませんでした。

状況はMFCアプリケーション,SDI,使用クラスはEditViewを
選択し、まっさらのスケルトン状態で
OnDraw関数に書きこんでいます。
ただ最初の状況で文字を表示したいだけなのですが、
こんなにややこしいとは・・・・・
0511507NGNG
>>510
失敬、GetEditCtrl().SetWindowText("test"); です。
あと書く場所はOnInitialUpdateあたりで。
0512デフォルトの名無しさんNGNG
現在VC++でDIBを使い画像を表示しているのですが、
その画面上にシールみたいな奴
(周囲を四角で囲って中に情報を書き込む)を作りたいのですが、
どのようにしたらよろしいでしょうか?
四角を作るだけなら簡単ですが、中に文字をかくとなると…?
0513デフォルトの名無しさんNGNG
>>510
たぶん、CEditView派生のクラスだとOnDraw呼ばないよ。
0514デフォルトの名無しさんNGNG
コードからフォルダを開きたい。
フォルダをダブルクリックしたとき見たく開くにはどうすればいいですか?
0515デフォルトの名無しさんNGNG
パスでも指定して開けば?
_っていうかフォルダ開いて何したいかが問題。
0516デフォルトの名無しさんNGNG
ShellExecuteとか言って欲しいんだと思われ。
0517デフォルトの名無しさんNGNG
>>515-516
レスありがとうございます。試してみます。では。
0518デフォルトの名無し(435)NGNG
"教えてクン"ですいませんが、またまた、Editのところでつっかえたのですが、
コンソール(MS-DOS)のようにすぐに(X,Y)座標の位置を表示しようとしたのですが、
すべての座標を読み取ってから(X,Y)座標を表示してしまいます。
どうすればいいのでしょうか。

ちなみに、プログラムは
CString ss1,m_Status;

ss1.Format("[%2d]X=%3d Y=%3d R=%4.2f \r\n",j+1,X,Y,R);
m_Status = m_Status + ss1;
myED1->SetWindowText(m_Status);
というプログラムで、

このプログラムがだいたい100回ぐらい繰り返されます(だいたいというのはwhile関数で行っているため)。
多分文字数が多くなってこうなったのだと思うのですが、
何か解決策でもあればいいのですが教えてください。
0519デフォルトの名無しさんNGNG
ふつうそういうのは、ステータスバーに表示したりします。
0520デフォルトの名無しさんNGNG
>493
SDKに入ってるけど、表示するだけなら、
IPicture->render();
とかいう関数でjpgもだけど、色んなのをその関数だけで表示できるよ。
COMだけどAPIみたいなもんだYO.
キーワードはOleLoadPibture(),(API)
CreateStreamOnHGlobal(),(API)
だYO
0521デフォルトの名無しさんNGNG
>>518
> while関数で行っているため

whileは関数ではありません。
0522デフォルトの名無しさんNGNG
>518
とりあえず SetWindowText の後で UpdateWindow してみる。
チカチカしてまともに読めたものじゃないと思うが。
こういう場合は SetSel でEditの末尾を選択して ReplaceSel で
追加分だけ足していくのが定跡。
0523デフォルトの名無し(435)NGNG
>>521
すいません。while関数ではなくwhile文でしたね。(^^;)
0524デフォルトの名無しさんNGNG
>>518
CString ss1;
for(int i=0; i<100; i++){
ss1.Format("%d\r\n", i);
int nLen = myED1->GetWindowTextLength();
myED1->SetFocus();
myED1->SetSel(nLen, nLen);
myED1->ReplaceSel(str);
}

みたいな感じかなぁ。
でもループで100個くらい回したところで表示経過はたいして見えないよ。
0525524NGNG
> myED1->ReplaceSel(str);
myED1->ReplaceSel(ss1);
でしたん。そして522とかぶってたん。
0526デフォルトの名無しさんNGNG
edit_setsel(-1)とかはちゃんと機能しない時があるから
ちゃんとgetwindowtextlengthしろよな!
0527デフォルトの名無し(435)NGNG
>>522,524さん
ありがとうございます。

0528デフォルトの名無しNGNG
ボタンをクリックしてプログラムを処理した後、もう一度ボタンをクリックすると
ダイアログが消えてしまうのですが、ダイアログを消えないようにするにはどうす
ればいいのでしょうか。
0529デフォルトの名無しさんNGNG
モードレスダイアログ使えば?
0530デフォルトの名無しさんNGNG
>>528
きみはそう言うけどもだね、それがどんなボタンでどういう処理をして
どんなダイアログが消えるのかなんて、聞いてる方にはわからないんだよぅ。
0531デフォルトの名無しNGNG
>>530
すいませんでした。
ボタンの処理は「原点復帰」と「スタート」ボタンというボタンで
最初「原点復帰」を行ってから「スタート」ボタンをクリックする
とダイアログが消えてしまうのです。
0532デフォルトの名無しさんNGNG
意味不明(w
0533デフォルトの名無しさんNGNG
>>531
それは処理じゃなくてボタンの名前ちゃうんかと。
プッシュボタンの名前を言っただけちゃうんかと問い詰めたい。
でもボタンが2つあることがわかったからちょっと前進。
プログラムもきっとダイアログベースなんだろう。(AppWizard+MFC)
そのダイアログが消えてしまうってことなんだろう。


もしかして、い、いや、そんなことはないと思うが、
そのスタートボタンというやつ、[OK]ボタンのキャプションを[スタート]
に変えた、、、ってことはないよね。
0534デフォルトの名無しNGNG
>>531
[OK]ボタンのキャプションを[スタート]にし、
もちろんIDもIDOKからIDCSTARTに変えましたが・・・。
0535デフォルトの名無しさんNGNG
俺の経験ではコードが変なときがあったなぁ。
case :break;のbreakが抜けてるとかない?
case WM_COMMAND:
....
....
....←ここのbreak;がぬけてんの。
case WM_CLOSE:
break;

なまじ動いちゃうからたちわりーんだよな
0536デフォルトの名無しさんNGNG
CDialog::OnOK();
を
//CDialog::OnOK();
とでもしてください。
0537デフォルトの名無しさんNGNG
>>535
ここMFC限定だし…
0538デフォルトの名無しさんNGNG
>>536
あはははは。笑えるね、それ。
・・・しかし>>534見てる限りだと可能性は大だ。
0539デフォルトの名無しNGNG
>>536
一応ONOK探しましたがありませんでした。(w
モードレスダイアログを作成してやったのですが、やっぱりボタンを押してプログラム処理
した後、もう一回ボタンを押すとダイアログが消えてしまいました。
ほかになにかいい方法はないでしょうか。

0540デフォルトの名無しさんNGNG
>>539
とりあえずデバックで追っかけてみてよ
0541デフォルトの名無しさんNGNG
だからもっと詳しく書けって。
0542デフォルトの名無しさんNGNG
ボタンを押すと
どういう処理が行われるか
ちゃんと理解してつくってるのか?
0543デフォルトの名無しさんNGNG
>>531
「原点復帰」を押さずに「スタート」を押した場合はどうなる?
消えるとしたら「スタート」がそういう処理になってる。
消えないとしたら「原点復帰」の処理でどこかをぶち壊してる。
「原点復帰」しないと「スタート」押せない仕様だとしたら、そういうことは最初に言う。
0544デフォルトの名無しさんNGNG
>>531が推理クイズを出しているというスレはここですか?
0545デフォルトの名無しさんNGNG
>>544
はい。今、「原点復帰」と「スタート」の実装をみんなで推理してるところです。
ヒントはいろいろ出てくるんですけどね…
0546デフォルトの名無しさんNGNG
じっちゃんのナニかけて〜
0547デフォルトの名無しさんNGNG
仮説1: 「スタート」の処理に意味もわからずEndDialogを入れた
仮説2: IDCSTARTの値が1とか2
0548デフォルトの名無し(531)NGNG
皆さんお騒がせしてすいませんでした。
デバッグした所、1回初期化する関数を何回も呼び出して
いたのが原因でした。
2回目以降そのプログラムを実行すると強制終了されるのをすっかり忘れていました。
0549デフォルトの名無しさんNGNG
強制終了かよ(´Д`;)
0550デフォルトの名無しさんNGNG
しょーもな
0551デフォルトの名無しさんNGNG
結局、僕らの推理は徒労に終わりましたとさ・・・。

・・・・・・。
0552業NGNG
ワラタ
0553デフォルトの名無しさんNGNG
このナゾはコナソにもとけんよ
0554デフォルトの名無しさんNGNG
一番の謎は、なぜデバッグもせずにふわふわした質問をしたのか、だ。
0555デフォルトの名無しさんNGNG
まえに一緒に仕事したやつに、「まず、コンパイラのバグと言う」クンがいたけど、
それに比べればかわいいヤツだとおもう也。
0556デフォルトの名無しさんNGNG
>「まず、コンパイラのバグと言う」クン
名言だな。今後、厨問した後「コンパイラのバグだと思うのですが...」って
付け加えるネタが流行る。
0557デフォルトの名無しさんNGNG
しかし実際にコンパイラのバグということもありうるので
うかつにそれを言うと後で恥を書くこともあるという諸刃の剣。

そういればVC++.NETβ2でテンプレートクラスを明示的に特殊化したときに
コンストラクタが呼ばれなくて強制終了しまくって苦労したなぁ。
再現方法わからんけど。

これってコンパイラのバグですか?
0558デフォルトの名無しさんNGNG
まあβなら
なにがあっても。
0559デフォルトの名無しさんNGNG
DIBを表示するのに使っている256色以外の色をつかって、
別のBMPを表示したいのです。
例えば、背景の絵の上に赤ベタや黒ベタ(色は任意)のシルエットみたいな
BMPを表示したいのですが、やはり256色ではダメなのでしょうか?
0560デフォルトの名無しさんNGNG
ディスプレイ解像度が256色じゃない限りは普通に出来るだろ?
0561559NGNG
>>560
現在、256色の画像ファイルをDIBで表示しています。
やはり256色のBMPをDIBで表示しようとすると、
同じパレットを参照してしまいます。
背景のパレットの256色はフルに使われているので
空きがありません。

プログラムはできれば256色でやれと指示されたのですが。
実は昨年末からVC始めたのでよく分からないのです…
0562デフォルトの名無しさんNGNG
ゲームですか?
0563559NGNG
そのへんはあまり聞かないで下さいませ…(;´Д`)
0564デフォルトの名無しさんNGNG
そもそも”どこに”表示しようとしてるのか書かれてない。
256色DIB上にほかのDIBを重ねるんだったら256色以上出せないのは当たり前。
ディスプレイ上に2つのDIBを重ねるんだったらディスプレイが256色じゃない限り何の問題もない。
0565559NGNG
>>564
>そもそも”どこに”表示しようとしてるのか書かれてない
あ、これは失敬。
>256色DIB上にほかのDIBを重ねるんだったら256色以上出せないのは当たり前。
うーむ、やはりそうでしたか…。出直してきます。
0566デフォルトの名無しさんNGNG
質問があります。
AppWizardで生成されたスケルトンコードで、ファイルの「開く」とか選ぶと、
ファイルパスを指定するダイアログがでますよね。あれってどういった関数で
呼び出してるのでしょうか??
0567デフォルトの名無しさんNGNG
OnFileOpen()よびだして
その中でDoModalしてんだろ
0568デフォルトの名無しさんNGNG
>>566
おいおい、頼むよ・・・。
そんなのAPI辞典か何かで調べてくれって。質問する内容じゃないだろ。
そもそも、それを調べられない時点でプログラマとしての資質が
限りなく0に近いと思うのだが。
0569デフォルトの名無しさんNGNG
>>566
本代ケチって時間を無駄にしてるパターンなのかなぁ。
コモンダイアログの説明なんて、たいていの入門書に載ってると思うけど。
0570デフォルトの名無し(531)NGNG
また、質問なのですが。
Editボックスの垂直スクロールバーを常にスクロールする(常につまみを下にする)
にはどうすればいいのでしょうか。
0571デフォルトの名無しさんNGNG
>>566は、スケルトンの中にDoModalしてるコードが無いから
どこで呼び出してるのか、を聞きたかったんじゃないか?
まぁ、>>567の通りでたいていの書籍に載ってることも間違いないんだが。
0572デフォルトの名無しさんNGNG
俺も最初は悩んだ。
0573デフォルトの名無しさんNGNG
>>570
「Editボックスに何か追加した時、一番下の行が見えるようにスクロール
させたい」ってことか? それなら >>524-526 あたりを参照。
0574デフォルトの名無し(531)NGNG
>>573
ありがとうございます。
>>524を参照にやったらできたのですが、
いざ実行すると

原点復帰します。
原点復帰します。
原点復帰します。
原点復帰 

となってしまい。
そこから先表示されなくなってしまいました。
オーバーフローになってしまったのでしょうか。

プログラムは、
void CGUI::OnCgenten()
{
CEdit* myED1=(CEdit*)GetDlgItem(IDC_STATUS);
CString ss;
int nLen;
ss="原点復帰します。\r\n";
ss.Format("%s",ss);
nLen=myED1->GetWindowTextLength();
myED1->SetFocus();
myED1->SetSel(nLen,nLen);
myED1->ReplaceSel(ss);
}
となっています。どうすればいいのでしょうか。
0575デフォルトの名無しさんNGNG
> CString ss;
> ss="原点復帰します。\r\n";
> ss.Format("%s",ss);

感動した。
0576デフォルトの名無しさんNGNG
あ?また推理クイズか?>>573はよく解けたな。
0577デフォルトの名無しさんNGNG
>>574
きっとコンパイラのバグです。
0578デフォルトの名無しさんNGNG
また他の場所で変なことしてんじゃないのか
ここまでくるとネタだと思えてくる
0579デフォルトの名無しさんNGNG
すでに文字列がEditBoxに入ってるならGetLineCountとLineScrollとか。
0580デフォルトの名無しさんNGNG
金田一もビクーリ
0581デフォルトの名無し(531)NGNG
>>579
GetLineCount関数もLineScroll関数も使いました。
が、うまくいきませんでした。
0582デフォルトの名無しさんNGNG
>>581
どううまくいかなかったのか教えて!
せめてヒント、最初の1文字は?
0583デフォルトの名無しさんNGNG
犯人は・・・お前だ!>>580
0584デフォルトの名無しさんNGNG
CListCtrlを使って、リストビューのアイコン(イメージ部分)のみを書き換えようと思うのですがうまくいきません。
具体的には、下記のようにSetItemでイメージのインデックスを指定しましたが、反映されず、同じアイコンが表示されたままです。

CListCtrl& list = GetListCtrl();
...
if ( ... )
{
icon = 1;
list.SetItem(nItem, 0, LVIF_STATE, lpszItem, icon, 0, 0, 0);
}

良い方法がありましたら、ご教授お願いします。
0585デフォルトの名無しさんNGNG
なんでLVIF_STATEなの?
0586854NGNG
>>585
LVIF_STATE → LVIF_IMAGE でできました。
私の勘違いでした。ありがとうございました。
0587デフォルトの名無しさんNGNG
かちゅーしゃのようにIEコンポーネント(CHtmlView?)を使って
リンクをクリックされたらポップアップメニューを出したり、
いろいろな処理をさせたりしたいのですが、どうやっていいか
わかりません。CHtmlViewにはリンクをクリックされた時に処理
されるメッセージハンドラもないですし、親クラスのCViewのマウス
クリックイベントは定義しても、なぜか使用できないです。

そんで、いろいろ調べたところ、どうやらCOMという技術を使わない
と、そういったことは難しいらしいのですが、COMを使ったIEコンポー
ネントの制御方法について詳しいサイトや本があったら、教えてほしい
のですが、、、

よろしくお願いします。
0588デフォルトの名無しさんNGNG
そういえばATLとかMFCでCOMスレって無いよな。
俺も以前ここでMFC+COM系の質問したんだけど放置されたよ…

ちなみにラップされてないCOMのスレもあるけど、あまり動いてない。
0589デフォルトの名無しさんNGNG
あれ?
CHtmlViewってVC++6.0じゃないと使えないの?
VC++5.0じゃ駄目なのか・・・鬱だ。
0590デフォルトの名無しさんNGNG
やはりCOMは鬼門なのか・・・
0591デフォルトの名無し(531)NGNG
やっとEditボックスに文字がかけない不具合を直しました。
Editボックスの表示を前のプログラム
m_Status = m_Status + ss1;
myDL1->SetWindowText(m_Status);
に直し、
その後に
int line = myED1->GetLineCount();
myED1->LineScroll(line);
上手く行きました。
0592デフォルトの名無しさんNGNG
LineScrollでうまくいってんじゃん(;´Д`)
なんなのこいつ(;´Д`)
0593デフォルトの名無しさんNGNG
すみません、間違えて旧スレのほうに投げてしまいました。
再度こちらに書きます。

あるスレッドを使ったプログラムをCOM化すると、
WaitForSingleObjectのところで応答が返ってきません。
どうやらスレッドが終了していないようなのですが、原因不明です。
COM化してない場合は問題なく動くのですが、
なにかご存知の方、いらっしゃいますでしょうか?
0594デフォルトの名無しさんNGNG
>587
君の求めているものが全てある。
http://kalx.tripod.co.jp/2chsrc_20020127.zip
0595デフォルトの名無しさんNGNG
リストビュー内の複数アイテムを削除するにはどうすればいい?
0596デフォルトの名無しさんNGNG
>593
COMの要求を処理しないと駄目なので
WaitForSingleObjectはよんじゃ駄目
GetMessageのループにする。

MFCプロジェクトでSDIにして
その時(プログラムが立ち上がったとき)
勝手に空のドキュメントが生成されないようにするにはどうすればいいの?
例えばデータソースを指定するダイアログ(メインフレームの中に)
とかを出したい
0597デフォルトの名無しさんNGNG
>593
COMの要求を処理しないと駄目なので
WaitForSingleObjectはよんじゃ駄目
GetMessageのループにする。

MFCプロジェクトでSDIにして
その時(プログラムが立ち上がったとき)
勝手に空のドキュメントが生成されないようにするにはどうすればいいの?
例えばデータソースを指定するダイアログ(メインフレームの中に)
とかを出したい
0598デフォルトの名無しさんNGNG
二重にかいちゃった。ごめん
0599587NGNG
>>594
おーー、これです。これを求めていました。
サンキュです。

ところで、参考書籍はどんなの読んだらいいんでしょう?

0600デフォルトの名無しさんNGNG
key入力を鈍くするに如何すれば良いでしょうか?
0601デフォルトの名無しさんNGNG
>>600
ギプス



0602デフォルトの名無しさんNGNG
>>600
ゆっくり押す。
0603デフォルトの名無しさんNGNG
>>601>>602
詳しく。
0604デフォルトの名無しさんNGNG
>>603
ワロタ
0605デフォルトの名無しさんNGNG
マルチスレッドでタイマー呼んでも別に問題ないよな?

UINT itteyoshi(LPVOID a){
/*


*/
((CGikoView*)a)->SetTimer(100,1000,zusaaa_1000get);
return 0;
}
void CGikoView::func{
AfxBeginThread(itteyoshi,this);
}
0606デフォルトの名無しさんNGNG
>>600
SystemParametersInfo で SPI_SETKEYBOARDSPEED あたりをいじる。
0607デフォルトの名無しさんNGNG
>605
// In general, CWnd objects should be passed by HWND from
// one thread to another. The receiving thread can wrap
// the HWND with a CWnd object by using CWnd::FromHandle.
//
// It is dangerous to pass C++ objects from one thread to
// another, unless the objects are designed to be used in
// such a manner.

これ、大丈夫? 俺も昔はまった。
(CGikoView*)a が、もう無効なポインタになってるんだよ。
0608デフォルトの名無しさんNGNG
リストビュー(CListCtrl)に、16*16アイコン付きのファイル名をレポート表示
したいのですが、このとき各ファイルのアイコンはどこからもってくれば
よいのでしょうか?
0609デフォルトの名無しさんNGNG
>>608
リソースに持っておくのが一般的かな。
0610デフォルトの名無しさんNGNG
>>609
んー、他のアイテムならそれでもいいんですが、ファイル名を表示するので
ファイルのアイコンを表示したいんですよねぇ…
exeファイルならファイルからアイコンを取得するのかとも思ったのですが、
データファイル(テキスト、画像など)のアイコンはどこから持ってくれば
いいのかなぁと。
0611デフォルトの名無しさんNGNG
関連付けられてるexeからもってくるんじゃないの?
あ、でも複数アイコンはいってるexeもあるからなあ。
エクスプローラーに表示するアイコンは
レジストリに保存されてるのだろうか。
0612麻人NGNG
DLL 内の関数に CWnd へのポインタを渡して、DLL 側でウィンドウ作るのは
どうするのがスジなんでしょうか?
そのまま作ると CWnd::AssertValid() の

  // should also be in the permanent or temporary handle map
  CHandleMap* pMap = afxMapHWND();
  ASSERT(pMap != NULL);

ってところで引っかかるんです。
0613デフォルトの名無しさんNGNG
CWndではなく、HWNDで渡せば良いのでわ?
0614デフォルトの名無しさんNGNG
>611
SHFILEINFO info;
::SHGetFileInfo(fileName, 0, &info, sizeof(SHFILEINFO), SHGFI_ICON )

HICON hIcon = info.hIcon;

で取れる yo!
0615デフォルトの名無しさんNGNG
CBrushを使って円や四角に色を付けています。
CBrushを使えば横線などで塗りつぶせることはわかっているのですが、
白地に指定した色の線になります。
例えば赤地に青の線といったようなことはどうすればできるのでしょうか?
0616デフォルトの名無しさんNGNG
SetBkMode(TRANSPARENT)かな
0617615NGNG
ありがとうございます。うまくできました。
SetBkMode(OPAQUE)の方もやりたいことに使えそうでとても参考になりました。
0618デフォルトの名無しさんNGNG
>>614
ありがとう!アイコン取得&リストに表示できたよ!
0619デフォルトの名無しさんNGNG
同一ドキュメントの読み直しをする際、修正済みの場合だけダイアログを表示したいと思ってるます。

CWinApp::OnFileOpen()からCDocManager::OnFileOpen()が呼び出され
その中のCDocManager::OpenDocumentFile()で同一ファイルの検査を行っていることは分かりました。

OpenDocumentFile()に手を加えて実装するにはどうするのが良いのでしょうか。
0620 NGNG
MFC6.0で印刷をしたんですが参考になるお奨めのHPはありますか。
このままだと印刷部だけVBで作ってVCからexecするしかないよ トホホ。
0621デフォルトの名無しさんNGNG
プロジェクトウィザードで印刷機能にチェック入れる
0622デフォルトの名無しさんNGNG
管理者権限でしか起動できないようにするにはどうすれば良いのでしょうか?
例えば「何か」のsetup.exeのようなものです。
0623デフォルトの名無しさんNGNG
>620
CPrintViewは駄目か?
0624デフォルトの名無しさんNGNG
MFCのコントロールの使い方をサンプル突きでやさしく教えてくれる
書籍orサイトきぼ〜ん
DelからVC6.0に移行してるんだけど、
タブコントロールの使い方ワッカンネ〜
0625デフォルトの名無しさんNGNG
すいません。どなたか下記のエラーの原因、わかりますか?

"0x6ab282a9"の命令が0x00000000のメモリを参照しました。
メモリがreadになることはありませんでした。
0626625NGNG
しまった。さげちゃった。
0627デフォルトの名無しさんNGNG
NULLが入ったままのポインタをどっかで使ってるんではないでしょーか。
0628625NGNG
>>627
ありがとうございます。それっぽいです。
ところで、これリリース版でのみ起るのですが、ポインタの初期値の
関係でしょうか?
0629625NGNG
たった今、詳細な理由が判明しました。
自分定義のメッセージハンドラが原因でした。
afx_msg void Onhoge();ってなってたのですが、
afx_msg LRESULT Onhoge(WPARAM wParam, LPARAM lParam);
としたらうまくいきました。

・・・なんじゃ、そりゃー!!!知るかボケー!!!!
つーか、デバックで落とせよな・・・・。
0630デフォルトの名無しさんNGNG
そういえば、ON_CONTROL_RANGEで指定したハンドラで、
 void OnHoge(UINT nID)
とせずに、引数を省略して
 void OnHoge()
にした場合。このハンドラ呼ばれたとき、デバックビルとだと普通に動作するのに、
リリースビルド版だと落ちない?
0631デフォルトの名無しさんNGNG
みなさん教えてください。

1.AppWizardでCFormViewを使うSDIアプリケーションを
作りました。(以下、CMyAppとします)
2.CMyViewの上にCRichEditCtrlから派生したCMyRichEditを乗せて、
ClassWizardでメンバ変数m_richと関連づけました。
3.メニューに「太字」項目を追加し、ID_MENU_BOLDとして、
ClassWizardでCMyRichEditクラスにOnMenuBold()メッセージハンドラ
を追加しました。

しかし、実行してもメニュー「太字」は淡色表示のままで、
CMyRichEdit::OnMenuBold()のブレイクポイントはかすりもしません。

CMyView::OnMenuBold()
{
m_rich.OnMenuBold();
}
以上のようにすれば動くのですが、OnMenuBold()と同様の関数が
他に40近くあり、CMyViewに重複してメッセージハンドラを追加するのは
避けたいのです。
さらにCMyRichEditは独立したコンポーネントとして
他のプロジェクトに追加したいので、
CMyViewに書くコードは最小限にしたいのです。
どなたか助けてください。

0632デフォルトの名無しさんNGNG
>>631
よくわからんが、
CMyRichEditのメッセージマップにOnMenuBold()はある?
0633デフォルトの名無しさんNGNG
>>632
あります。

簡単に言うと、
自分で作ったクラスでメニューのクリックを
キャッチしたいんですけど、
CViewとかCDocument以外のクラスでも出来ますか?
0634デフォルトの名無しさんNGNG
>633
CMyRichEditが自分でWM_COMMANDを処理してるのか?
それじゃ「独立したコンポーネント」にならない。
たとえばフォームにCMyRichEditを二つ載せてメニューコマンドを
選択したら、それはどっちのコンポーネントに行くんだ?
コマンドIDに依存してるから、「他のプロジェクトに追加する」のも
そのままじゃ無理だし。
0635デフォルトの名無しさんNGNG
>>631
CMyViewにON_COMMAND_RANGEハンドラを追加
そこからm_richにメッセージを丸投げ
0636631NGNG
>> 634
>CMyRichEditが自分でWM_COMMANDを処理してるのか?
>それじゃ「独立したコンポーネント」にならない。
まったくそのとおりです。
この仕事では、IBMホームページビルダーの「htmlソース」タグ
の部分だけ独立して作っている感じなんで、
コマンドIDは変えればいいんですが、
ダイアログまで呼んでるんで、リソースの引っ越しが
手に負えなくなりつつあります。

完璧独立コンポーネントにするにはどうすればいいんですか?

>>635
>CMyViewにON_COMMAND_RANGEハンドラを追加
ON_COMMAND_RANGE(ID_MENU_BOLD, ID_MENU_XXX, OnSendAllMessages)
ここまではおっけーです。

>そこからm_richにメッセージを丸投げ
丸投げってどうやるんですか?
OnSendAllMessages(something) // うろ覚えすまん
{
m_rich.SendMessage(something);
}
でいいんですか?
0637デフォルトの名無しさんNGNG
グローバル変数バリバリの汚い描画ルーチン(C言語)を
DLL化して動的に呼び出すとします。

描画は、psetやline、色設定などを連続的にコマンドを与えて実行する
タイプです。
そのときに、複数のプレーン(DCなど)で同時にこの描画ルーチンを
「独立して」呼び出したいばあいどうすればよいですか?

問題はグローバル変数を用いているので、変数がごっちゃになるということです。
別にDLLでなくてもよいのですが、解決方法があれば教えてください。
0638デフォルトの名無しさんNGNG
>>637
使いたいプレーンだけ、LoadLibraryなどすればよいのでは?
0639デフォルトの名無しさんNGNG
char hoge[10];とかに、
hoge[0]=0x01,hoge[1]=0x00,...
という風にバイナリデータを格納してあるとき、これをCStringに移そうとしたら、問題がおきました。

まず、CString::CString(LPCTSTR lpch, int nLength );を使って格納した場合、
終端と認識するのか、(いくらnLengthを指定しても)0x01しかコピーされません。
strncpyなどをつかっても同じ。
次に、memcpyを使った場合、うまくはいくのですが、リリース版でエラーが出ます。

これらの問題をうまく解決する方法はないでしょうか?
0640デフォルトの名無しさんNGNG
\0含める文字列クラスってどこかになかったっけか?
見たことある気がするんだけど忘れちゃったよ。
0641631NGNG
>>634
>>635
>CMyViewにON_COMMAND_RANGEハンドラを追加
>そこからm_richにメッセージを丸投げ
でできました。どうもありがとう。

とりあえず解決したんですが、
完璧独立コンポーネントにする方法も
教えてもらえたら超嬉しいです。


0642デフォルトの名無しさんNGNG
>>640
CStringでもできないことないよ。
CString s;
s = "あいう";
s += '\0';
s += "えお";
s.GetLength();
GetLengthの戻りは11。
0643デフォルトの名無しさんNGNG
>>636
普通はWM_COMMANDなんか投げずに、コンポーネント専用の
メッセージ(WM_USER+何とか)を定義して使う。

>>639
バイナリデータを文字列に入れちゃイカン。CByteArrayとか使え。
0644631NGNG
>>643
m_rich.SendMessages(WM_COMMAND, nID, 0);
じゃだめなの?
const UINT WM_RICH_COMMAND = WM_USER+DEFERENCE;
にしなきゃいけないってこと? なぜ?
0645デフォルトの名無しさんNGNG
>644
コマンドIDはアプリケーションで付けるものだから、
コンポーネントがコマンドIDに依存するように作ると
そのアプリケーションから切り離せなくなる。

標準コントロールを見れば分かると思うけど、
コントロールに何か仕事をしてもらいたい時には
コントロール専用のメッセージ(たとえばEDITなら
EM_SETSEL とか EM_UNDO とか)を送る。
逆に、コントロールから親ウィンドウへ通知するときに
WM_COMMAND とか WM_NOTIFY が使われる。
コントロールにWM_COMMANDを送るっていうのは使い方が逆だよ。
0646困った637NGNG
>>638
>>使いたいプレーンだけ、LoadLibraryなどすればよいのでは?


いや、同じDLLに対して何度、LoadLibrary、Getなんとかしても
得られるアドレスは一緒です
俺も考えたんですが、デバッガで追ってみたので。

うーんどうすればいいのか
0647デフォルトの名無しさんNGNG
つーかそんなDLL使うなと、言いたい。
0648639NGNG
>>642
入る事は、入るのですが、'\0'が含まれた配列から格納する事ができないのです。

それで、>>643さんの話も踏まえて、
CStringでやってた処理をすべてchar[]に直すことにしました〜。

・・・。
・・やってられるか、ヴォケー!!!MFCなんてだいっきらいだー!!!
0649デフォルトの名無しさんNGNG
CStringなんて糞使うやつの気が知れん
0650デフォルトの名無しさんNGNG
プレーンの数だけDLLをコピーして、ダイナミックにロードする、
って案はどうなった?foo.dll -> foo1.dll, foo2.dll, foo3.dll....
0651デフォルトの名無しさんNGNG
>>648
これでどうよ?
CString str;
LPCTSTR sz = "abc\0def";
memcpy( str.GetBufferSetLength( 7 ), sz, 7 );
str += '\0';
str += "def";

MFCじゃなくても、文字列として処理しようとしたら苦労はおんなじだよ。
0652631NGNG
>>645
ありがとう。すごく参考になったyo
でもWM_USER+DEFERENCEでメッセージを登録していったら、
誰かの定義したメッセージと重なる可能性が、
でてくると思うんだけど、そのへんはみんなどうしてるの?
0653デフォルトの名無しさんNGNG
そもそも639は何のためにバイナリを文字列に入れようとしてるんだろう……。
>>651 後ろ2行は不要じゃない? あと、ReleaseBuffer すれ。
0654デフォルトの名無しさんNGNG
>>653 ReleaseBuffer
正直、そこまで面倒見てられなかった。
つか、CByteArrayかcharのCArrayで解決すんのが筋だし。
0655デフォルトの名無しさんNGNG
>>639
そこで、なぜ、CMyStringクラスを作ろうと思わなかった?
0656639NGNG
>>651
それ、私もやったんすけど・・・、なぜかリソース版で落ちるんですよ。
誰かみたいに「コンパイラのバグか」と言いたくなる。その時は「CStringでは駄目なんだ、きっと」
という結論にしましたけど。あ、もちろんReleaseBufferはしましたよ。

>>653
いろいろ事情がありまして。

>>655
めんどかったからです。でもchar[]はもっと手間取った・・・。鬱
0657639NGNG
しまった!

>>656
誤)リソース版

正)リリース版
0658デフォルトの名無しさんNGNG
GetBufferした後はReleaseBufferって自動で呼ばれるんじゃなかったっけ?
そもそもGetBufferSetLengthの後はReleaseBufferする必要ないし。
0659デフォルトの名無しさんNGNG
>>658
まじで?
0660デフォルトの名無しさんNGNG
>>658
そんなことないって。

0661デフォルトの名無しさんNGNG
よそで「CStringはバグってるから使わない」ってヤツなんどか
みたことあるけど、使い方間違ってるだけなんじゃねーの?

ReleaseBuffer()しなくていいって、なにを根拠にいってるんだ?
0662658NGNG
ん?1行目はかなりあいまい。
ReleaseBufferって単に長さを計算してるだけじゃないの?
2行目はMSDNに書いてあるけど。
0663デフォルトの名無しさんNGNG
>>656
ReleaseBuffer する時にも長さを指定しないと '\0' の所で切られるよ。
まあ、リリース版で落ちるのは、それとは無関係にどこか壊しているせいだと思うが。

そもそも、CStringは文字列を扱うために設計されたクラスなんだから、
バイナリがうまく扱えないからって文句言うのはお門違い。
電子レンジでパンが焼けないと言って怒るようなものだな。
0664639NGNG
>>663

>そもそも、CStringは文字列を扱うために設計されたクラスなんだから、
そうっすね。結局、今後もお世話になると思います。>CString
0665デフォルトの名無しさんNGNG
GetBufferは扱いがめんどう。
美しくない。
バグの元。

ほとんどの局面で使わなくてもすむんだから、あえて使うことは
ないでしょう。
0666デフォルトの名無しさんNGNG
>>662
MFCのソース嫁。長さをただ「計算してる」だけじゃなくて再設定してるから、
呼ばないとおかしなことになる。
そもそも自動的に呼ばれるんだったらReleaseBufferの存在意義ないだろ。

> 2行目はMSDNに書いてあるけど。
GetBufferSetLength の説明には、GetBuffer の説明からコピペしてきて
関数名だけ直し忘れてる箇所があるな。ひょっとしてこれを見て
「GetBuffer では必要だけど GetBufferSetLength では必要ない」って思った?
0667658NGNG
1行目はやっぱりまずいね。
SetAtあたりが長さの再計算をしてくれてるかと思ったけど、してくれてなかった。
0668658NGNG
>>666
ms-help://MS.VSCC/MS.MSDNVS.1041/vclib/html/vclrfCSimpleStringTGetBufferSetLength.htm

// No need for trailing zero or call to ReleaseBuffer( )
// because GetBufferSetLength( ) set it for us.
0669658NGNG
あ、追加。
>>666
長さの計算ってのはそういう意味(再設定)で使った。
0670デフォルトの名無しさんNGNG
CStringにバグがあるのは本当。
「あったのは」、かもしれないけど。
なんか、Delete関数かなんかで、特殊な場合の処理が
ソースから見てバグってんのが一目瞭然だった。
知らずに使ってひどい目合ってる人もいるんだろうか?
0671デフォルトの名無しさんNGNG
>>670
Replaceにもある(た?)らしいな。
最近のVC++MLによると。
0672かるかん ◆TM3.ie9w NGNG
確かにMFCのソース見ればわかる話なんだけど。
結論から言うとするべき。内部的に「長さ」のパラがあって、
一部のメンバー関数がそれを見てるから。ReleaseBufferする
ときに長さを渡すと、それをセットするようになってる。
0673デフォルトの名無しさんNGNG
>>653
>そもそも639は何のためにバイナリを文字列に入れようとしてるんだろう……。
ももも、もしかして、
 CString a;
 a.Format("%x",0x01);
みたいなことをしたいとか?
0674デフォルトの名無しさんNGNG
>>653
・・・なんでだろうなぁ。
CByteArrayじゃなくてchar[]を使うことにしたってあたりもよくわからん。
0675666NGNG
>>668
たしかに書いてあるね。疑ってスマソ。
長さが最初から分かっている場合は GetBufferSetLength 一発でOKってことか。
0676かるかん ◆TM3.ie9w NGNG
サンプルソースのコメントだったのね。納得。
0677デフォルトの名無しさんNGNG
>>652
同じウィンドウクラスの中で重複しなければ問題ない。
つまり、メッセージを受ける側でちゃんと区別できればいいってこと。

CRichEditCtrl から継承してるんだったら、richedit.h の中を見て、
現在使われていなくていなくて将来も使われそうにない範囲を
適当にチョイスすればいいよ。
0678デフォルトの名無しさんNGNG
MFCのソース見てたらさ、
#ifndef _IA64_
...
#else
...
#endif

とかあったんだけどさ。
よく判らないんだけど、これっていずれLinuxに移植するつもりって事?
0679デフォルトの名無しさんNGNG
>678
拡張性を考えて設計するのは、勝手だろう。
使いもんになるんだったら、売るのも勝手だろう。
0680デフォルトの名無しさんNGNG
NT系列は昔っからIA64を視野に入れてただろ。
0681デフォルトの名無しさんNGNG
winnt.h
0682デフォルトの名無しさんNGNG
>>678
別にWindowsだってIA64で走ってもいいだろう。

漏れも
#ifdef _MAC
とかの中でMac用のソースがあるのは確かに気になっているんだが…。
0683デフォルトの名無しさんNGNG
Mac版Office用じゃないの?コンパイラは何なんだろう……
0684デフォルトの名無しさんNGNG
メニューから選択して、プロパティシートを表示させたいのですが
ClassWizardから自分で作ったクラス(基底クラスはCPropatySheet)に
処理を書いても、メニューが薄灰色のままで、メニューを選択できません。
初めから存在するViewクラスに処理を書くとちゃんとメニューから選択して表示されます。
どうしたら自分で作ったクラスで処理できるようになりますか?
0685デフォルトの名無しさんNGNG
Viewに自作クラスをもたせてしまえ
0686デフォルトの名無しさんNGNG
>>685
そうきたか。
0687684NGNG
>>685
それって、CViewにメニュー選択時のメッセージハンドラを書くって事ですか?
確かにそれでプロパティシートは表示されるんですけど、プロパティシートは別クラスにしたいんです。
Viewにあまりごちゃごちゃ書きたくないし。

メニューが薄灰色って事は、メッセージルーティングでメッセージが伝わってないって事なんだろうか。
でも、CPropatySheetはCCmdTargetクラスの派生クラスだから、メッセージは伝わっていると思うのですが。
0688666NGNG
>687
えーと、そのメニューコマンドを選ぶと、プロパティシートが
表示されるわけだよね?
ということは、メニュー項目を選ぼうとしている時点では
プロパティシートは表示されていないわけだよね?
まだ存在しないものがどうやってメッセージを受け取れるの?
0689デフォルトの名無しさんNGNG
>>688
その言い方だと誤解を招く恐れがあるとおもわれ。

まあ要は、
>まだ存在しないものがどうやってメッセージを受け取れるの?
ってことすよ。>>684クン
0690684NGNG
>>688
なるほど!それですね。
え、じゃあプロパティシートを別クラスにして、そこにメッセージハンドラを
書くのは不可能って事ですか?
やはり、初期に存在しているViewやDocに書くしかないのでしょうか?
0691デフォルトの名無しさんNGNG
>>690
ちゃうっちゅうに(違いますよ)!
どっかでそのクラスを宣言(構築?)せいってことです。
ViewだってDocだって最初から実体があるわけじゃ無いのでげすよ。

それが、どこだかは自分で考えなさい。
0692684NGNG
>>691
えーと、色々と見てみたんですけどスケルトンで作成されたヘルプのダイアログが
Cプロジェクト名.cppにあったので、ここに書くと思うんですけど上手くいきません。
ダイアログは、クラス自体が全てここに書かれてるから表示されてるのかな。
0693デフォルトの名無しさんNGNG
>>692
CXXXApp::InitInstance()とか見てみ
0694デフォルトの名無しさんNGNG
メニュー項目作ってそのメニュ−ハンドラでDoModalするだけじゃダメなんか?
0695684NGNG
色々とやってみたのですが、駄目でした。
検索しても、ほとんどがViewかDocに
CUserSheet sheet("プロパティシート");
sheet.DoModal();
というメッセージハンドラの処理の書いているものばかりで
自分で追加したクラスにかいてあるサンプルはありませんでしたし。

>>693
見てみましたけど、よく分かりませんでした。
クラスの宣言をここに書けば良いんですか?
具体的に何を書けばいいのかが、全く分かりませんでした。

>>694
その通りなんですけど、上にも書いたとおり、DoModalをViewかDocに書けば表示されます。
自分で追加したクラスCUserSheet(基底クラス:CPropatySheet)に書くと、上手くいきません。
そのクラスが実行時に存在しないと言うのは、教えて頂いて分かったのですが
初期にこのクラスを認識させるために、どこに何を書けば良いのかが分からないのです。
0696デフォルトの名無しさんNGNG
なぜCUserSheetの中でDoModalする必要があるの?
もうDoModalの時点でプロパティシートは表示されてるのに
さらにDoModalして何を表示させようとしてるの?
0697666NGNG
684は自分で自分を作れる魔法のクラスが欲しいそうです。
0698デフォルトの名無しさんNGNG
どうも>>684が何をしたいのかがわからないんだけど、
> プロパティシートは別クラスにしたいんです。
> Viewにあまりごちゃごちゃ書きたくないし。
って言うなら初めから問題無いじゃない?
プロパティシートはCPropertySheetから派生してるらしいから別クラスになってるし、
Viewがごちゃごちゃするのが嫌ならDocやMainFrmにでも書けばいいし。

なんかプロパティシートの中でDoModalしたいって言ってるけど、
じゃあアプリケーションはいつプロパティシートを表示する機会を与えられるんだろうか。
0699デフォルトの名無しさんNGNG
>>684がやりたいのはたぶん、フレームウィンドウで特定の
メニュー項目が選択されたら、プロパティシートのクラスが
それを検知して、自分で自分を表示するってことなんだろう。
実現不可能ではないかもしれないが、素直にViewにDoModalと
1行書くのとは比べものにならないほどの手間がかかるぞ。
それでもやるか?
   いいえ  >いいえ
0700デフォルトの名無しさんNGNG
つーか素朴な疑問なんだけど、メニューハンドラってどこに書いてる?
ViewがごちゃごちゃするからMainFrm.cppに書いてるんだけど。
0701デフォルトの名無しさんNGNG
ステータスバーにアイコンを表示させたいのですが、
なんかアイコンが32×32の大きさになってしまいます。
16×16の大きさを指定するにはどうしたらいいでしょうか?

こんな感じでやったのですが、、、
HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
CStatusBarCtrl& stb = m_wndStatusBar.GetStatusBarCtrl();
stb.SetIcon(1, hIcon);
0702デフォルトの名無しさんNGNG
>>701
MSDN読め
0703デフォルトの名無しさんNGNG
>>702
みましたけど、載ってないですよ。
お願いします。教えてください。
0704デフォルトの名無しさんNGNG
>>703
> みましたけど、載ってないですよ。

こんなことゆーやつには教えてやんない:p
見つからなかったってんなら話は別だったんだけどねぇ。
0705デフォルトの名無しさんNGNG
MSDNだけが情報源じゃないしな。LoadIcon 16 とかでぐぐってみれ。
0706デフォルトの名無しさんNGNG
LoadImageだったり
0707デフォルトの名無しさんNGNG
>>705
漏れの環境では16は大きすぎるよ。(w
12じゃ無いとはみ出る。
でもMSDNでLoadIconみればもろに解決策書いてあった気がしたけど、
漏れの目の錯覚だよね、>>703は載って無いって言ってるし。
0708デフォルトの名無しさんNGNG
いかん。漏れも錯覚が見えるYO!
0709デフォルトの名無しさんNGNG
>>684
MyView.cpp
ON_COMMAND_RANGE(ID_MENU_FIRST, ID_MENU_LAST, OnAllMenu)

OnAllMenu(UINT nID)
{
m_prop.SendMessage(WM_COMMAND, nID, 0);
}
MyPropertySheet.cpp
ON_COMMAND(ID_MENU_FIRST)
...
ON_COMMAND(ID_MENU_LAST)

とやれば、メニューのイベントは受け取れるし、
CMyViewのコードは最小限だ。
>631で既出。
0710デフォルトの名無しさんNGNG
シンボルブラウザでID定義するのと
ストリングテーブルでID定義するのは
なにかちがうのでしょうか?
0711デフォルトの名無しさんNGNG
リストビュー内でアイテムを右クリックしたときに、ポップアップメニューを表示するため、OnRButtonDownに下記のコードを書きました。

CMenu cMenu;

mouse_event(MOUSEEVENTF_LEFTDOWN, point.x, point.y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, point.x, point.y, 0, 0);

VERIFY(cMenu.LoadMenu(IDR_POPUPMENU));
CMenu* pPopup = cMenu.GetSubMenu(0);
ASSERT(pPopup != NULL);

ClientToScreen(&point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());

CListView::OnRButtonDown(nFlags, point);

右クリックでアイテムを選択状態した後、ポップアップメニューを表示したいのですが、先にポップアップメニューが開いてしまい困っています。
みなさんの知恵を貸していただけないでしょうか。よろしくお願いします。
0712デフォルトの名無しさんNGNG
>711
OnContextMenu に書いてみたら?
0713デフォルトの名無しさんNGNG
クライアント領域から、矩形を引っこ抜いて加工したいんです。
例えばフォトレタッチソフトで、画面の一部矩形にフィルタをかけるみたいなノリ。
一発で引っこ抜ける方法、有りませんか?
0714デフォルトの名無しさんNGNG
bitblt。
0715デフォルトの名無しさんNGNG
良く考えたら
CDC::BitBlt の逆はどうすればいいんですか?
って聞いた方がわかりやすかった。
0716711NGNG
>>712さん
あさっりできました。
ただ、同じコードをそのまま書くと、ポップアップの表示座標がマウスポインタの位置から激しくずれます。
point.x-400 などして調整すれば問題ないんですが、ちょっと気になったりならなかったり。

どうもありがとうございました。
0717デフォルトの名無しさんNGNG
DDXでコントロールに対応させたメンバ変数って
そのコントロールを持ってるダイアログのクラスからしか参照できないの?
他のクラスから参照しようとすると、定義されてないってなるんだけど。
0718デフォルトの名無しさんNGNG
>>716
OnRButtonDownではClientToScreen(&point)が必要で、
OnContextMenuでは不要って点はチェック済み?
0719デフォルトの名無しさんNGNG
お前ら!すいません、即答ください。
切り捨て関数なんだっけ?
BASICのfixみたいな。
0720デフォルトの名無しさんNGNG
ハァ?キャストノコト?
0721デフォルトの名無しさんNGNG
cast?
そんなんだっけ?ありがとスマソ
0722デフォルトの名無しさんNGNG
int a = (int) 5.1234;
みたいな事?(藁 >切り捨て
0723デフォルトの名無しさんNGNG
あっ、キャスティングかYO!
じゃなくて

mathへっだのヤツ
0724デフォルトの名無しさんNGNG
>717
普通に作ればpublicになるから見えますが。
変数ではなくて、コントロールの型が未定義だって言ってない?
もしそうだったら、参照する側で適切なヘッダファイルをインクルードしる。

>715
BitBltの逆とは何か定義して下ちい。
転送元と転送先を入れ替えるってだけの話じゃないよな。

>723
floorか? floor が欲しいのか?
0725デフォルトの名無しさんNGNG
つーかマジ言うと
変数が8の倍数のときに真を返すif文を作ろうとしてて。
三年もプログラミングやってなかったらポインタすら忘れてたよ…
0726デフォルトの名無しさんNGNG
やりたいことがわからん。
BASICのFIXと同じことがやりたいんなら722でいいと思うが?
0727デフォルトの名無しさんNGNG
if(a & 7)
return false;
else
return true;

とか?
0728719NGNG
ああぁ、ビット演算子とかあったっけ…
末期だ…

すんまそん。
マジメに勉強し直してきます。
0729デフォルトの名無しさんNGNG
>>725 >>727 >> 728
if( n % 8 == 0)
が一番自然。実行速度はともかく。2の乗数でなくても使えるし。
0730デフォルトの名無しさんNGNG
if(((int)(n/8))*8==n)
実行速度はともかく。2の乗数でなくても使えるし。ワラ
0731711NGNG
>>718さん
チェックしてませんでした。とても勉強になりました。(゚д゚)ウマー
0732717NGNG
>>724
マジっすか。
ちゃんとインクルードしてるけど、「定義されていない識別子です。」って出ます。
何がイカンのだろう。
0733デフォルトの名無しさんNGNG
>>730
お前の書いたソースは死んでも読みたくありません。許してくだちい。
0734デフォルトの名無しさんNGNG
>733
あなたに指図される筋合いはありません。
何の権限があってそのような事を言うのですか?
0735デフォルトの名無しさんNGNG
>>732
その識別子って何よ。
>>727
-1が8の倍数になりましたが。
0736デフォルトの名無しさんNGNG
>>713ですが、BitBltいぢりまくって何とかなりました。ヒントくれた>>714に感謝。

漏れは>>733じゃないけど、素直に日本語読めば指図はしてないと思うぞ>>734。
そして>>733に激しく同意。
0737727NGNG
>>735
2行上に
unsigned int a;
って書いてあるの見えないか?w
0738デフォルトの名無しさんNGNG
>>735
> -1が8の倍数になりましたが。
2の補数じゃない負数表現でも使ってるんでしょうか?
0739717NGNG
>>735
エディットボックスにDDXで対応させてるCString変数m_nameです。
これをMainFrmから参照しようとすると、そのエラーが出ます。
ダイアログクラスのヘッダはちゃんとインクルードしてます。
0740デフォルトの名無しさんNGNG
>>738
思いっきり勘違いしてたよ。鬱だ吊ってくる。
0741710NGNG
>シンボルブラウザでID定義するのと
>ストリングテーブルでID定義するのは
>なにがちがうのでしょうか?
わかります?
0742デフォルトの名無しさんNGNG
>741
違いはない。以上
0743デフォルトの7子さんNGNG
CEditViewで
ドキュメントが変更されたことを検知するにはどうしたらいいでしょうか?
ネットワークからデータを受け取るとそれをDocクラスの変数に
しまうところまでは出来たのですが、それを表示させる方法がわかりません。
CEditViewだとOnDrawは呼ばれないようですし。
どなたか教えてください。
0744デフォルトの名無しさんNGNG
UpdateAllViews(Doc)でOnUpdate(EditView)
0745デフォルトの名無しさんNGNG
CFormViewがそのメンバである、CRichEditCtrlのNM_RDBCLKを受け取ってくれません。
「メッセージハンドラの追加」で追加したので、メッセージマップとかもしっかり書かれています。

どんな原因が考えられるでしょうか?ご教授おねがいします。

0746デフォルトの名無しさんNGNG
サーバー側でCRecordSetを使ってAccessデータベースの読みこみ、更新(追加はなし)
をしているのですが、Updateしたあと他のクライアントが全部のデータを表示しようとすると
うまくいきません。調べてみたのですが読みこみ時のMoveFirstが働いていないようです。
つまり、カレントレコードが編集行から移動していないのです。
どなたかご教授いただけますか?
0747デフォルトの名無しさんNGNG
リバーの中にあるバンドの位置を固定することって
可能でしょうか?
常に同じ位置に表示させたいのですが、、
0748デフォルトの名無しさんNGNG
厨房な質問ですいませんが、GetParent()->SendMessage周りが
デバッグビルドでは普通に動くのに、リリースビルドでは例外で終了したりします。
どんな原因が考えられるのでしょうか?
0749デフォルトの名無しさんNGNG
>>748
ありがちなのが、ポインタを初期化せずに使ってるとか。。。
0750デフォルトの名無しさん NGNG
たとえばCSplitterWndで横2つにフレーム分割されたアプリケーションを扱うとき

CRightDoc
CRightView
CLeftDoc
CLeftView
を作ってそれぞれ扱うと言うのはなんとなくわかるのですが、
CRightDocとCRightViewを
CLeftDocとCLeftViewを
それぞれ結びつけるのはどこで定義するのでしょう?
定義し場所がわからないため
CRightViewでぼGetDocument()の戻り値がCRightDocにならないです。
0751デフォルトの名無しさんNGNG
初心者です教えてください。
 モードレスダイアログの表示位置をメインフレームのサイズに関連して
変えたいと思います。そこで
−−−−−−−−−−−−−−−−
(1)モードレスダイアログとして表示するクラスに位置を保存する変数を用意する。
(2)CMainFrameのOnCreate関数でモードレスダイアログをCreateしたとき、メイ
  ンフレームの四隅の座標を(1)で用意した変数に入れる。
(3)モードレスダイアログのクラスのOnInitDialog関数でMoveWindow関数の引数
 で(2)で代入した値を使う。
−−−−−−−−−−−−−−−−−−
 としましたが、(2)では値が確かに値が代入されているのに、(3)では
値が変になってしまい、考えたように動作しません。
なぜこのようになってしまうのでしょうか、解決法を教えてください。
 
0752デフォルトの名無しさんNGNG
>>750
Viewが複数あっても、普通ドキュメントは1つじゃないの?
2つに分ける理由は、なんかあるの?
0753デフォルトの名無しさんNGNG
>>752
MFCのビュークラスは不完全な気がする。
自身のクローンが作れないから、新しいウィンドウで表示したりするとビューに関する情報が初期化されてしまう。
しようがないからビューごとにその情報を保持する新しいCDocumentを作ったよ。
750の話とは無関係だけどさ。
0754デフォルトの名無しさんNGNG
>752
いやそれがわかっていませんでした。
なるほど、一つにすればよかったのですね。
IRC CHATクライアントみたいなものを作ろうと思ってたので
なんとなく右側の参加ユーザー一覧と
左側のメインウインドウのメッセージを
別のDOCに保存するものだと思っていました。
0755デフォルトの名無しさんNGNG
>>754
それが理由なら、ドキュメントは1つで全然おっけーだよ。
0756755NGNG
>754
なるほど勉強になります。

しかしDOCが一つだとするとViewをどう使い分けるのでしょうか?
UpdateAllViews(*pSender)命令を使用するときに
Viewへのポインタが必要になると思うのですが、
左右にViewがあるときにどちらかのViewへのポインタを手に入れる方法はありますか?


0757デフォルトの名無しさんNGNG
NULLでいいじゃん
0758デフォルトの名無しさんNGNG
>>756
ここでも読んで勉強したまえ。
http://techtips.belution.com/ja/vc/0055/
0759754NGNG
>757
Nullだと両方のViewがアップデートされてしまうので・・・
どちらか片側だけアップデートしたいのです。
0760デフォルトの名無しさんNGNG
>>759
何がしたいのかよくわからんが・・・
普通そういうのはlHintかpHintで更新情報を渡す。
0761デフォルトの名無しさんNGNG
>>759
つーか普通pSenderはthis。
そうでなかったらNULL。
だって送り主だもん。
外部のオブジェクトが勝手にViewの名を騙ってイベントを起こすのはおかしい。
0762754NGNG
>760,759
いえ左フレームにCEditView右フレームにCListViewの派生クラスを指定して

w1.CreateView(0,0,RUNTIME_CLASS(myEditView),CSize(400,lpcs->cy),pContext);
w1.CreateView(0,1,RUNTIME_CLASS(myListView),CSize(0,lpcs->cy),pContext);

実行したところ左側の途中でフリーズしてしまい、
問題はUpdateAllView()にあると思ったので、問題を切り分けるために
左フレームだけ更新したかったのです。
しかし今右のVIEWだけCViewにすると問題は出ませんでした。
CListViewを使用すると不具合が起きるようです・・・
なんでだろう???
0763デフォルトの名無しさんNGNG
CEditViewっていつから分割ビューに対応したんだっけ?
0764754NGNG
>764
え?分割ウインドウに対応していないViewなんてあるのですが?
とりあえず左フレームにCEditView右フレームにCViewでは成功するようですが・・
左フレームにCEditView右フレームにCListViewだと
CEditViewの動作が止まってしまいます。
0765763NGNG
ん〜〜いまVC6無くて忘れたけど。
いくつかのViewは分割できなかったような記憶が・・・。
0766754NGNG
>765
結局いろいろ試行錯誤してみましたが
CListView CEditView CViewは分割は可能みたいです。
CEditViewのOnInitialUpdateで
CButton * CB = new CButton();
CB->Create("送信",BS_PUSHBUTTON|WS_VISIBLE,
CRect(myRect.Width() - 100,0,myRect.Width(),40),this,IDC_MYBUTTON);
してビューの右上隅にボタンを貼り付けているのですが、
これってウインドウのサイズが変わるたびにボタンが隠れてしまったり
右側に空白が出来てしまったりするのですよね。
ウインドウサイズの変更がOnSizeで捕まえられるのは知っているのですが、
ここで動的にボタンを書き直すと言うことは出来ないもんでしょうか?
それとも最初のCreateで常にウインドウの右端にボタンを設置しておくことが出来ますか?
左端なら簡単なのですが・・。

林晴比古の新VC++6.0入門ビギナー編、シニア編をひっくり返してやっているのですが、
なかなかVCってやりたいことの項目が多すぎて難しいですね。
0767デフォルトの名無しさんNGNG
CBをメンバ変数にするとか
0768デフォルトの名無しさんNGNG
リバーの中にあるバンドって固定にできるのでしょうか。
教えてください。
0769754NGNG
>767
ええとつまり具体的にはどういうことでしょうか?
メンバ変数にすると移動が可能になる方法がちょっとわからないです。
WinMXやIRCのチャットであるような一行のエディットボックスと
それを送信するボタンをその右端につけたいのです。
最初はフォームビューにエディットボックスとボタンで・・
と思ったのですがこれだとウインドウサイズに合わせて
エディットボックスを伸び縮みさせることが出来ないですよね。
そこで
エディットビューにボタンを配置してみたのですが、
右端にボタンを固定しておく方法がわからず、さらに、
エディットビューは複数行を許可してしまうし、
右端と下端にバーが出てしまいます。しかもボタンをおいてもその上にまで書きこみ
カーソルが移動してしまう始末。
いったいどうやるのが正解なのでしょうか・・・??
0770デフォルトの名無しさんNGNG
>>769
OnSizeでSetWindowPos
0771デフォルトの名無しさんNGNG
追記
>>770をフォームビューで。
0772デフォルトの名無しさんNGNG
CToolBarの仕様についてお伺いしたいのですが、
ボタンの淡色表示はどうするのでしょう?
0773while(name == sage)NGNG
 リストビューのレポートビューで、サブアイテムの単一の選択、もしく
は、サブアイテムのテキストのインプレイス編集ってできますか?できる
ならやり方を教えていただけませんか。かなり初心者なのですがよろしく
お願いします
0774754NGNG
>771
フォームビューで出来るんですか。
というわけで早速・・・
フォームビューにエディットボックスとボタンをつけて
連動して動かすようにすると・・・

CButton *CB = (CButton*)GetDlgItem(IDC_BUTTON1);
CEdit *CE = (CEdit*)GetDlgItem(IDC_EDIT1);
SetWindowPos(CB,cx-100,cy - 100,cx,cy,SWP_SHOWWINDOW);
SetWindowPos(CE,0,0,cx-100,cy -100,SWP_SHOWWINDOW);

む・・・・・動かないです・・・・
かといってエラーも出ないのですが・・

しかし、わからんことが多すぎますね・・・。
「MFCによるWindowsプログラミング」
注文してしまいました。
0775デフォルトの名無しさんNGNG
こんにちは簡単なCADのようなもの作ってます
さて、CScrollViewから派生したビュークラスで任意倍率を扱う事は
出来るのでしょうか?
表示もとの対象物の縮尺(大きさ)は変えずに視点倍率のみ変更する
ことで実装したいのですがどなたか知りませんか?
0776デフォルトの名無しさんNGNG
CB->SetWindowPos(NULL,cx-100,cy - 100,cx,cy,SWP_SHOWWINDOW|SWP_NOZORDER);
0777デフォルトの名無しさんNGNG
>>772
EnableButtonかな
0778デフォルトの名無しさんNGNG
>>773
普通のインプレイス編集はアイテムしかできないんでしたっけ?
サブアイテムの場所でエディットボックスをCreateする方法もあるみたいですが...
0779デフォルトの名無しさんNGNG
>>773
う〜〜〜〜ん
つい最近見た記憶があるんだけど。
どこだっけ?!
思い出せなくてなんか気持ち悪いなぁ。
0780デフォルトの名無しさんNGNG
codeguruにあった。
0781779NGNG
>>780
サンクス!
http://www.codeguru.com/listview/ListEditor1.shtml
0782754NGNG
CB->SetWindowPos(NULL,100,100,200,200,SWP_SHOWWINDOW);
としてみたら
****の命令が******のメモリを参照しましたメモリがreadになることが出来ませんでした。
がでました。

CB->SetWindowPos(&wndTop,100,100,200,200,SWP_SHOWWINDOW);
そこでこのようにしても同様のエラーになります。

デバッガで追ってみると
CWnd::SetWindowPosの
ASSERT(::IsWindow(m_hWnd));
m_hWndの確認のところでエラーが起きてる模様
これはつまりCButton型ポインタCBのさすオブジェクトがm_hWndを
所持していないと言うことですよね?
m_Wndとは明示的に所持を宣言しないといけないものなんでしょうか?

0783デフォルトの名無しさんNGNG
772ですが、失礼、よそで教えてもらいました(ぉ
CToolBarCtrl &ctrl = sqToolBar.GetToolBarCtrl();
ctrl.SetState(ID_XXXX, TBSTATE_ENABLED);
役に立つ人も居ないとも限らないから一応貼り。MFCややこしい('_`)
0784デフォルトの名無しさんNGNG
ごめん。sqToolBarって内のシンボルだ。
吊って来る。
0785デフォルトの名無しさんNGNG
>782
GetDlgItemが失敗してるに1モナー。
OnSizeってウィンドウ作成直後に一回飛んでくる。いま試せないけど、
ひょっとするとOnInitialUpdateより先に呼ばれてるのかもしれない。
だとしたらまだコントロールが作られていないよ。
いずれにせよエラーチェックしなされ。
0786デフォルトの名無しさんNGNG
ActiveXをVC++のコンポーネント及びコントロール挿入ではなく、
ソース書きで挿入する方法はありますか?
0787デフォルトの名無しさんNGNG
特定条件下であるCButtonが押された時に、そのボタンを消去したいんですが、
そのボタンのOnLButtonDownで
getParent()->PostMessage(EVENT, index, (LPARAM)this); として、
親の受信部でdelete((CButton *)lparam)とかしちゃってOKなんでしょうか?
一応動いてますが、余りに不気味です。つか、ボタンのOnDestroy呼ばれてないし。
お行儀のいい方法が有りましたら一つ御指南を。
0788デフォルトの名無しさんNGNG
Post使ったところはgoodだけれど、ウィンドウ消すにはDestroyWindowが定説。
0789デフォルトの名無しさんNGNG
おお、OnDestoryがコールされた(;゜Д゜)
ボケボケでした。どうも(笑)>>788
んで、それからdeleteですなφ(.. )
0790デフォルトの名無しさんNGNG
通常のリストボックスは1行1項目で縦に項目を
羅列すると思いますが列を持たせ
て1行複数項目にすることは出来ますか?
0791デフォルトの名無しさんNGNG
>790
素直にリストビュー使え。
0792デフォルトの名無しさんNGNG
>>785
俺もそう思う。
つーか俺はエラーチェックしてコントロールが存在したら
SetWindowPosでちゃんと移動できてる。
0793754NGNG
>785,792そのとおりでした。

CButton *CB = (CButton*)GetDlgItem(IDC_BUTTON1);
CEdit *CE = (CEdit*)GetDlgItem(IDC_EDIT1);
if (CB != NULL){
CB->SetWindowPos(&wndTop,cx-100,0,100,cy,SWP_SHOWWINDOW|SWP_NOZORDER);
}

if (CE != NULL){
CE->SetWindowPos(&wndTop,0,0,cx-100,cy,SWP_SHOWWINDOW|SWP_NOZORDER);
}


こうしたらできました。
慣れてくるとこういうのもすぐ気づけるようになるんでしょうが
最初はなかなかしんどいですね。
0794デフォルトの名無しさんNGNG
CFileDialogを使わずにファイルの拡張子を取得したいんですが
要はD&D時に、拡張子が.xxxなら処理を続行したいんですが。
どうでしょうか?お願いします
0795デフォルトの名無しさんNGNG
IDropTargetの実装で拡張子.xxx以外を弾けばいいんでないかい?
0796デフォルトの名無しさんNGNG
ExtractFileExtを使おうかと思ってました
なんか色々な事を考慮しなければならない
ようなことを聞いてて…ある文字(漢字)が
含まれてると、うまく処理できない ということなのですが
やってみます、有難うございました。
0797デフォルトの名無しさんNGNG
MFCよりWTLのほうがすきだにゃー
0798デフォルトの名無しさんNGNG
EditView内で文字列
http://www.2ch.net/
みたいなURLがあった場合
それをクリックするとブラウザが開くようにしたいのですが、
どのようにしたらよいでしょうか?
0799デフォルトの名無しさんNGNG
>>798
せめてRichEditじゃないと無理じゃないかな。
0800デフォルトの名無しさんNGNG
サブクラス化して、WM_*CLCKを捕まえて、
カーソルにあるURLを取得して、ブラウザに渡す
ようなコードを書けば、いいとおもうけど。
0801デフォルトの名無しさんNGNG
CMenu *CM = (CMenu *)((CMainFrame*)AfxGetMainWnd()->GetMenu());
CM->EnableMenuItem(ID_MENU1,MF_ENABLED);

外部のクラスから
CMainFrameへのポインタを手に入れるにはどうしたらよいのでしょうか?
CMainFrameのポインタからGetMenu()して
Menuの項目を操作したいのです。

上記のようなコードを書いたのですが、
エラーにはなりませんでしたが、
動作しませんでした。
0802デフォルトの名無しさんNGNG
CMenu *CM = (CMenu *)(((CMainFrame*)AfxGetMainWnd())->GetMenu());
だろ。
0803801NGNG
>802

そのようにしても結果は同じでした。
今のところAfxGetMainWnd()を(CMainFrame*)
でキャストしたものがはたしてメインフレームへのポインタなのか
どうか・・??・というところが怪しい気がしてはいますが・・
0804デフォルトの名無しさんNGNG
単にメインメニューにID_MENU1が無いだけとみた。
0805デフォルトの名無しさんNGNG
なぜ素直にON_UPDSTE_COMMAND_UIを使わないのか…
0806デフォルトの名無しさんNGNG
>>801 >802
CMenu *CM = AfxGetMainWnd()->GetMenu();
キャスト不要でない?

メニューの操作は、処理本体は CMainFrameに書いて、
CMainFrameにメッセージ送って操作するな。俺なら。
0807while(name == sage)NGNG
>>778〜781
 ありがとうございました。レス遅くてすみませんです
0808801NGNG
>804
そうだとするとコンパイル時にエラーになりませんか?

>806
キャスト無しでもコンパイラは通りましたが、
結果は同じ・・

処理本体はCMainFrameに書いてメッセージを送ると言うのを遣ってみたいのですが、
CMainFrameにメッセージを送るにはポインタが必要じゃないですか?

それはCMainFrameに何か適当な関数(EditMenu())を作って
それをCMainFrame*へのポインタから CM->EditMenu();
するという意味ですか?

それともWM_USER+100
とかのメッセージを定義してそれをCMainFrameへ送るということでしょうか?
メッセージを特定のクラスに送る方法が・・・わからないです・・。
0809デフォルトの名無しさんNGNG
>>808
別にメニュー内にID_MENU1が無くてもエラーにはならんだろ。
サブメニューにある可能性もあるだろうしな。
ってか俺も805と同意見だが。
0810デフォルトの名無しさんNGNG
age
0811デフォルトの名無しさんNGNG
質問です。
ACCESSデータベースにビットマップを保存しています。
これがCLongbinaryの値として取得できるのですが、
この値をどうすれば表示できるようになるのでしょうか?
ご存知の方がいましたら宜しくお願いします。

0812デフォルトの名無しさんNGNG
>>811
ビットマップと言うのは画像のBMPのこと?
0813413NGNG
モードレスダイアログボックスの
表示方法についてなのですが、
ImDlg *im = new ImDlg(this);
im->Create(IDD_IMDLG);
im->ShowWindow(SW_SHOW);
このようにポインタをつかって表示すると表示できるのですが、

ImDlg im;
im.Create(IDD_IMDLG);
im.ShowWindow(SW_SHOW);
このようにインスタンスを直接使うと
なぜか表示できないのです。

とりあえず上のを使うとプログラムは作れるのですが、
下のがなぜ動かないのか気になってしまっています。
理由のわかる方是非教えてください。
0814デフォルトの名無しさんNGNG
上と同じにするなら
ImDlg im(this);
じゃないの?知らんが。

0815811NGNG
>>812
はい。bmpの画像を表示したいのですが、CLongbinaryとしてしか
値を取得できないんです。
0816デフォルトの名無しさんNGNG
>>811
その中身を見ればファイルイメージとかBITMAP構造体とかが入ってるんでない?
0817デフォルトの名無しさんNGNG
>>816
そうなのですが・・・・中身の見方がわからないんです。
調べてもほとんどCLongbinaryに関して書いてるものもなくて。
0818デフォルトの名無しさんNGNG
CLongBinaryの中身をファイルに落とすならこんなかんじ。
表示は面倒だから自分で考えて。

CLongBinary bin;

BYTE *p = (BYTE*)GlobalLock(bin.m_hData);

FILE *fp = fopen("xxx.bmp", "wb");
fwrite(p, 1, bin.m_dwDataLength, fp);
fclose(fp);

GlobalUnlock(bin.m_hData);
0819デフォルトの名無しさんNGNG
>>813
関数を抜けるとimが消滅するからだべさ。オブジェクトのスコープについて勉強。
0820デフォルトの名無しさんNGNG
Editコントロールを作成中です。
コントロールがフォーカスを失った時にNullチェックをして
Nullだった場合はフォーカスを元のコントロールに戻したいのですが、
どうやったらいいですか。

// CEditCtrl メッセージ ハンドラ

void CEditCtrl::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
COleControl::OnActivate(nState, pWndOther, bMinimized);

// TODO: この位置にメッセージ ハンドラ用のコードを追加してください
if(bMinimized==0)
{
int ret=MessageBox("","",MB_OK);
}
}
0821811NGNG
>>818
ありがとうございます。
早速試してみます。
0822デフォルトの名無しさんNGNG
エディットビューの背景色は

HBRUSH KuneMainView::CtlColor(CDC* pDC, UINT nCtlColor)
{
// TODO: この位置で DC のアトリビュートを変更してください
return (HBRUSH)GetStockObject(WHITE_BRUSH);
}

CtlColor(CDC* pDC, UINT nCtlColor)関数のオーバーライドで変更可能ですが、
この方法などWHITE_BRUSH、BRACK_BRUSHなど、数通りしか出来ないですよね?
これをもっと自由な色合いにする方法はありますか?
エディットビューの背景色をRGBで表現したいのです。
0823デフォルトの名無しさんNGNG
CreateSolidBrush使う。
戻り値はメンバにしといて後で開放する。
0824822NGNG
すみません追伸です。
遣り方を替えてみようと思って
ObInitialUpdateで(onDrawは呼ばれないようなので)
CDC *pDC = GetDC();
pDC->SetTextColor(0xffdddd);
pDC->SetBkColor(0x000000);
以下のようにしてみたのですが、

これでも色はかわらないようです・・・。
0825デフォルトの名無しさんNGNG
>>820
なんでOnActivateのコードがくっついてるのかよくわからんが、
EditならOnKillFocusでSetFocusする方向で。
0826デフォルトの名無しさんNGNG
>>820
っていうか、フォーカスを失ったウインドウ(コントロール)が
フォーカスを取り返すのって禁じ手なんじゃないの?
0827デフォルトの名無しさんNGNG
>>825
OnKillFocusだったのですか。
何か勘違いをしていたようです。ありがとうございます。
この引数にNullを入れれば処理がキャンセルしてくれる?かな。

>>826
>フォーカスを取り返すのって禁じ手なんじゃないの?

マジっすか。じゃあどうやってNullチェックをしたらいいですか
0828デフォルトの名無しさんNGNG
>>827
「フォーカスを失ったらSetFocus()して取り戻す」って
動作をするウインドウが二つあったら、フォーカスの取り合いに
になって無限ループになるから禁止、ってどこかで読んだような
記憶があるんだけど...
いま検索しても見つからなかった。ちと自信がなくなった。
0829デフォルトの名無しさんNGNG
>>828
「SetFocus() 無限ループ」でぐぐったらわんさかでてきたぞ。
0830デフォルトの名無しさんNGNG
>>824
>>823を無視かい
0831デフォルトの名無しさんNGNG
>>827
null入れたらエラーになるよ
0832デフォルトの名無しさんNGNG
>>827
そもそもNullチェックってのは何?
「エディットボックスが空だったらエラー」ってのだったら、
OKボタン押した時にでもチェックすればいいと思うけど。
0833デフォルトの名無しさんNGNG
MDIの子ウィンドウにメニューを付けるのはどうするのでしょう。
CMDIChildWndを派生してPreCreateWindowオーバーライドして中でWS_SYSMENUを付けて
ChildFrameのOnCreateでLoadMenu→SetMenuじゃ駄目でした。しくしく。
0834823NGNG
>>830
俺やっぱ無視されちゃったの?
悲しいなぁ。
0835デフォルトの名無しさんNGNG
エディットビューで横スクロールのバーを出さずに
テキストを折り返さす方法ってありますか?
0836デフォルトの名無しさんNGNG
>>835
横スクロールバーを出さない=テキストを折り返す
では?
0837827NGNG
>>832
クライアントの要求に「Nullチェックはフォーカスを離れた直後」
ってのがあるらしいです。

あ、ちなみに今の仕事は汎用機の移行作業です。

キー部1〜8くらいまであって、遷移中に入力項目に抜けや間違いが
あったらエラー。みたいな。
0838デフォルトの名無しさんNGNG
>>837
フォーカスを離れたときに空だったらエディットボックスの右に赤い*を表示したりステータスバーにメッセージを表示ってのはどう?
フォーカスは問題なく移るけどエラーは知らせる。
ダイアログで表示すると目障りだし作業効率落ちるから。
もちろん*が1つでもあるうちは確定ボタンは押せない。
0839デフォルトの名無しさんNGNG
>>838
丁寧なレスありがとうございます。
自分もそのような感じの処理が最善だと思います。
でも何とかしてフォーカスを戻さないとならないのです。


ちなみにクライアントはN●●データです。
0840デフォルトの名無しさんNGNG
しすてむもーだるだいあろぐ。
0841デフォルトの名無しさんNGNG
>>839
すべてのロストフォーカスイベントに対してフォーカスを要求し直すのはあんまりよくないと思うから、
入力が不完全な間はTABを無効にしてしまう、などがいいと思う。
0842デフォルトの名無しさんNGNG
いっそVBにしてしまえ。Validateイベントでスッキリ解決だ。
0843デフォルトの名無しさんNGNG
MFCって、親Windowが作られた時に無条件でm_hWndにウィンドウハンドルが入るんでしょうか?
それとも、自分で取得する必要があるのでしょうか?
0844827NGNG
>>841
そうですね。TABを制御してしまえヴぁ何かいい解決方法が
ありそうですね。ちょっと試してみます。

>>842
Validateですか。今見た感じだと自分がやりたかった事に
ピッタリな気がします。
これをVCのイベントで定義できれば最高だったのに...
0845デフォルトの名無しさんNGNG
>>843
MSDN読め
0846デフォルトの名無しさんNGNG
>>833
MDI子ウィンドウのメニューは、フレームウィンドウのメニューと
置き替わる形で表示される。これはMDIの仕様だからしかたがない。
どうしてもMDI子ウィンドウ自体にメニューを表示したかったら、
ツールバー等で代用品を作ってそれっぽく見せるしかないんじゃないかな。

>>835
EditコントロールのスタイルからWS_AUTOHSCROLLを外す。
MFCのSUPERPADサンプルあたりにそのまんまの例があったと思うが。
0847デフォルトの名無しさんNGNG
>>846
>>833ですが、どうもありがとう。「無理」と解ったのは大きな前進です。
つかやっと前進出来ます、コーディング(笑)。勉強になりました。
0848デフォルトの名無しさんNGNG
エディットビューで 
テキストが横の長さをはみ出すと
下側にスクロールバーが自動に出てしまいますが、
これを出さなくして、強制的に折り返さすことは出来ますでしょうか?
それともエディットビュー以外のクラスを使う必要があるのでしょうか?
0849デフォルトの名無しさんNGNG
訂正。>846の WS は ES_AUTOHSCROLL の間違いね。
ところで、>848は>835と同じ人ですか?
0850848NGNG
>849
あ、いえ違います。
横スクロールバーを出さないためには文字幅を調べて
強制改行をする必要があるのですね。
むずかしそうだなあ。チャレンジしてみます。
0851デフォルトの名無しさんNGNG
>>850
?・・・え?そうなの?
0852デフォルトの名無しさんNGNG
プロパティ参照を省略したい時はどうしたらいいですか。

MessageBox( NULL,EDIT1,EDIT2,MB_OK );
みたいな感じで、EDITを直接参照したらTextプロパティ。みたいな
0853デフォルトの名無しさんNGNG
>852
そもそもCEditにTextなんてメンバないだろ(藁
MFCの場合、DDXでコントロールとメンバ変数を結びつけておいて、
 UpdateData();
 MessageBox(m_Text1, m_Text2);
のようにするのが正道。

CEditを継承して型変換演算子をオーバーライドすれば、
いわゆるデフォルトプロパティに近いことはできると思うけど、
C++の勉強以外の目的でそんなことをするのはおすすめできないな。
0854デフォルトの名無しさんNGNG
VCでときどきファイルが
がなくなってしまうことがあります。
コーディングしならが半ば無意識にCTRL+Sを押す癖があるのですが、
ときどきファイルが使用中です、などと表示されて
ごくたまにですが*.hはあるのに*.cppファイルがなくなっている
などの現象が起きます。
このような現象に見舞われてる方他にいますか?
0855デフォルトの名無しさんNGNG
あなたのPCに何者かが侵入しています
0856デフォルトの名無しさんNGNG
>>854-855

ワラタ
0857デフォルトの名無しさんNGNG
すっごい基本的な質問です。
ウインドウがかわった時に
CMainFrameでCSplitterWndをつかって
いくつかにフレームをくぎって
それにC**View1 C**View2
などを割り当てているときに右隅のドラッグなどで
ウインドウサイズを変えると
どこに通知が行くのでしょうか?
CMainFrameのなかのOnSize関数は呼ばれているようですが、
C**Viewの中のOnSize関数は呼ばれないようです。

OnSize
0858デフォルトの名無しさんNGNG
>>854
ファイルが使用されていますエラーは出るが、ファイル自体は消えないな。
SP5当ててる?
0859おいくそどもNGNG
210.175.13.57
俺のIPだ。ハックノ練習してごらんよ。できねーだろうけどw
0860デフォルトの名無しさんNGNG
>>859
荒らし依頼だ。タイーホタイーホ
0861デフォルトの名無しさんNGNG
>>859
その前にそれはほんとにおまえのIPかと問いたい。
0862デフォルトの名無しさんNGNG
 CMainFrameのOnCreateでGetWindowRectを使って領域サイズを得、
その位置情報を使って、モードレスダイアログボックスをMoveWindow
で表示させると、表示位置が一定にならないのはなぜ?
 教えてくだされ!!!
0863デフォルトの名無しさんNGNG
>>862
座標変換してないとか
0864デフォルトの名無しさんNGNG
>862
やりたいことがよくわからないけど、
(a) ダイアログがメインウィンドウの子ウィンドウ(WS_CHILD付き)なら
 GetClientRect で得られた座標を変換せずに使う
(b) ダイアログがポップアップウィンドウ(WS_CHILDなし)だったら
 1. GetWindowRect で得られた座標を変換せずに使う
 2. GetClientRect で得られた座標をClientToScreenで変換して使う
のどちらかが正解。どっち使うかは目的によって違う。

いずれにしても、OnCreate じゃなくて OnSize とか OnMove で
やった方がよさそうな気はするな。
0865デフォルトの名無しさんNGNG
Д`)アプリケーションのタイトルバーの文字を変えるにはどうするのでしょうか・・?
最初は「無題」- ****ってなってるところです。
0866デフォルトの名無しさんNGNG
シリアル通信を行うプログラムを作成しようとしてるんですけど、
あるデータファイルを読み込んで、分割して送る仕様で、
ようは、ハイパーターミナルとか、テラタームの様なプログラムを作りたいのですが、
なぜか、転送時間が理論値とかけ離れて遅いのです。
問題は、プロセスのsystem idle processなんかが、
動いてるからだと思います。
ハイパーターミナルで転送中はこれらのプロセスは止まってるのですが、
プログラムで、プロセスを止める方法はあるのでしょうか?
0867あゆNGNG
イベント・ハンドラって何ですか?
0868デフォルトの名無しさんNGNG
>>862
状況が良く解りませんが、少なくともChildFrameの方では、
OnCreateでGetWindow/ClientRectしても駄目だったり。>>864さんも言っておられますが。
MainFrameではどうだったかなー。
原因がこれなら取り合えずOnCreateでは目的のオブジェクトをCreateだけして、
OnSizeで改めて
GetWindow/ClientRect→MoveWindow→return
で解決する。意外にも構築時にOnSizeも呼ばれるのだ。まあ試してみて。
0869デフォルトの名無しさんNGNG
>>862
MSDNでClientToScreenもしくはScreenToClientを参照してねん
0870デフォルトの名無しさんNGNG
>867
屋上に昇ってイベント・ハンドラ、イベント・ハンドラと唱えるとUFOが降りてくる。
0871デフォルトの名無しさんNGNG
NAPSTERプロトコルによるチャットアプリケーションを作っているのですが、
「talkへのアクセス中に不明なエラーが発生しました。」
となってしまい
リソースファイルの中を見ると
IDC_MYBUTTON "talk"
となっておりこれをコメントアウトするとエラーはでないのですが、
今度はウインドウ右上の最大化、最小化、破棄のボタンが効かなくなってしまいます。

デバッガで追ってみると
CFile exception: generic, File Unknown, OS error information = 10054.
例外処理 (初回) は chat.exe (KERNEL32.DLL) にあります: 0xE06D7363: Microsoft C++ Exception
というエラーが出ているのですが、
これの原因はどこにあるのでしょうか?

通信にはCSocketFileおよびCArchiveクラスを使用しています。
0872デフォルトの名無しさんNGNG
割り込み・ハンドラって何ですか?
0873デフォルトの名無しさんNGNG
>>866
[スタート]→[シャットダウン]
0874デフォルトの名無しさんNGNG
Windowsで、10キーのEnterと普通の(という表現はあれですが・・)Enterを区別したいのですが
OnKeyDownだと両方でVK_RETURNが帰ってきてしまいます。何かよいほうほうは
ないでしょうか?

CALLBACKで、SetWindowsHookExでHOOKして、
例えば10キー側だったら、別のコードを::PostMessageする。。
ってのは反則ですか?(例えばUnassignになってる0xE7とか)

0875デフォルトの名無しさんNGNG
フォントの変更や色付けは
CEditViewでは出来ないのでしょうか?
CRichEditViewなら出来るようですが・・・。
0876デフォルトの名無しさんNGNG
>>874
nFlagsの8ビット目を見てもダメ?
0877デフォルトの名無しさんNGNG
862です
 863, 864 レス有り難うございました。
カメお礼申し訳ありません。
0878874NGNG
>>876
うお。(^^;;;;
失礼しました。できそうです。

ついでなので。。ALTキーとの同時押下はnFlagsの13ビット目でよさげですが、
SHIFTとCTRLは別に状態取得しなきゃ駄目なんでしょうかね。
0879デフォルトの名無しさんNGNG
>>875
文字のフォントなら変えられるぞ。
CWnd:SetFont()
0880デフォルトの名無しさんNGNG
>879
ありがとうございます。
CWndクラスにもいくつかそういった関数があるのですね。
CEditViewクラスばかり見ていました。

例えばCEditViewに、文章を表示する場合
CStringの配列などに文字列を複数しまって
表示するときにはそれを連結し
SetWindowText()で表示するかと思うんですが、
この方法だと、テキストを一行づつフォントを変えたいとかいった
用途のときに途中でフォントの変更が出来ないと思います。
それに途中がURL(http://〜)であったならば色を変えて
マウスクリックでブラウザが開くようにしたいのです。
このようなようとの時はどのクラスを使用するのが
一番適切でしょうか?
0881 NGNG
>>880

CHTMLViewつかっちゃだめ?
・・・やっぱりだめだよなぁ。
0882876NGNG
>>878
GetAsyncKeyStateで関数呼び出し時のキー状態を見るとか。
0883874NGNG
>>882
やっぱそれしかないですよね。(^^;
ありがとうございましたぁ。
0884デフォルトの名無しさんNGNG
>882
OnKeyDown で見てるなら GetKeyState の方が良いと思われ。
0885デフォルトの名無しさんNGNG
CAsyncSocketクラスをつかってソケット通信プログラムを作っているのですが
Connectするとどうしても戻り値が0になってしまいます。
CTcpSocketはCAsyncSocketの派生クラスです。
AfxSocketInit()は正常終了しています。
以下はConnectの部分のコードです。
エラーコードはConnect後に10035(WSANOTINITIALISED)が返ってきます。
//////////////////////////////////////////////////////////////
CTcpSocket *m_Socket;
m_Socket = new CTcpSocket();
m_Socket->SetpWnd(this);
if(!m_Socket->Create())
{
 delete m_Socket;
 AfxMessageBox("create error");
 return;
}
if(!m_Socket->Connect((LPCTSTR)m_TrasmitterIp, (UINT)m_TransmitterPort))
{
 error = GetLastError();
 delete m_Socket;
 AfxMessageBox("connect error");
 return;
}
////////////////////////////////////////////////////////////////////
どなたか、原因が思い当たる方はいませんでしょうか。
0886885NGNG
あ、ちなみに
Connectが0を返したときに正常終了時の処理を行うと
接続されました。
0887885NGNG
上のWSANOTINITIALISEDはWSAEWOULDBLOCKのまちがいでした。
0888デフォルトの名無しさんNGNG
>887
なんだ、それだったら正常じゃん。
非ブロッキングモードだから、Connectからは接続の完了を待たずに帰ってくる。
WSAEWOULDBLOCKは「まだ終わってないけど戻ってきたよ」って意味。
ちゃんと接続できたかどうかは後からメッセージで通知されるよ。
0889885NGNG
あれ、MSDNによると
Connectは正常終了した場合0以外が返るとなっていますが。
非ブロッキングの場合は0が戻るのですか???
0890デフォルトの名無しさんNGNG
>889
そうだよ。CAsyncSocket::Connect の説明だとその辺わかりにくいけど、
WSAConnect とか WSAEWOULDBLOCK を調べると、非ブロッキング
ソケットではエラーが返るとちゃんと書いてある。
0891885NGNG
>890
わかりました。ありがとうございます。
0892880NGNG
>>881
>CHTMLViewつかっちゃだめ?

できたらそれは無しの方向で・・・・´Д`)

0893デフォルトの名無しさんNGNG
>>880
一番近いのはRichEditViewだと思うけど。
0894865NGNG
アプリケーションのタイトルバーの文字
の替え方について質問したものです。
CWnd::Createの第二引数のlpszWindowNameに名前を指定したらいいのだと
思っているのですが、
スケルトンから作った直後の単純なSDIアプリケーションで、
いろいろやってみましたがどれもダメでした。

具体的には、

CMainFrame::OnCreateで
lpCreateStruct->lpszName = "アプリの名前";//追加
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

Create関数をオーバーライドして
BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
return CWnd::Create(lpszClassName,"アプリの名前", dwStyle, rect, pParentWnd, nID, pContext);
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.lpszName = "アプリの名前";//追加
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;


0895デフォルトの名無しさんNGNG
>>894
AfxGetMainWnd()->SetWindowText(_T("アプリの名前"));
0896デフォルトの名無しさんNGNG
メインフレームウィンドウの形を知るために、
   CRect rct:
   HWND hd;
   hd = AfxGetApp()->m_pMainWnd->m_hWnd;
   ::GetWindowRect(hd,rct);
を実行しましたが、rct.rightで得られる値が、
画面解像度の値と違うのはなぜでしょうか?
スクリーン座標系の値と画面解像度のサイズとは
違うのですか?
もし一致させるとしたらどうしたらよいのでしょうか?
 初心者です。
0897デフォルトの名無しさんNGNG
>896
いちいちウィンドウハンドルをとらなくても m_pMainWnd->GetWindowRect で十分。
というのは置いといて、画面解像度の値とは何のこと?
普通、ウィンドウを画面の右端にぴったりくっつけない限り
rct.right == GetSystemMetrics(SM_CXSCREEN) とはならないと思うが。
0898デフォルトの名無しさんNGNG
 896です
897さん有り難うございます。
 画面解像度とはディスプレーの解像度の意味で書きました。
モニターの解像度は人によって異なるので、それに対応する
プログラムを書きたいのですが...。
0899デフォルトの名無しさんNGNG
 896です
897さん有り難うございます。
画面解像度とはモニターに解像度のつもりで書きました。
人によって解像度が異なるので、それらに対応したプロ
グラムを書きたいのです...。
0900デフォルトの名無しさんNGNG
>898
?? 目的は何だ?
画面の大きさが知りたい → GetSystemMetrics もしくは GetMonitorInfo
メインウィンドウを画面と同じサイズにしたい → 最大化する、MoveWindow、
PreCreateWindowをオーバーライドしていじる のいずれか。
0901デフォルトの名無しさんNGNG
右端にぴったりくっつけるなら最大化させたほうが楽だし、
ウィンドウを解像度に合わせるならGetSystemMetricsで取った値を
SetWindowPosしたり、、、

0902デフォルトの名無しさんNGNG
898さん
 多謝
897=900さんと思いますが、897で解決しました。
もーVC++って関数ありすぎです。
感謝、感謝
お馬鹿な初心者でした。
0903デフォルトの名無しさんNGNG
リストビュー(CListView)で、アイテムのチェックマークをつけたときに
そのアイテムのインデックスを取得したいのですが、どうすればよいのでしょうか?
0904デフォルトの名無しさんNGNG
>>903
チェックしたときにHitItem()やってもだめだったっけ
多しか俺もそれで悩んだような気がする・・・
チェックされたとき引数にインデックスどうして渡すようにしてないんでしょうね、MFC(ワラ
0905デフォルトの名無しさんNGNG
質問です。
CLongbinaryクラスの値もCStringと同じように先頭から何バイト削除とか
できるのでしょうか??
できるのならどのような方法でしょうか?
どなたかわかる方よろしくおねがいします。
0906デフォルトの名無しさんNGNG
タブブラウザみたいに、
タブによってビューの
内容を切り替えるのってどうしたらいいんでしょう?
ビューを複数用意して切り替えるのかな?
それともドキュメントを複数用意するんでしょうか。

でもタブブラウザみたいなものならビューは統一だから一つで良いとして、
ドキュメントも一つにしてドキュメントの中の読み込むデータだけ替えるべきなんでしょうか?

0907デフォルトの名無しさんNGNG
あれはMDIの応用です。
0908デフォルトの名無しさんNGNG
ATLってどういうときに使う状況
になるのですか?
0909デフォルトの名無しさんNGNG
MFCで嫌なときにつかえばよろしいかと。
0910デフォルトの名無しさんNGNG
LVS_EX_CHECKBOXESスタイルのリストビューに、初めからチェックを入れて
表示しようと思って以下のようなコードを書いたのですが、チェックが入ってくれません。
どうすれば初めからチェックが入った状態で表示できるでしょうか?
LVITEM item;
item.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
item.iItem = nIndex;
item.iSubItem = 0;
item.state = INDEXTOSTATEIMAGEMASK(2);
item.stateMask = LVIS_STATEIMAGEMASK;
item.pszText = LPSTR_TEXTCALLBACK;
item.iImage = I_IMAGECALLBACK;
item.lParam = (LPARAM)pItem;
GetListCtrl().InsertItem(&item);
0911デフォルトの名無しさんNGNG
リストビューを使用したプログラムを作っています。
しまいたいデータの構造体へのポインタをpItemに入れ

LV_ITEM lvi;
lvi.mask = LVIF_TEXT;
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.lParam = (LPARAM)pItem;
lvi.pszText = LPSTR_TEXTCALLBACK;
if (GetListCtrl().InsertItem(&lvi) == -1)return FALSE;

LPSTR_TEXTCALLBACKを使用して

void MyListView::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult) {
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
を呼び出しています。

すると本来個々のpDispInfo->item.lParamにはしまいたいデータの構造体が
入っているはずだと思うのですが、null値になってしまっています。
どのような原因が考えられるでしょうか?

0912デフォルトの名無しさんNGNG
>>911
そのpItemはどこにあるのかな?newで作ってる?
0913デフォルトの名無しさんNGNG
>912
その直上でnewで作っています。
ドキュメントにデータを保存しておいてドキュメントへのポインタ
pDoc->***でデータを出してきてそこにしまってからLV_ITEM構造体を呼んでいます。
参考文献は「MFCによるWINDOWS プログラミング改訂新版 MicrosoftPress」
です。
struct member_st *pItem;
try {
pItem = new struct member_st;
}
catch (CMemoryException* e){
e->Delete();
return FALSE;
}
pItem->name = pDoc->name;
pItem->date = pDoc->date;
LV_ITEM lvi;

0914デフォルトの名無しさんNGNG
>>911
LV_ITEMをゼロクリアするか、すべてのメンバに適切な値を入れてる?
0915913NGNG
自己レスです。
いろいろサンプルソースコードとにらめっこして
考えているのですが結局どこがいけないのかわからないです。
これはCSplitterWndを使用してるのでその関係なんでしょうか・・・・。
メッセージからOnGetDispInfo関数を呼び出すときに
メッセージがどこか回り道してその間にpNMHDRの中身が失われてるとか・・・・・
0916913NGNG
知恵熱出るまで悩んで答えがわかりました。
Llvi.mask = LVIF_TEXT|LVIF_PARAM;
のLVIF_PARAMをいれないとlParamが有効にならないんですね・・
うーん。すっきりしたーーー
でもこのmaskって何の意味があるんだろう・・
0917デフォルトの名無しさんNGNG
AppWizardで ファイルの拡張子 を空白(初期状態)のままスケルトンを作成したプロジェクトに
拡張子だのファイルタイプだの追加するにはどうすればいいのでしょう?(;´Д`)
0918デフォルトの名無しさんNGNG
>>917
StringTableリソースのIDR_MAINFRAMEを編集すればいい。
書式は適当に検索して探して。
0919 NGNG
>>916
(MFCの)バージョンによってメンバが増えることがあるから、
maskで明示的に「このメンバに入れた値を使え」と指示されたものだけ
使うようにできているのだ。
0920デフォルトの名無しさんNGNG
>>918
おお、出来た。
ありがとう。助かりましたヽ(´Д`)ノ (Д`ノ) ヽ(   )ノ (ヽ´Д)。
0921910NGNG
>>910
誰か・・・手がかりはないか・・・
0922デフォルトの名無しさんNGNG
>>921
対症療法しか知らんが、
GetListCtrl().InsertItem(&item); の後で
GetListCtrl().SetCheck(nIndex); すればきっとチェックされるだろう。
0923デフォルトの名無しさんNGNG
>>922
一応それでやってたんだけど、なんかもっと綺麗にできないかなと思って。
0924デフォルトの名無しさんNGNG
 独自のメッセージの処理の仕方がわかりません。
 具体的には、リストビューの上にエディットボックスをCreateして、そのエディッ
トボックスがフォーカスを失ったらそれをリストコントロールにメッセージを送って
処理をしたいんです。エディットボックスの方でOnKillFocusでメッセージ送信させ
てる(つもり)なのですが、PreTranslateMessageとかで受信するんでしょうか?
なにかほかに準備が要るっぽいんですが、どうしたらいいのでしょう??
 レベルの低いしつもんでスマソ
0925デフォルトの名無しさんNGNG
CEditCtrlでEnterを押した時に何かさせたいんだけど、どーすれう゛ぁ・・・。
0926デフォルトの名無しさんNGNG
>>925
キー操作Msg受け取るハンドラなかったけ?
0927デフォルトの名無しさんNGNG
コンボボックスの候補表示したときに(右の逆三角マークを押す)
候補が1項目分しか表示されないんだけど
これを5項目表示とかにするにはどうするのですか?
0928デフォルトの名無しさんNGNG
>>926
サブクラス化すればそこらへんどーとでもなりますけど配置めんどいんで('_`)。

>>927
候補はちゃんと複数登録してる? ダイアログエディタで配置するなら、
各項目を入力した後にctrl+Enterして、データを複数行にしないと駄目だYO!
もし「びろ〜ん」のサイズが絶対的に足りないと言う理由なら、同様に配置画面で
▽ をクリックすると、びろ〜ん時サイズ編集モードになるから。
適当に下方向に伸ばしてみるが吉。

コードで構築してるなら対処法が全然変わってくるから、又質問してみて〜。
0929927NGNG
>>928
動的に(コンボボックスに)項目追加しております。
(CComboBox::AddString)
0930デフォルトの名無しさんNGNG
CFormViewの派生クラスにRichEditコントロールを貼り付けると、コントロール内で
右クリックしたというメッセージNM_RCLICKのハンドラを追加できるのですが、なぜか
右クリックしてもそこへハンドリングされません。どんな原因が考えられますか?
0931デフォルトの名無しさんNGNG
>>929
>>928も書いてるけど、リソースエディタでコンボボックスの▼を
クリックするとサイズを広げられる。

>>930
RichEditのバージョンだったかが原因だったような・・・
RichEditの派生クラスを作ってWM_RBUTTON〜を処理した方が早いかも
0932929NGNG
>>928,931
失礼しました。
リソースエディタ上でやるのでしたか。
たしかにできました。ありがとうございました。

じゃついでに、
プログラム内であのサイズって変更できないのですか?
0933デフォルトの名無しさんNGNG
>>932
Createの第二引数で。
0934932NGNG
>>933
つまり一回きり、もしくはcreateしなおしって事ですか?
0935デフォルトの名無しさんNGNG
>>934
SetWindowPos。
これくらい自分で試してみようよ。
09361NGNG
そろそろなんで新スレ作りました。

■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/test/read.cgi/tech/1014057520/
0937930NGNG
>>931
ありがとうございます。
バージョンですか・・・どうしようもないっぽいですねぇ。
その方向でやってみます。
0938デフォルトの名無しさんNGNG
ファイルのドラッグ&ドロップを受け取るMFC ActiveX Controlを作成しようとしています。
通常のウインドウと同じ方式、(DragAcceptFiles()して、OnDropFiles())(COleDropTargetを持たせる方法)
でうまく動かないのですが、何か特別な手続き方法が必要なのですか?
0939デフォルトの名無しさんNGNG
const_castってアセンブラではどのようになってるのでしょうか?
アセンブラではというより、内部ではどのようにconst属性をはずしてるのでしょうか?
また、これは絶対にはずせるものではないですよね?はずせるものと
そうでないものの違いは?
0940デフォルトの名無しさんNGNG
単にコンパイラのシンボルテーブルのフラグを制御するだけだろ。
殆どのコンパイラは、文法上の書きこみチェックをするだけ。
0941デフォルトの名無しさんNGNG
検索サイトとかのURLエンコード(日本語が%21%5A%C2とかになるやつ)を
楽にやる方法ありませんか?
0942デフォルトの名無しさんNGNG
あのーageないでもらえますか。

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