1 :
デフォルトの名無しさん:
VisualC++相談室はすでにあるようですが
MFCに限ったお話をしましょう。
ルールを提案。
Qは高度なものからくだらないものまで何でもOK。
Aは「知ってるつもり君」、「えらそうに解説する人」お断りと
いうことで。
えらそうにスレ立てる人もお断りということで。
Q「MFCはなんでこんなにクソですか?」
5 :
デフォルトの名無しさん:2001/05/15(火) 19:37
>> 1
細かいルールとかは別にいらないんじゃない?
といいつつ質問
CStringの文字列の一部を別の文字で置き換えるのってどうやるの?
CString文字列をChar配列にコピーしてからstrncpyして
それをCStringに戻すってのはなんか汚いよね
他にいい方法知ってる人教えてください
>>5 CString::GetBufferでポインタを取得して、中をいじったあとCString::ReleaseBuffer。
7 :
デフォルトの名無しさん:2001/05/15(火) 20:14
「豆知識」
ReleaseBuffer()しないと別のCStringに代入できんし
GetLength()してもsizeは0のままなので要注意だ。
この2つはセットで使うようにしよう。
8 :
デフォルトの名無しさん:2001/05/15(火) 20:29
MFCって便利ですね。クソ面倒くさい登録作業とかやらなくていいし。
CSpinButtonCtrl の SetRange32() ででっかい範囲を設定できるのは
いいんだが、どうやってそこにでっかい値を設定するんだ?
SetPos()だとUD_MAXVAL(0x7FFF)までしか設定できんぞゴラァ!
SetPos32()はどこだゴラァ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10 :
デフォルトの名無しさん:2001/05/15(火) 22:08
∧∧
(゜Д゜)<ハァ?
||
||_
(________Э
||∴
||∵
жж _
11 :
デフォルトの名無しさん:2001/05/15(火) 23:50
>>5 >CStringの文字列の一部を別の文字で置き換えるのってどうやるの?
効率悪いかも知れないけどCString::replace()ってのもあり。
12 :
デフォルトの名無しさん:2001/05/16(水) 00:04
MFCなんか覚えてもプログラマとしての実力はなにも伸びない
VC++をマスターしたつもりでもプログラマとしての実力はなにも変わっていない。
13 :
デフォルトの名無しさん:2001/05/16(水) 00:18
>12
でも楽だからいいじゃん。ね。C++で普通にWINのプログラムする方法知らないとよくわからないわけだし。
14 :
名無しさん:2001/05/16(水) 00:29
MFCはうまく使えばなんてこたないよ。
うまく扱えず落ちこぼれる人もいるようだけど。
現状、MSの仕事やるんなら、覚えておかないとダメだと思うよ。
びるだーを経験した後に MFC を触ると、インターフェースのクソさに
キれたくなる. ラジオボタンをビルダーなみに使いやすくしる!
16 :
>15:2001/05/16(水) 00:37
同意。
でもエディタがクソ。
17 :
デフォルトの名無しさん:2001/05/16(水) 00:45
漏れあんまMFC使わんからわからんのだけど、
std::stringじゃなくてCStringを使うメリットってなに?
やっぱオーバーヘッドを気にしての事?
18 :
デフォルトの名無しさん:2001/05/16(水) 00:46
>17
結合とか容易だからじゃない?
19 :
デフォルトの名無しさん:2001/05/16(水) 03:28
.NETではMFCってどうなるんだろ。
20 :
デフォルトの名無しさん:2001/05/16(水) 09:44
>>17 - MFC では CString を引数に取る関数が多い
- MFC の提供するシリアライズ機能が使える
- BSTR との変換やリソースから文字列を読み込むような Win32 固有の機能
が実装されているので、便利。
21 :
デフォルトの名無しさん:2001/05/16(水) 10:14
>>20 そうそう。文字列クラスって、単体でどんなにがんばっても、
そのクラスを引数にして、値の受け渡しができないと意味が無いよね。
その点、MFCではWin32ではchar*とバッファサイズで
文字列を受け取る関数をほとんどCStringで受け取れるようにラップ
してあるから便利。
MFCを経験したあとにびるだーを触ると、機能の貧弱さに
キれたくなる。プッシュボタン型チェックボックスをVC++なみに使いやすくしる!
>>1 MFCって自体、ぼろくそに叩かれてこのスレ終了かと思っていたけど
結構順調な滑り出しですな。マターリマターリ
24 :
デフォルトの名無しさん:2001/05/16(水) 10:48
CDockBase(だっけ?)等の非公開クラスについて書いているページありませんか?
25 :
デフォルトの名無しさん:2001/05/16(水) 11:59
MFCで、メインフレームを起動時に最大化しても元に戻ってしまうバグ的仕様が解消されたのはいつですか?
26 :
デフォルトの名無しさん:2001/05/16(水) 12:25
>そうそう。文字列クラスって、単体でどんなにがんばっても、
>そのクラスを引数にして、値の受け渡しができないと意味が無いよね。
同感同感。過去、コアサービスがBSTRとstd::string、
表示用DLLがMFC-DLLでCString使用といったアプリ書く
ことになったんだが値の受け渡しはけっこう苦労したよう
に記憶している。
変換表みたいなの作ってないと、CString<->BSTRだけでも
あれ?これどうやって渡すんだっけかなんてことになる。
その後、_bstr_tなるマクロを知って、だいぶ楽になった。
27 :
デフォルトの名無しさん:2001/05/16(水) 12:42
>>そうそう。文字列クラスって、単体でどんなにがんばっても、
>>そのクラスを引数にして、値の受け渡しができないと意味が無いよね。
>同感同感。過去、コアサービスがBSTRとstd::string、
>表示用DLLがMFC-DLLでCString使用といったアプリ書く
>ことになったんだが値の受け渡しはけっこう苦労したよう
それはクラスライブラリというもののの問題点では。
関数ライブラリであれば複数組み合わせても違和感無いが、
クラスライブラリを複数にすると受け渡し時にコーディングが発生っていう。
MFC/ATL/.NETと増やすのやめて欲しい...と思ったが自分は余り関係無い。
CString に機能追加したくて継承してみたんだけど
=とか<とかオペレータ演算子が使えなくなってしまいました。
機能追加部分以外はCStringとまったく同じ動きにさせたいんだけど
どうやって書けばいいの?
教えてください
29 :
デフォルトの名無しさん:2001/05/16(水) 19:40
>>27 まあそれはわかるんだが現実問題として横たわっている。
ATL/COMで作ったNTサービスをWebインターフェースから
使う場合や、そのサービス自身の制御用プログラムを製造する
ときとか。全部ATLでやると開発工数かかったりPG限定されたりでモゴモゴ・・・
>>29 話が逸れるけど ATL 使えるプログラマって不足してるの?
>>30 NT/2000で常駐型のサービスというだけでATL/COMになるよ。
オレ自身業務系/ネットワーク系問わず監視サービス書いたり
することは少なくない。つーか最近そればっかり。
ただまあ、一般的かというとそうでもないから不足してのか?
と聞かれると判断つかないや。
外注あたってもスキル餅がめったにいないんだもの。
いても人月140+とか。オレの社内単価より高いぞゴラァ。
>6 >7 >11
ありがとー!
マップモードをMM_TEXT以外にしてから
ディスプレイに全角文字を表示させると
例)
pDC->TextOut(0, 0, "文字列");
正しく表示できません。
どうしたらうまくいくんでしょう?
34 :
デフォルトの名無しさん:2001/05/18(金) 19:35
age
35 :
デフォルトの名無しさん:2001/05/18(金) 22:28
ダイアログベースのMFCアプリで、ダイアログに張り付けた水平スクロールバーの位置がOnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)のnPosに入ってるらしいのですが、イマイチその辺の処理がわかりません。ヒントをください。
36 :
35:2001/05/18(金) 22:30
あ、質問の意図がはっきりしてない。
スクロールバーにへPosに入ってる位置情報を設定するにはどうすれば良いのかということです・・・。
37 :
35:2001/05/18(金) 22:50
あ、検索したらありました。
age
age
age
age
age
43 :
35:2001/05/19(土) 00:19
44 :
デフォルトの名無しさん:2001/05/19(土) 00:40
どこらへんがダメでした?
45 :
35:2001/05/19(土) 00:46
とりあえず、スクロールバーの親ウインドウにint型の変数myScrollPosを追加して、親ウインドウのOnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)にサンプルコードをコピペしたのですが、ダメでした。
46 :
35:2001/05/19(土) 00:47
ダメというのはつまりスクロールしないということです。
47 :
35:2001/05/19(土) 00:52
あと、スクロールバーのメンバ変数にint型の変数(DDX?)を設定できるのですが、その変数はどうやって使うものなのでしょう。
48 :
35:2001/05/19(土) 01:33
age
スクロールがうまく行っているMFCのサンプルコードでも拾ってこい>35
50 :
デフォルトの名無しさん:2001/05/19(土) 05:21
スクロールバーを離すと戻ってこそMFC(MS)
51 :
デフォルトの名無しさん:2001/05/19(土) 09:21
>>35 どうやって書いたらどのように動かないのか、それを示せって。
52 :
51:2001/05/19(土) 09:38
>>35 あぁ、わかったよ
スクロールレンジが決まってないだけだろ。
53 :
デフォルトの名無しさん:2001/05/19(土) 09:42
>>47 DDX = ダイアログデータエクスチェンジ
たとえばint型DDX変数 m_nScroll がある場合
UpdateData(TRUE)を呼ぶことででスクロールバーの値を
m_nScrollに取得できる。
反対に、UpdateData(FALSE)でm_nScrollの値を
スクロールバーに反映できる。
DDX変数には値の上限、下限を設定できるDDVというものもあり
とっても便利&Heart
54 :
デフォルトの名無しさん:2001/05/19(土) 09:43
ハートが出ない・・(鬱
55 :
デフォルトの名無しさん:2001/05/19(土) 10:20
>>36 スクロールレンジをセットしてからWM_HSCROLLのメッセージハンドラを
以下のように記述。
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
UpdateData(TRUE);
m_str.Format("%d", m_nScroll1);
UpdateData(FALSE);
TRACE("CTestDlg::OnHScroll%d,%x\n", nPos, pScrollBar);
switch(nSBCode){
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos(nPos);
break;
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
56 :
55:2001/05/19(土) 10:21
あ、ごめん、
TRACE消し忘れた。
消してね
57 :
55:2001/05/19(土) 10:24
>>36 余計なもの消してなかった!ごめん!
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
switch(nSBCode){
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos(nPos);
break;
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
58 :
35:2001/05/19(土) 19:49
>57
駄目でした。ダイアログに貼り付けられたスクロールバーにレンジが設定できないみたいです。あとSetScrollPosでポジションも指定したのですが、位置が変わりませんでした。
SetScrollRange(IDC_SCROLLBAR1,0,10,TRUE)で、1番目の引数をNULLにするとダイアログの端に自動的にスクロールバーができますよね。
そのときはレンジが設定できました。ポジションも設定できたのですが、動かすと強制終了になってしまいました。
>>58 おいおい。
お前の言ってるSetScrollBarてのは、
1.::SetScrollRange
2.CWnd::SetScrollRange
3.CScrollBar::SetScrollRange
のどれだ?
少なくとも俺は第1引数にコントロールIDを取るようなSetScrollRangeの
オーバーロードを見たことがない。
まずAPIなりクラスメンバの使い方をきっちり調べれ!
ここで訊くのはそれからだ。
60 :
35:2001/05/19(土) 20:38
>59
コードエディタでSetScrollRangeと入力し出てきた引数の型を適当に判断したのが間違いでした。
それから気づいてOnHScrollの引数の*pScrollPosでRangeを設定したらちゃんとできました。
本当に馬鹿で申し訳ない。どうもありがとうございました。
61 :
デフォルトの名無しさん:2001/05/20(日) 00:34
すいません。あるクラスから別のクラスのpublic変数にアクセスする方法がわかりません。いかんせんMFCが初めてなもので。MFCじゃなかったらわかるのですが。MFCのクラスの実体がどこにあるかわからないのです。
>>61 MFCでも何でも一緒だと思うが。
# Viewのインスタンスへのポインタの取り方がわからんとかそういうこと?
63 :
デフォルトの名無しさん:2001/05/20(日) 00:56
View?
聞いたことない単語ですが、アクセスしたい変数がるクラスのインスタンスがどこにあるのかわからないということです。
インスタンスの所在が不明なので、その変数を返す関数にもアクセスできないのです。
>View?
>聞いたことない単語ですが、
まじですか
65 :
デフォルトの名無しさん:2001/05/20(日) 01:19
>>63 具体的に、どういうクラスのインスタンスポインタが欲しいか
言ってください。
GetActiveViewとか、GetActiveDocument、AfxGetMainWnd、
GetDocument()、いろいろあるよ。
そういやあ、Afxってどういう意味?
アフロX?
67 :
デフォルトの名無しさん:2001/05/20(日) 01:23
>65
リソースエディタで生成したダイアログクラスです。
68 :
デフォルトの名無しさん:2001/05/20(日) 01:30
CXXXDialog dlg;
dlg.m_EDIT1.SetWindowText("逝ってよし");
dlg.m_EDIT2.SetWindowText("オマエモナー");
こういうことか?
ClassWizardでメンバ変数をCStringとかにしてんのかな。
メンバ変数作成するときに「値」じゃなくて「コントロール」
にすれ。つーかサンプルコードも読め。
69 :
65:2001/05/20(日) 01:32
うっ、その場合には自分で作る必要があるでしょう。
CAboutDlg aboutDlg;
aboutDlg.DoModal();
みたいに。
70 :
デフォルトの名無しさん:2001/05/20(日) 01:34
変更が面倒なら
CEdit* ed = GetDigItem(IDC_EDIT1);
ed->SetWindowText("逝ってよし");
でもいいぞ。
71 :
デフォルトの名無しさん:2001/05/20(日) 01:36
65のアプリの画面はリソースエディタで作ったダイアログ
ベースのアプリつーこと?
72 :
デフォルトの名無しさん:2001/05/20(日) 01:57
頭が混乱してきました。すみません。
概ねこんな感じです。長文です。
まず、MFCアプリWizでダイアログベースのスケルトンを生成しました。
生成されたダイアログはCMyDlgです。
次にCMyDlgのメニューを押したら出てくるダイアログを作りました。
CMyDlg2です。
CMyDlg2にはIDC_STATICではないスタティックテキストがあってそれにCString型変数(m_TextCaption)を追加しました。
このm_TextCaptionを違うダイアログで設定した値に書き換えようと思い、CMyDlg3を作りました。
CMyDlg3にはテキストボックスがあり、それに文字を入れてOKボタンを押すとCMyDlg2のm_TextCaptionに値が代入されるようにしようと思いました。
そこでSetTextCaption関数を作りました。引数はCString型(temp)で、テキストボックスの値が入ります。m_TextCaption=temp;というかんじです。
しかしCMyDlg2の関数へのアクセス方法がわからないので駄目でした。
もうMFCは終わるのに熱心だね。
KFC
75 :
デフォルトの名無しさん:2001/05/20(日) 02:15
>>72 CMyDlg2の、どのインスタンスかを指定しないと代入できるわけがない。
CMyDlg3を実体化するときに、テキストを変更したいCMyDlg2のインスタンスを
渡してやればよい。
クラスとインスタンスの違いがわかってないように読める。
76 :
65:2001/05/20(日) 02:25
CMyDlg2 md2;
md2.SetTextCaption(CString("AAA"));
md2.DoModal();
とか、こういう感じでいいと思うのだけど・・。
77 :
デフォルトの名無しさん:2001/05/20(日) 02:29
■OKボタンを押したら、CMyDlg3を閉じる場合
※CMyDlg2側に書く
CMyDlg3 dlg;
if(dlg.DoModal()==IDOK)
{
m_TextCaption = dlg.m_EDIT1 //CString型で宣言した場合
m_TextCaption.Update();
}
■OKボタンを押してもCMyDlg3を維持してCMyDlg2のメンバを書き換える場合
※CMyDlg3側に書く
CMyDlg2;;OnOK()
{
CMyDlg2* parent = (CMyDlg2*)GetParent();
if(parent)
parent->SetTextCaption(m_EDIT1);
}
78 :
デフォルトの名無しさん:2001/05/20(日) 02:31
誤:CMyDlg2;;OnOK()
正:CMyDlg2::OnOK()
79 :
デフォルトの名無しさん:2001/05/20(日) 09:11
CStringってstrlenで調べるとちゃんとした値が出るのに、
GetLengthだとたまに変な値が帰ってくるのは何故?
特に400byteとか大きな文字列を入れているとき起こりやすいような。
80 :
デフォルトの名無しさん:2001/05/20(日) 12:12
>>79 GetLength()がNUL文字までの文字長を返すわけではないからです。
文字列バッファの前方に長さ等を保持しているんですが、詳細は
MFCのソースを読んでください。
81 :
72:2001/05/20(日) 13:03
>75
その方法で解決できました。どうもありがとうございました。
VC++ってフリーソフトですか?
マイクロソフトのホームページでダウンロードできますか?
age
>83
買え
85 :
デフォルトの名無しさん:2001/05/20(日) 17:30
ダイアログベースアプリで、ENTER押しても終了しないようにするにはどうすればいいのでしょう。
87 :
デフォルトの名無しさん:2001/05/20(日) 18:15
>86
殺しましたがENTERで終了してしまいます。
自クラスになんも処理しない
virtual void OnOK();を作ればOK。
ついでにID_OKでダイアログを終了するには
CDialog::OnOK()をよぶ。
89 :
デフォルトの名無しさん:2001/05/20(日) 18:41
>88
できました!ありがとうございました。
90 :
デフォルトの名無しさん:2001/05/20(日) 19:52
僕も質問があるのですがよろしいでしょうか???
VCを使ったプログラミングで、
マウスポインタが画面の端に移動したことを
感知するにはどうすればよいのでしょう?
ご存知の方がいましたら宜しくお願いします。
91 :
デフォルトの名無しさん:2001/05/20(日) 23:09
>>90 大麻でもセットしてGetCursorPosで常に監視とか、アイドル時に同様の方法で監視。
それぐらいしか思いつかん。
ウインドウメッセージ拾うんじゃダメ?
93 :
デフォルトの名無しさん:2001/05/20(日) 23:16
画面のマッピングモードをMM_TEXTから変更すると上手く円を描けません。
どうしたら上手く円を描画できるのでしょうか?
MM_TEXTだと普通に
pDC->Ellipse(0,0,100,100);
で、円がかけるのですが
pDC->SetMapMode(MM_TWIPS);
を上に挿入すると描けなくなってしまうんです。
94 :
デフォルトの名無しさん:2001/05/20(日) 23:20
>>90 やったことないけど、WM_MOUSEMOVEでWindowFromPoint()するのはどう?
95 :
デフォルトの名無しさん:2001/05/20(日) 23:27
>>93 MM_TWIPSでは下方向はマイナスですよ。
だから
pDC->Ellipse(0, 0, 100, -100);
が正解ですね。
96 :
デフォルトの名無しさん:2001/05/20(日) 23:38
ビュークラスのWM_MOUSEMOVEハンドラでチェックじゃダメ?
void CTestView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
CRect rectWindow;
GetWindowRect(rectWindow);
if(!rectWindow.PtInRect(point)){
TRACE("マウスがウィンドウの外に出ているよ\n");
}
CView::OnMouseMove(nFlags, point);
}
98 :
93:2001/05/21(月) 08:19
>>95 どうも有り難うございます。おかげで助かりました。
>>90 「画面の端」ってスクリーンでの端かウィンドウ単位の端かどっちよ?
>>90 GetCapture しといて WM_MOUSEMOVE で座標を確認したらいいよ
SetCaptureだったかも?
102 :
遅レスですが:2001/05/26(土) 00:35
103 :
浮気者:2001/05/26(土) 03:29
DelphiでのApplication.Processmessagesや、VBでのDoEventsに対応するVC++のコードって何でしょうか。教えて欲しいです。
MFC:PumpMessage SDK:PeekMessageとかで自作>103
105 :
デフォルトの名無しさん:2001/05/28(月) 22:48
>>100 それじゃマウスのボタンを押している間しか有効でなかったような。
106 :
質問です:2001/05/29(火) 15:09
はじめてMFCアプリつくってるのですが、
ダイアログベースで作成したアプリそのものを、
SetWindowRgnをつかって不定形ウィンドウにしたいのですが
どのように適用すればよいでしょうか?
教えてください
107 :
デフォルトの名無しさん:2001/05/29(火) 15:10
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
108 :
デフォルトの名無しさん:2001/05/29(火) 15:10
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
>>106 OnInitDialogのときにやれば?
111 :
こーすけ:2001/05/30(水) 17:36
現在、Webブラウザに貼り付けたActiveXへファイルをドラッグ&ドロップ
してファイルのパスをリストに表示するOCXを作成中です。
ちなみに現在はドラッグ&ドロップしたらメッセージボックスが出るだけです^^;
つまっている点は、オーバーライドした以下の関数
OnDrop(COleDataObject* pDataObject,・・・)で
pDataObjectからどのようにドラッグドロップしたファイルのパスを取り出すか
が今だにわかりません。
おまけにテストコンテナ終了するたびにアプリケーションエラーでるし。。。
泣き入ってきました。
112 :
sage:2001/05/30(水) 17:40
MFCで保存先のフォルダを指定してプログラム内固定のファイル名
を使用し保存することって簡単に可能なのでしょうか?
フォルダダイアログクラスみたいなの。
114 :
デフォルトの名無しさん:2001/05/30(水) 23:02
どうも、いつも参考にさせてもらってます。
今度、SDIが二つ横に並ぶようなアプリを作ろうと思ってます。
この実現方法として次のうちのどれが一番よいでしょうか?
1.SDI+CFrameWndの継承クラス
2.SDI+SDI
3.SDIのアプリを2つ作って通信させる
2が一番よいのかもしれませんが、
DOC/VIEWを自前で自装するのって可能ですか?
>>114 115に同意。プロセス間通信を使うのが手っ取り早い。
メニューは1個なの?
118 :
デフォルトの名無しさん:2001/05/31(木) 00:27
>>114 SplitterWndを使うのかな???
119 :
こーすけ:2001/05/31(木) 20:47
>>113 ありがとうございます。無事に取得できました。
これってフォルダをドロップしたときは中身のファイル名が
だーっと出てくるんだ思ったんですが、違うんですね。。。
>>114 SDIは
App--FrameWnd--DocTemplate--Doc--View
が全て1対なので、Appに対して別フレームをもうひとつ作るのは無理(たぶん)
できるとしてもかなりマニアックなつくりになるので、
2アプリ作るか、親子関係を確定する設計にするか(1か3)のどちらかにしたほうがいいと思います。
121 :
114:2001/06/02(土) 00:59
みなさん、アドバイスありがとうございます。
今のところ、1の方法で始めています。
SplitterWndとは何でしょう?あとで調べてみます。
122 :
デフォルトの名無しさん:2001/06/02(土) 03:53
>>121 CSplitterWndクラス。エクスプローラで、ディレクトリ部分
と中身部分のウィンドウを分けるのに、中に縦棒を付けて
Viewを分割してる。
オレとしては121さんが何をしたいかよくわからないわけだけど・・・。
123 :
かなりの初心者:2001/06/02(土) 05:58
libpngをMFCで使おうと思い、いろんなwebページを参考にnmakeまでは出来ました。
libpng.lib、zlib.libをC:\Program Files\Microsoft Visual Studio\VC98\Libにコピーし、
png.h、pngconf.h、zlib.h、zconf.hをC:\Program Files\Microsoft Visual Studio\VC98\includeにコピーしました。
しかし、リンカが思った通りに動いてくれません。
pngtestDlg.obj : error LNK2001: 外部シンボル "_png_destroy_write_struct" は未解決です
pngtestDlg.obj : error LNK2001: 外部シンボル "_png_write_end" は未解決です
このようなエラーがでてしまいます。
原因はなにが考えられるでしょうか?
ライブラリが指定されていない。
125 :
うぉ:2001/06/02(土) 06:37
>>124さんありがとうございます。フォルダにコピーしただけじゃ駄目なんですね!!
プロジェクト→設定→リンクタブ→オブジェクト・ライブラリモジュールにzlib.lib libpng.libを書きこむとリンカが動いてくれました!!
でもLINK : warning LNK4098: defaultlib "LIBCMT" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
という警告が出ますがこれは自力で解決してみます。
126 :
123-125:2001/06/02(土) 07:15
ふーん
128 :
126:2001/06/02(土) 10:10
上の方の分割ってコトバは聞いて
MFCでフォルダ指定ダイアログが簡単に作成できました。
お騒がせしましたです。
最近なんか頭がまわらなくなってきたよーな。。。
130 :
初心者:2001/06/02(土) 21:37
MFCのプログラムをデスクトップに常駐(通常、右下配置のやつ)
させたいのですが、どうしたらよいのでしょうか?
教えてください
131 :
デフォルトの名無しさん:2001/06/02(土) 22:36
132 :
石田:2001/06/03(日) 15:14
130ですがありがとうございます>131さん
あなたとても親切!!
石田兄弟
133 :
デフォルトの名無しさん:2001/06/04(月) 18:48
メニューの、淡色表示になっているIDR_AIUEOを、普通の表示に戻したいのですが、強制終了になってしまいます。
色々試したのですが、最終的に下のような変な形になりました。でも強制終了になります。
どうすればよいのでしょうか。
HMENU *m;
CMenu *cm;
*m=GetMenu((HWND)theApp.m_pMainWnd);
cm=(CMenu *)m;
cm->EnableMenuItem(IDR_AIUEO,MF_BYCOMMAND|MF_ENABLED);
CMenu::FromHandle使え。
135 :
デフォルトの名無しさん:2001/06/04(月) 21:23
やってみましたが強制終了してしまいます。どこが間違っているのでしょう。
HMENU m;
CMenu *cm;
HWND h;
h=(HWND)CHOGEApp::GetMainWnd();
m=GetMenu(h);
cm=CMenu::FromHandle(m);
cm->EnableMenuItem(IDR_SAVEPROJECT,MF_BYCOMMAND|MF_ENABLED);
136 :
デフォルトの名無しさん:2001/06/04(月) 22:08
>>135 普通に、CApp 派生クラスか CDocument派生クラスに有効化したい
コマンドのUPDATE_UI ハンドラを書いて、pCmdUI->Enable()する
のはまずいのですか?
137 :
名無し:2001/06/04(月) 22:12
m_bAutoMenuEnable変数のセットは?
138 :
135:2001/06/04(月) 22:23
大事なことを言い忘れてました。
メニューの、淡色表示とは別のアイテムを押すと、淡色表示が元に戻るようにしたいのです。
すみません。
139 :
デフォルトの名無しさん:2001/06/05(火) 13:32
>>138 UPDATE_UI...じゃなかった、ON_UPDATE_COMMAND_UIハンドラを書く。
『Visual C++ プログラマーガイド』の「メッセージの処理とマッピング」を
参照してください。あとこれは蛇足ですが、僕はちゃんと適切なことを書いて
いますので信じておくのが吉です。
140 :
fujita:2001/06/05(火) 22:22
インターネット関連のアプリ作りたいのですが、
よくありがちな
・指定したURLにブラウザを立ち上げてジャンプ
・指定したe-mailに送信するためにメールソフトを立ち上げ新規作成
は、どうやったらできるのでしょうか?
おしえてください。よろしくお願いします
メールは?>141
"mailto:〜@〜"
でいいんだっけ?
143 :
デフォルトの名無しさん:2001/06/05(火) 22:30
てゆうかメッセージマップって何?
145 :
143:2001/06/05(火) 22:40
やっぱ終了。
>>145 「やっぱ」って?
なにがやっぱりなんですか?
147 :
135:2001/06/05(火) 23:42
>139
色々試した結果、WM_COMMANDをマップしてるところへ
CMenu *cm;
cm=GetMenu();
cm->EnableMenuItem(IDR_SAVEPROJECT,MF_ENABLED);
とやるとできました。最期までつきあってもらってどうもありがとうございました。
148 :
139:2001/06/06(水) 00:17
漏れはもっと最後までちゃんとつきあいたかったよ。
149 :
fujita(140):2001/06/06(水) 17:22
thanks!!
>141
>142
WM_COMMAND_RANGEをクラスウィザードで追加する方法を教えて
ください
お願いします
154 :
デフォルトの名無しさん:2001/06/06(水) 23:46
他人が作った.DLLを勝手に使おうと思うんですけど、困りました。
.DLLはC++のクラスがエクスポートされているようで、
dependencywalker2.0で見ると、クラスのコンストラクタやらメンバ関数やら
引数や戻り値が見えました。
でもこれから先どうすればいいのかわかりません。
ふつうのCの関数は、LoadLibraryで.DLLをロードして
GetProcAddressで関数のアドレス調べて、呼ぶというのは知っています。
クラスをnewして、メンバ呼んで…ていうのは、どういう風に書くのでしょうか?
環境はVisualC++6.0です。なんとかかんとかお願いします。
>>155 どうにもなりません。手動で何とかしてください。
157 :
デフォルトの名無しさん:2001/06/07(木) 04:51
>>154 LoadLibrary後、インラインアセンブラで直接CALLするのでは?
>>156 ではせめてON_UPDATE_COMMAND_UI_RANGEをクラスウィザードで
追加する方法だけでも教えていただけませんか?
よろしくお願いします。
2チャンネルって冷たいね
冷たいとかじゃなくて無いもんは教えられない。
道具を使わずに空を飛ぶ方法を教えてくれるやつは、歴史的に見て詐欺師である
可能性が非常に高い。麻原彰行とかな。
プロポーショナル送りってどういうものなのでしょうか?
>>162 フォントに含まれるグリフに送り幅情報を関連づけているのがプロポーショナルフォント。
164 :
154:2001/06/07(木) 19:11
誰かほんとに教えてもらえませんか?
やはり簡単にはできないんですかねぇ…。
165 :
デフォルトの名無しさん:2001/06/07(木) 19:56
モードレスダイアログをnewでつくって、
ダイアログ自身にdeleteさせたいんだけど、
どのタイミングでdeleteさせたら良いですか?
>>164 無理です。素直に普通の方法でやってください。
>>165 ダイアログを消したいときにdeleteしてください
168 :
デフォルトの名無しさん:2001/06/07(木) 21:47
>>154 普通のDLLではないんじゃない?拡張DLLかCOM(ActiveX)のDLLかも。
169 :
デフォルトの名無しさん:2001/06/07(木) 21:51
>>158 手動でハンドラを追加しましょう。それほど難しい作業じゃないです。
背景の色を変えたいのですがどこでかえればいいのでしょうか。
普通ならウインドウクラス構造体の設定で背景を指定すれば
いいのですがMFCだとそれが隠されているのでちょっとわかりません。
お願いします。
>>170 別に隠されてないよ。
PreCreateWindowをオーバーロードするとか。
MDIメインフレームの壁紙だったら、OnCreateでm_hWndMDIClientを
サブクラス化。サブクラス化先のウィンドウはCWndから派生させて
メンバ変数として持たせておく。
172 :
デフォルトの名無しさん:2001/06/08(金) 09:32
>>165 自己レス
PostNcDestroyでdelete thisすれば良いみたい。
楽チン楽チン
173 :
:2001/06/08(金) 13:53
ActiveXコントロールのプロパティーページについておたずねします。
ActiveXコントロールのプロパティとプロパティページのメンバをリンクさせたいのですが
うまくいきません。
コントロール側でm_hogeがあり、DoPropExchangeで永続化(PX_Long)
プロパティページがわで、DoPropExchangeで指定したプロパティ名で
おなじくDoDataExchangeでDDP_Radioで交換しています。
プロパティページ側はラジオボタンです。
>>154 ヘッダーとインポートライブラリがないと辛いと思う。
LoadLibraryは動的リンクなのでクラスのインスタンスをDLL内で宣言されていないと無理。(ってホントか)
>>154 適当な量のメモリを確保する。
dllからクラスのコンストラクタを関数としてGetProcAddressする。
さっき確保したメモリを引数として、コンストラクタを呼ぶ。
(呼び出し既約が異なるなら、アセンブラで実現する)
メンバ関数も、基本的に同様。thisをecxで取るような呼び出し形式で
なければ、第一引数をthisにして呼べばいい。
個人的にはそこまでしたくはないが。
MFCによるウインドウズプログラミングに書いてあったのですが
ダイアログの中のコントロールへのCWndポインタをGetDlgItemで取得して
(CListBox*)GetDlgItem(IDD_LIST)のようにして使うのは未熟で危険と
書いてありました。ある種の状況ではまったく機能しないとも。
どのようなときに危険なのでしょうか?
177 :
デフォルトの名無しさん:2001/06/09(土) 11:54
>>176 返されるポインタが一時的なものである、ということを
理解していれば別に危険ではないよ。おそらくその本は
あまり良くない本だと思う。
>>177 取得したポインタを保存しといて使うのがよくないと言うことですね。
その本によればAttachを使ってその都度取得するか、DDXを使うべし、
とかいてありますが、なぜだめなのかがちゃんと書いてありませんでした。
この本Microsoft PressのやつなんですがMicrosoftと関係ないの
でしょうか。
>>177 お礼をわすれてました。
アリガトウございました。
プロパティーシートで適用ボタンが押されたときにどのページで押されたかが
わかる方法ってありますか?
CMapテンプレートを
CMap<CString,CString&,CPoint,CPoint&>
みたいに使うとだめだしされるのですがどうすればいいのでしょうか?
亀レスだけど...
>>164 できる/できないのレベルでいうと、それは「できます」。
ひとことで言うと、ヘッダと implib をいかにしてでっち上げるか、ということです...。
それでも不可能と思うなら、ハッカーを探しなさい。
>>182 それはできるといえるのだろーか?
自分でヘッダーとかを作ってもまともに動かない気がするが
>>183 まぁ、確かに「できる」とはいっても、いろいろあるな。
漏れは単にリンクする方法を聞いているのだと思った。
まともに動くかどうかは漏れには関係のないことだが、
その DLL の呼び出し方が、少なくとも機械語レベルで正しいようには、
作ることが「できる」。
それで動かなければ、使い方がおかしい。
そうだね。方法さえわかればできないわけはない。
ただし、方法を見つけるのが限りなく難しいだけ。
>>185 でもそんなことしているまに自分で同じ機能のプログラムを作った
ほうが早い気が...
187 :
154:2001/06/11(月) 21:27
たくさんのヒントありがとうございます。
>>174 インスタンスといえば、BC++のサイトにはクラスを
エクスポートするサンプルとして
newしたポインタを返す関数をエクスポートしていました。
今使いたいdllはそれらしきものがエクスポートされてません。
>>175 試してみます。
>>182-185
アセンブラがいるようだと私には難しいのですね…。
>>186 あるデバイスにアクセスするために使われているdllらしいのですが、
デバイスの仕様が公開されていないのです。
dllをみるとエクスポートされた関数の名前が
「いかにも」で呼び出しさえできれば簡単に使えそうだったので
なんとかしたいなぁと…。
188 :
>>187:2001/06/11(月) 21:46
まったく簡単じゃないですよ。
たぶん自分で作ったほうが早いかと
ヘッダーとlibがないのならあきらめるのが賢明かと
189 :
182:2001/06/12(火) 11:11
>>187 仮想メンバ関数を呼び出そうとしたら大変なことになるけど、
non-virtual なメンバ関数を呼び出すくらいなら、
アセンブリ言語の知識が無くても、なんとかなると思うよ。
ひとことで言うと、「ハッキング」ですね(正しい意味で)。
単にエクスポート名のデコレーションを解いてクラスの宣言をでっち上げ、
空っぽのメンバ関数を書いて、同名で同じ顔をしたハリボテの DLL を
作ればいいんだから。
で、その DLL をリンクしたときにできた .lib を使えばいい。
まぁ、だいたい、大筋はこんなもん。
細部で少々、調整する必要が出てくるかも知れないけど。
でも、もし、いま書いたことが「???」なら、
やっぱり近くのハッカーを探した方がいいかも(クラッカーじゃないよ)。
190 :
デフォルトの名無しさん:2001/06/12(火) 13:17
>>189 クラスの宣言を使える程度にでっち上げるのが難しいと思われ。
どういう構造かは逆アセンブルしなきゃわかんないだろうし。
191 :
ななし:2001/06/12(火) 13:25
>>181 誰も答えないようなので、私がやってみよう。・・・
ああエラーになるね。
CMap< CString, LPCTSTR, CPoint, CPoint& >とするのが正当だろう。
192 :
デフォルトの名無しさん:2001/06/12(火) 14:17
OSに制御を渡す方法ってどうやるの?
ボタンクリック時に多重ループの処理を行うのですが、一度クリックすると、
そのイベントが終了するまで他のイベントを受け付けません。
(キャンセルボタンが別にあるのにクリックしてもOK処理終了するまで反応なし)
//サンプル
void CTest::OnOK()
{
while( 1 ){
// 処理(特定の条件でbreak)
}
}
VBで比較して悪いけど DoEventsの変わりになるような関数。
while( 1 )
// 処理
DoEvents
Wend
193 :
デフォルトの名無しさん:2001/06/12(火) 14:23
>>192 スレッドを作れば良いのです
ワーカスレッドあたりをキーワードで捜すとサンプルも出てきます
OnOK
↓
スレッドを作成
↓
OnOKを抜ける
↓
イベント待機状態に戻る
194 :
182:2001/06/12(火) 14:33
>>190 インスタンスのサイズなんてテキトーに多めに確保して渡しとけばいいし、
ただメンバ関数を呼び出すだけなら、メンバ変数なんて知らなくていい。
その DLL をリンクしてメンバ関数を呼び出したいだけなら、
でっち上げるのは至極簡単なはず。
でも確かに「使える程度」ってのが、どの程度かにもよるよね。
それ次第では逆アセンブルが必要になる。
ただしそこまでくると完全に「リバースエンジニアリング」になってしまうので、
場合によっては法的な問題が生じることになる。
195 :
192:2001/06/12(火) 15:12
>>193 確かにそうすればできると思ってたけど、
手抜きしたかったんですよね。
VBでいうDoEventsの変わりとなりそうなのはないか……。
そもそも VBと比較した時点で駄目ですね。逝ってきます。
何はともあれありがとです〜。
196 :
デフォルトの名無しさん:2001/06/12(火) 20:31
CEditViewのフォントを変えるにはどうすればいいのでしょうか?
CEditViewの中でSetFontを使うとエラーがでるのですが
197 :
デフォルトの名無しさん:2001/06/12(火) 20:58
>>192 BCBには
Application->ProcessMessages();
があるなり
198 :
デフォルトの名無しさん:2001/06/12(火) 21:28
>>195 適当にGetMessageをはさむべし
199 :
154:2001/06/12(火) 23:30
DLLを勝手に使うの件ですが、出来ました。
本当にありがとうございます!
コンストラクタのアドレスを調べて呼び出して…という方法は
僕にはうまくできませんでした。
次に同じ形のクラスを作ってできあがったインポートライブラリを
使うという方法を試しましたがこれがうまく行きました。
DLLのすべての機能を使うのは引数の構造体とか
知らないとできないのでこれは大変そうですが、とりあえず
欲しい機能の物が作れそうです。
ありがとうございました。
それから、
今までVC++でアセンブラを使うには別のソフトを入れないと
ダメだと思いこんでいました。
MSDN見たらインラインアセンブラは使えると書いてあるじゃないですか。
アホでした。
まーアセンブラは結局私には使えなかったのでアホのままなのですが。
200 :
デフォルトの名無しさん:2001/06/13(水) 00:19
CEditで全文字数を取得する方法ってあるのでしょうか?
>>195 >VBでいうDoEventsの変わりとなりそうなのはないか
GetMessage,TranslateMessage,DispatchMessageを
DoEventsの代わりに埋め込めばOK!
>>9 SendMassge(hWnd, UDM_SETPOS32, (WPARAM)0, (LPARAM)(INT)0x7FFFFFFF);
203 :
182:2001/06/13(水) 10:31
>>199 よかったね。 (^o^)/
> 次に同じ形のクラスを作ってできあがったインポートライブラリを
> 使うという方法を試しましたがこれがうまく行きました。
204 :
デフォルトの名無しさん:2001/06/13(水) 10:34
206 :
192=195:2001/06/13(水) 10:59
207 :
デフォルトの名無しさん:2001/06/13(水) 19:22
CToolBarを継承するにはどうすればいいのでしょうか?
208 :
208:2001/06/13(水) 22:32
完全に手作業しないといけないのでしょうか?
209 :
デフォルトの名無しさん:2001/06/14(木) 01:30
generic CWndから継承させといて、適当に手で CWnd -> CToolBarと
直せば?
210 :
デフォルトの名無しさん:2001/06/14(木) 17:49
MFC超初心者です。
MFCのキー入力はわかるのですが、ウェイトの設定方法がよくわからないです。
どなたかスロットゲームのソースを頂けないでしょうか?
スロットゲームのソースを見れば本当によく理解でき、勉強できると思うんです。
本当にめんどくさいこと書いて恐縮なのですが、どうかよろしくお願いします。
212 :
デフォルトの名無しさん:2001/06/16(土) 00:15
ファイルからbmpファイルを読みこんだものを
CBitmapクラスに取り込む方法を教えてください
(リソースのビットマップからなら楽なんですが)
よろしくお願いします
>>212 CreateDIBSectionとか。
214 :
デフォルトの名無しさん:2001/06/16(土) 17:34
LoadImage & Attach
>212
215 :
デフォルトの名無しさん:2001/06/16(土) 17:41
216 :
デフォルトの名無しさん:2001/06/16(土) 17:41
217 :
デフォルトの名無しさん:2001/06/16(土) 21:58
そんなことをいいだしたら、この手のスレの意義がなくなる
Q&A系ボードにそういうこと書くやつって必ずいるんだよな〜
>>215
218 :
215:2001/06/16(土) 23:35
DDBやDIBを解析するのは基本だと思うんだが....
>>215 書き方が悪いんだろ、アンサーになってないしな。
>>212 BitmapFileHeader,BitmapInfo,BitmapInfoHeaderをヘルプで調べてみ。
221 :
↑:2001/06/17(日) 01:24
222 :
デフォルトの名無しさん:2001/06/17(日) 07:29
>>212 CBrush::CreateDIBPatternBrush
が簡単だったり・・・・
223 :
212です:2001/06/17(日) 11:21
ありがとうございました
あっさりと214のキーワードを調べれば
できました、おさわがせしました
224 :
デフォルトの名無しさん:2001/06/17(日) 12:50
>>223 それで終わらせずDDBやDIBを勉強するように
225 :
デフォルトの名無しさん:2001/06/17(日) 13:53
bmpからgifに変換する方法をしりたいのですが
226 :
デフォルトの名無しさん:2001/06/17(日) 16:32
MS Web Browserオブジェクトを用いて表示させたブラウザ画面の
イメージをCBitmapに取り込みたいのですが。
ただし、そのウィンドウ&ブラウザ画面は非表示のままで。
(すなわち、ダイアログウィンドウは不要なのですが、
MS Web Browserオブジェクトを貼り付ける都合上、作成)
何か方法はないでしょうか?
>>226 別のスレで IViewObject 経由でやれば、って返事したつもりだけど。
別の人ならごめん。
230 :
224:2001/06/19(火) 11:16
>>228 説明じゃなくて指針を与えているだけです。
コード読んでDIB の読み方勉強するより、LoadImage で DIB 読んで、
GetObject で DIBSECTION 取り出すって方法の方が有効じゃないかな。
いや、有効かどうかはしらんが僕の指針はこうだ。ビットマップ本体と
ビットマップヘッダの両方を管理せずに HBITMAP だけで済むし、HBITMAP
としても DIB としても使いやすい。
MFCがらみはどうも粘着しますね。
234 :
デフォルトの名無しさん:2001/06/20(水) 01:42
型付きポインタの配列(Scribbleチュートリアルの
CTypedPtrList<CObject,CStroke*>など)を、あるクラスの
メンバ変数として持ちたい時、宣言はどのようにしたら良いのでしょう?
CTypedPtrListは別クラスで代入されて、それらを値か参照できるよう
持つようにしたいのですが。
参照で持とうとしたのですが、初期化の方法がよくわかりません。
235 :
デフォルトの名無しさん:2001/06/20(水) 02:21
>>234 Scribble ってなんだっけ、サンプル?
こんな感じではアカンの?
-----------------------------------
#include <afxtempl.h>
class Honya {
public:
Honya(CTypedPtrList<CObject,CStroke*>& list):m_list(list) {}
private:
CTypedPtrList<CObject,CStroke*>& m_list;
};
-----------------------------------
236 :
234:2001/06/21(木) 00:32
>>235 ありがとうございます。結局ポインタ使ってで何とか
解決しました…が、こんな方法で初期化できるんですね(;゚Д゚)
勉強になります。
あ、Scribbleってのは仰るとおりVC++ チュートリアルにあるサンプルっす。
237 :
質問です:2001/06/21(木) 21:58
プログラムでテキスト形式の初期設定ファイルを読みこみたいのです
たとえば
BG = "BMP/BACK.BMP",20,300
などのような簡単なファイル名や座標をテキストで列挙したものを
バッファに読みこんで、適切にそれを読みこんで
ファイル名部分はCSringのデータ、座標部分はINTデータなどに
セットしたいのです。
まとめると、文字列を解析して、数値変換などするクラス、ライブラリとか
簡単な方法ってあるでしょうか?
(もちろん上記程度なら自分で書くこともできるでしょうが・・)
238 :
デフォルトの名無しさん:2001/06/21(木) 23:05
>>237 ””で囲まれていると文字列でそれ以外が数字ですか?
そんなクラスやライブラリは聞いたことがないので
捜すより自作した方が早いと思うよ.
239 :
237です:2001/06/21(木) 23:31
要するに、そのアプリ専用のコンフィグファイルの解析といった
感じです
Windowsフォルダにあるiniファイルみたいなのと
同じ感じです
240 :
デフォルトの名無しさん:2001/06/22(金) 00:03
>>237 GetPrivateProfileString()でも使え
241 :
デフォルトの名無しさん:2001/06/22(金) 00:13
242 :
デフォルトの名無しさん:2001/06/23(土) 01:12
>>237, 240
GetPrivateProfileStringはWin9X系だと64Kの制限がある
で、scanfは使いたくないから、
それくらいだったら自作の方が速いし、
カンマ区切りくらいの文字列解析だったら、標準関数である。
strtokとか。
>>242 > GetPrivateProfileStringはWin9X系だと64Kの制限がある
それは間違い。32767 バイトが正しい。
65536 バイトの制限…ってのは、Windows 95 における
ひとつのレジストリキーの大きさでしょ?
244 :
デフォルトの名無しさん:2001/06/25(月) 04:07
質問です!!
CBitmapのLoadImageと同じような感覚で
JPGファイルをファイルから読み込めるクラスないでしょうか?
できれば、CBitmapのサブクラスで、内部的にbmpに変換してくれるのが
ベストです。
どうか教えてください
>>244 CBitmap派生をさせて作れば目的達成。
>質問です!!
鬱陶しいからエクスクラメーションマークを連発するな!!
246 :
デフォルトの名無しさん:2001/06/25(月) 11:34
248 :
デフォルトの名無しさん:2001/06/25(月) 15:59
>>245 んなもんわかってんだよ!!
そのライブラリはないかどーか、きいとんじゃこらぁぁぁ
無いです。
250 :
244:2001/06/26(火) 05:26
同じ質問で、JPGはあきらめてPNGの場合の
解決法を教えてください
せっぱつまっています、よろしくお願いします
251 :
デフォルトの名無しさん:2001/06/26(火) 08:58
JPGって
252 :
デフォルトの名無しさん:2001/06/26(火) 09:31
jpeg でゆくなら Intel performance library のを使うか、
IJG のソースを使うかすると良いのでは。PNG なら libpng
でも使ってみては?
google ででも検索して入手してね。
もう二度と同じ質問はしないでね。
253 :
デフォルトの名無しさん:2001/06/26(火) 15:47
相談です。
CViewにTabCtrlを貼り付けようとしています。
TabCtrlのCreate成功してInsertItemも成功しているのに
TagCtrlが表示されません。
なぜでしょう。なにかヒントないでしょうか。
254 :
デフォルトの名無しさん:2001/06/26(火) 16:00
ありがとうございました、また何かあれば
質問させていただきます!!
>>252
そんなことしなくてもJPEG読み込みAPIがあるのに。
別にライブラリ拾ってきても出来るけどさ。
>>255 シッ!
みんなわかってて黙ってるんだから言っちゃダメだよ(w
257 :
デフォルト:2001/06/26(火) 17:56
MFC使うのってC++勉強してからの方がいいすか?
ある程度クラスとかは理解してんだけど…
258 :
OleLoadPicture:2001/06/26(火) 18:33
初心者たたきするやつは、最低>256
MFC使いながらでもC++の勉強はできるよ。
>>258 叩かれてるのはただの初心者じゃないということに注意せよ。
初心者なら何をやっても許されるわけではない。
261 :
デフォルトの名無しさん:2001/06/26(火) 18:35
俺は翔泳社のVC++シリーズ3巻をやったよ。
1)API
2)C++
3)MFC
262 :
デフォルトの名無しさん:2001/06/26(火) 18:39
えらいねー
ヨシヨシ(ナデナデ、、顔文字が使えない)
>>261
264 :
254:2001/06/26(火) 19:02
まじでお願いしますよ。
APIの名前だけでいいので教えてください。
>>264 ただの初心者じゃないってどういうことですか。
>>264 もう書いてあるよ。これでわかんなかったらあきらめろよ。
みんなお前から金もらってるわけじゃないんだからさぁ。
267 :
デフォルトの名無しさん:2001/06/26(火) 19:30
268 :
デフォルトの名無しさん:2001/06/27(水) 06:59
OldLoadPictureを検索されてみてはいかがですか?
>>244 >>264 サンプルも結構簡単にみつかりますよ
またわからないことがあれば遠慮なくかいてくださいね
270 :
デフォルトの名無しさん:2001/06/27(水) 10:17
OilLardPorcineを検索されてみてはいかがですか?
>>244 >>264 サンプルも結構簡単にみつかりますよ
またわからないことがあれば遠慮なくかいてくださいね
271 :
デフォルトの名無しさん:2001/06/27(水) 13:16
プロセス間通信がよくわかるいい本ってありませんか?
>>253 イ)Z順の位置が下
ロ)サイズが過小
ハ)位置が表意範囲外
二)SW_HIDE
ホ)TabCtrl使うならFormViewにして下さい
273 :
デフォルトの名無しさん:2001/06/28(木) 16:45
1 名前:GD素人 投稿日:2001/06/28(木) 16:35
初めて、書きこみします。
GD素人なので、教えて下さい。
GDグラフィックスでイメージは作成できたのですが、それに日本語
文字列をGD::Image::stringで書こうとすると、文字が化けます。
やはり、日本語は、サポートされていないのでしょうか?
何か、他に方法はあるのでしょうか?
どうしても、図形上に日本語を書きたいのです。
よろしく、お願いします。
274 :
デフォルトの名無しさん:2001/06/28(木) 17:15
GD::Image::stringって何?
275 :
デフォルトの名無しさん:2001/06/28(木) 17:21
278 :
女の子:2001/06/28(木) 19:43
エディットボックスのバックカラーを変えたいのですが
どうすれば、いいですか?
279 :
デフォルトの名無しさん:2001/06/28(木) 22:04
ビットマップを保存するにはどうすればいいんでしょうか?
その、保存すべきビットマップは、どこに、どういう形式で
存在しているのかを言え。まずはそれからだ。
281 :
↑:2001/06/29(金) 14:15
それを言われても俺ならまだワカラン
282 :
デフォルトの名無しさん:2001/06/29(金) 18:35
ALT+F4でOK
>279
283 :
デフォルトの名無しさん:2001/06/29(金) 18:42
>>282 ALT+PrintScreenじゃないの?
284 :
デフォルトの名無しさん:2001/06/29(金) 19:05
>>283 PrintScreenだけでオーケーだよ。
ALT + F4 はそのアプリを終了させます。
PrintScreenだけだとデスクトップ全体がコピーされるから
ALT+PrintScreenの方がいいよ。
286 :
284:2001/06/29(金) 21:30
>>285 知らなかった。
あいやー、勉強になったじょー
287 :
デフォルトの名無しさん:2001/07/01(日) 04:19
質問です
ダイアログでWeb BrowserオブジェクトでIEのWebページを表示できますが、
これを画面に表示しないで、ビットマップイメージを取得する方法
ありますか?
教えてください
288 :
デフォルトの名無しさん:2001/07/01(日) 14:22
質問があります。
エクスプローラが開いているフォルダの絶対パスを
プログラム中で取得する方法ってありますか?
ご存知の方がいましたら宜しくお願いします。
質問です。
MFCは、メンバ変数をpublicにしている部分がたくさんあるのですが、
MFCの設計者はオブジェクト指向を理解しているのですか?
答えられる人いますか?
MFCはWin32APIを「カプセル化」したクラスライブラリです。以上。
291 :
デフォルトの名無しさん:2001/07/01(日) 20:20
なんでもかんでもprivateにするのがオブジェクト指向じゃないぞ。
部品や物としてより正確に設計したり使いやすくするために
メンバ変数をpublicにすることはある。
292 :
デフォルトの名無しさん:2001/07/01(日) 20:35
>>291 しません。
更新権限&参照権限を分けることができるだけでも有用なので、
常にメンバ変数はprivateがデフォルトです。
293 :
デフォルトの名無しさん:2001/07/01(日) 20:54
>>292 クラスライブラリがオブジェクト指向型設計を踏襲する必要はないんじゃないの?
>>289 あれは別にオブジェクト指向で作っているわけじゃないよ。
C++ == OOPではない。
でも、CObjectから派生してるんじゃないかというのは、もっともな意見だ。
296 :
デフォルトの名無しさん:2001/07/01(日) 21:40
>>295 しってます。
メンバアクセスは、自身のメンバに対してもsetter・getter
でアクセスがデフォルトです。
privateメンバが継承されないのは知らないらしい…
理想を突き詰めすぎたオブジェクト指向プロジェクトは必ず破綻します。
MFCについて言えば、メンバがpublicになっているのは非常に合理的な
理由があるんだがね。
MFCを使い倒せるようになった後で考えてみな。
それらがみんな隠されていたらと思うとぞっとするよ。
APIとMFCが同時に更新されるならともかく。
>297
基底クラスにセットゲット作っとけって言ってんでしょ多分
>>300 じゃあCFileとその派生クラスみたいな例だと、派生クラスごとに
セットゲットはおろかハンドルを保存するメンバ変数までprivateに
実装しろってか。
ReadとかWriteとかの操作はAPI上では全く同じなのに、セットゲット
の手段が違うために全部再実装しなきゃいけなくなるねぇ。
303 :
デフォルトの名無しさん:2001/07/01(日) 21:58
CFileはHFILEを透過的に使うためのクラスだからねえ。
あれをどう見れば、オブジェクト指向にみれるんだろう。
やっぱ、CObjectから派生してるから?
なんか危険のにおい。。
MFCがらみはどうも・・・
誰かプログラミングの相談入れてちょ
306 :
デフォルトの名無しさん:2001/07/01(日) 22:05
じゃあ、今気づいてるMFCのバグ教えて。
MFCにおいてはバグは存在しません。全て仕様です
こーやってだんだんアンチ側になっちまうんだよな
もやめとこ
308 :
デフォルトの名無しさん:2001/07/01(日) 22:12
CString::Remove(TCHAR ch)
バグってるよね。MBCSだと。
バグとわかってれば、回避も出来る。
DLLがOSに始めっからはいってるというのは利点だと思うので
有効利用しよう。
ほかには?
309 :
デフォルトの名無しさん:2001/07/01(日) 22:15
CSocketなんだけど、Acceptしてやるのに新しいCSocketがいるじゃない?
あれって何でなの?
よく分からずに使ってる厨坊です・・・
面白いけど別スレでできりゃいいね。
荒れんよ
312 :
↑:2001/07/01(日) 22:17
>308 他
↑は310を指してます。
同じC++のクラスライブラリなのに、ボーランドのOWLは
MFCに比べて遙かに上手にカプセル化してるよ。
もっとも、今となってはかなりマイナー化してるが。
>>314 何故今マイナー化しているか考えたことはあるか?
OSが先にバージョンアップされたら新しいOSの機能が何一つ
使えなくなるからだ。
隠蔽すれば当然APIに対する自由度は下がる。
316 :
デフォルトの名無しさん:2001/07/02(月) 00:24
「MFCインターナル」というMFCの内部実装解説本があるんだが、そこに
MFC設計者のコメントがあって
「最初はOWLみたいな(とは書いてなかったが)抽象的なライブラリに
するつもりだったんだけど〜、実際作ってみたら遅くて使い物になら
なかったし〜、細かい事できなくて不便だったんで〜、それ捨てて
利便性追求型の今のMFCの形で作り直したんだよ〜」
とか書いてあった。まぁ当時のCPUパワーとか考えるとわからなくも
ないが、CPUパワーが十分になった現在では、醜い設計がきわきわに
目立つようになったよなー
>316
言い訳にしか聞こえない
318 :
デフォルトの名無しさん:2001/07/02(月) 00:27
メンバのpublic化ってのは僕の中では
「カプセル化」に反する内容だと思ってます。(一般的には、ですが。)
例えば、代表的なメンバ、m_widthとかを作ったとき、
widthの設定 : m_width = n;
widthの取得 : n = m_width;
という方法でOKなら問題ないのですが、ウインドウとかだと
設定はsetWidth()とかにする必要があるはずです。
「ウインドウの幅を変更する」にはメンバの更新以外にも
様々な処理が必要です。
また、将来的にm_widthと同時に、m_lengthを内部的に
合わせなければならなくなったときとか、メンバを直接
いじるのは非常に困ると思います。
ならばsetWidth()、getWidth()というメソッドでやりとり
するのが正しいし、将来的にも「幅の設定、取得」という
意味での予約ができるため、「カプセル化」というのは
このようにすべきではないか、というのが経験上の鉄則です。
オーバーヘッドが気になるならば、この程度のものは
インライン関数にしてしまえばいいし、メンバはあくまで
内部で処理、確実に意味を持ったアクセスはメソッドに
するべきでしょう。
319 :
デフォルトの名無しさん:2001/07/02(月) 00:28
MFCは、ウインドウハンドルを公開メンバにしてあるのですが
m_hWndを簡単に書きかえられてしまうというのは盲点でした。
ためしに、ダイアログのOnInitDialog()のなかに、
m_hWnd = NULL;
とやってみましたが、見事に落ちました。
当然、ウィンドウの外部からもこれをやってしまう可能性があるわけですから、
「MFC恐るべし」って感じですね。なるほど、勉強になりました。
320 :
デフォルトの名無しさん:2001/07/02(月) 00:29
321 :
デフォルトの名無しさん:2001/07/02(月) 00:56
べつにいーんじゃないのー
漏れはprivateに入れるべきだと思うよ。
MFCはMFCでいいと思うけど普通publicには入れないでしょう?
322 :
321:2001/07/02(月) 00:59
漏れのWin用俺様ライブラリは
private:
HWND m_hWnd;
protected:
HWND SetHwnd();
public:
HWND GetHwnd() const;
323 :
デフォルトの名無しさん:2001/07/02(月) 01:02
>>318 C++で getWidth, setWidth はやめてくれ。
頭おかしいとしか思えないぞ、その名前の付け方。
324 :
デフォルトの名無しさん:2001/07/02(月) 01:27
質問です
ダイアログでWeb BrowserオブジェクトでIEのWebページを表示できますが、
これを画面に表示しないで、ビットマップイメージを取得する方法
ありますか?
教えてください
325 :
デフォルトの名無しさん:2001/07/02(月) 01:30
>>322 それがマトモなC++プログラマの発想だよねん。
HWNDがprivateだと、CreateWindowが拡張されたときに困りそう。
CreateWindowEx2とか…MSならやりかねないし。
327 :
デフォルトの名無しさん:2001/07/02(月) 10:12
public、protected、private は頻繁に使用される C++ キーワードです。
MFC ヘッダー ファイルでは、各クラスの中でそれぞれのキーワードが何回
も使われます。たとえば、パブリック メンバ変数とパブリック メンバ関数
は、複数の public キーワードの下に分けて記述されることがあります。
これは、MFC ではアクセス タイプではなく、用途によってメンバ変数とメ
ンバ関数を分類しているからです。MFC は private をできるだけ使用しな
いように設計されているので、処理系に密着した変数や関数であっても、
protected または public が使われるようになっています。通常、クラス
外部からインプリメントの詳細部分へのアクセスは避けることになっていま
すが、MFC では最終的な判断はプログラマに任されています。
つまりダメプログラマが使うと大変なことになるというわけだ。
>>322,325
>HWND SetHwnd();
MFCがオカシイっていっても、話の次元がずれてるのは参加しない方が良いでしょ。
デザインパターン(MediatorとかObserverとかになんのか?俺も知らん)の話だと思うが...
C++プログラマっていってもイロイロあんだろ。「僕の中」って言われてもなあ
ま、しょせんMSだからオカシんだろうとは思うけど。。
333 :
デフォルトの名無しさん:2001/07/02(月) 17:38
OOP厨です
ここの連中のレベルがよく分かりました。もう消えます。
>>319 CWnd::m_hWndが(言語使用上)書き換え可能であるからといって、書き換えても
いいというわけではない。それはクラスライブラリの用法上の話。
もちろん、クラスライブラリの用法上間違った操作を言語仕様で保護できるに
越したことはないが、言語仕様で保護されないからと言ってクラスライブラリを
せめるのは筋違い。
MFCがらみはどうも・・・
338 :
デフォルトの名無しさん:2001/07/02(月) 21:46
あげ
そろそろクソスレ化
かな?
>>334 そうか。君程度のレベルじゃついてこれなかったか。精進せえよ。
341 :
デフォルトの名無しさん:2001/07/02(月) 22:33
m_hWnd書き換えるようなプログラム書くやつがいたらこわいぞ。
SetWindowLongでHINSTANCE書き換えるのを試したことはあるが
なんも問題なく動いていたのはなぜ?
>>341 HINSTANCEってもうほとんど意味無いんじゃなかったっけ?
ヒンスタンス
344 :
デフォルトの名無しさん:2001/07/03(火) 14:23
フレームのデザインを自分で作ったBMPとかに
置き換えたいのですが、可能でしょうか?
サブクラス化してWM_NCPAINTをコーディングする
でも隠蔽されてるかもね、MFCのアプリでそうゆうのって聞いたことない
346 :
デフォルトの名無しさん:2001/07/05(木) 19:38
CStringがやたらとメモリリークします。
普通にLeft、Mid、Find、Deleteくらいしか使ってないのに。
何とかならないでしょうか?
>>346 どんな使い方してんの?
CStringが原因でメモリリーク起こすなんて聞いたことないぞ。
348 :
デフォルトの名無しさん:2001/07/05(木) 22:04
>>347 デバッガが見つけたメモリリークが常にCStringのバッファ辺りなんですよね。
文字列も残ってるし・・・。
ほんとに代入、Left、Mid、しか使ってないし、引数に渡すときも当然LPCSTRか、
MFCのCString参照にしか渡してないし・・・。
349 :
デフォルトの名無しさん:2001/07/05(木) 22:26
>>348 他にリークしたオブジェクトが使ってるんだろ?
>>348 Purify か BounceChecker を使う
>>350 とりあえず、BoundsChecker体験版をDL中。
DL完了が早いか自分で見つけるのが早いか(笑)
デバッガで追っかけてたら、MFCの内部で::DestroyWindow(m_hWnd)を
実行した時点でアプリが終了してました・・・・
OnDestroyWindow()はオーバーライドしてないし、
PostNcDestroy()でも、タイマー殺してるだけだし・・・。
もう少し調べてみますね・・・。
>>352 馬鹿でした・・・・・・
PostNcDestroy()内ではもうウインドウハンドルがなくなってるんですね・・・。
鬱・・・・・
354 :
デフォルトの名無しさん:2001/07/06(金) 17:44
CString::Remove() って、 ANSI バージョンだと文字列に 2バイト文字が
含まれていると正常に動作しないのでしょうか?
よく解らなかったので結局
void RemoveChar( CString& str, CHAR chRemove )
{
LPSTR pszDst = str.GetBuffer( str.GetLength() + 1 );
LPSTR pszSrc;
LPSTR pszNext;
for( pszSrc = pszDst; *pszSrc; pszSrc = pszNext ){
pszNext = CharNext(pszSrc);
if( *pszSrc != chRemove ){
int nCount = pszNext - pszSrc;
for( int i = 0; i < nCount; i++ )
*(pszDst+i) = *(pszSrc+i);
pszDst = CharNext(pszDst);
}
}
*pszDst = '\0';
str.ReleaseBuffer();
}
こんな関数作りました。
逝ってよしでしょうか?
>>354 そのとおり。
今のバージョンは正常に動作してません。
ソース見たら _tcsinc() 使ってて一見マルチバイトを意識してるソースの
ようで、その実、2 バイト文字の 2 バイト目をコピーしていないドキュソースですね。
もしかして、これって有名な不具合なのでしょうか?
つい四日くらい前に後ろの席の人がはまってました
sore
>>356 で、ソレ、どうやって調教したの?
自前で mfc42.dll をビルド?
それともスタティックリンク?
あるいは…(謎)
>>258 >>354が調教策じゃないの?
おれんとこのは、Replaceを使うように勧めたけどね。
速度が重要じゃないとこだったから、動けばいいやってことで。
360 :
デフォルトの名無しさん:2001/07/06(金) 23:44
モードレスダイアログ作ってやると、
そのダイアログは別スレッドで動いてると考えていいんですよね?
メッセージキューは別に持つけどスレッドは一緒だったような気が。
調査してない。誰かつっこんでくれ
364 :
354:2001/07/07(土) 14:18
>>358 自前で CString::Remove だけを実装して、MFC より先にリンクしちゃう
っていうのもアリですか?
365 :
358:2001/07/07(土) 14:42
>>359 あっ、そうか。
CString::Remove を直接、調教したわけじゃ、ないんだ。
>>364 なるほどね、それだけ先にスタティックにリンクしちゃって、
のこりは mfc42.dll へ Go! なワケね。
CString::Remove が virtual なら、話は早かったんだけどね...。
366 :
デフォルトの名無しさん:2001/07/09(月) 18:34
あほな質問でごめんなさい。
CBitmapに付いて教えてください。
今、チラツキを防止する為にダブルバッファにしています。
で、OnDraw時にpDCにBitBltしてバッファの情報を書いているんですが、
ここで質問があります。
画面はフルカラーです。でもバッファを作るときにコンパチのバッファを作ると
容量のでっかいバッファになっちゃうんで、256色でバッファを作りたいです。
でも、表示すると、真っ白な画面が出てきちゃいます。
どうすればよいのでしょうか??
とりあえず以下のようにやってます。
・メンバ変数
CDC m_bufferDC;
CBitmap m_bufferBitmap;
・コンパチ作成
m_bufferDC.CreateCompatibleDC(GetDC());
m_bufferBitmap.CreateBitmap(幅, 高さ, 1, 8, NULL);
m_bufferDC.SelectObject(&m_bufferBitmap);
とまぁ、こんな感じでバッファを作ってます。
で、OnDraw時に
pDC->BitBlt(0,0,幅,高さ,m_bufferDC,0,0,SRCCOPY);
256色の bitmap には当然パレットが必要。
パレットは DC が持つので、m_bufferDC とやらに適切なパレットを
選択しておくこと。
368 :
デフォルトの名無しさん:2001/07/10(火) 13:23
>>367 ご伝授ありがとうございます。
がしかし、やっぱり私はあほなようです。できませんでした。
ご伝授いただいたように、以下のようにやってみました。
・バッファ画面の作成
//メンバ変数
CDC m_bufferDC;
CBitmap m_bufferBitmap;
CPalette m_bufferPalette;
//パレット作成
m_bufferPalette.CreateHalftonePalette(GetDC());
//DC作成
m_bufferDC.CreateCompatibleDC(GetDC());
m_bufferDC.SelectPalette(&m_bufferPalette);
m_bufferDC.RealizePalette();
//Bitmap作成
m_bufferBitmap.CreateBitmap(幅, 高さ, 1, 8, NULL);
//ビットマップの設定
m_bufferDC.SelectObject(&m_bufferBitmap);
OnDraw時に
pDC->BitBlt(0,0,幅,高さ,m_bufferDC,0,0,SRCCOPY);
上記のようにコーディングしました。
結果としては、真っ白な画面になってしまいます。
m_bufferDC.SelectObject(&m_bufferBitmap)
の戻り値が0x0なので、SelectObjectに失敗しているようなのですが、
原因がまったくわかりません。
お願いいたします。
369 :
デフォルトの名無しさん:2001/07/10(火) 14:53
Crystal Reports を使って tiff 形式画像を出力する方法が
どうも分かりません。
とりあえずヘルプに載っていたレポートの印刷方法は理解できましたが,
画像ファイル出力となると,一体どのメソッドを使えばいいやら。
オススメの参考文献とか URL とか,ご存知ないでしょうか?
環境:
Windows2000,VC++6.0,Crystal Reports ver.8
調べれば調べるほど
「そもそも Crystal Reports は画像を出力しないんじゃ?」
という気がしてきました。
私は逝ってもよい存在なのでしょうか?
ワシ、経験だけは長いけど
CrustalReports使ってる人はじめてみたよ。
びくーり。
で、なにができんの?それ。
>>369 Accessのレポートみたいなもんか?
さんくす
感謝されちゃった ヽ(´ー`)ノ 聞きたいことがあるのは私の方なのに。わらい
ところで
>>369 ていうか,むしろ私の興味はすでに
>>370 に移っちゃったんだけど
どなたかご存知ないっすかねぇ・・・
375 :
デフォルトの名無しさん:2001/07/13(金) 10:40
コンボボックスにコントロールメンバ関数を関連付けています。
このとき、OnInitDialog関数でAddStringしてるんですけど、
表示に反映されません。
リストボックスで試したところ、問題なく表示されます。
これはどういったことが考えられるでしょうか。
376 :
素人:2001/07/13(金) 14:07
377 :
デフォルトの名無しさん:2001/07/13(金) 14:57
>>376 DDX使ってるよ。
原因分かったよ。コンボボックスの高さ方向のサイズが十分じゃなかったのな。
コンボボックスって、▼を押すと下にリストボックスみたいのが出るじゃん。
そのスペースを考えて高さ設定をしなけりゃならなかったのさ。
それにしても、リソースエディタ不親切すぎんぞゴルァ!!!
>>377 あ〜〜、わかるわかる
高さ方向のサイズ変更ってわかりにくいよね。
前はやり方わからんかったからいちいち新しいの作りなおしてた(爆)
379 :
デフォルトの名無しさん:2001/07/13(金) 16:39
somebody go
380 :
デフォルトの名無しさん:2001/07/13(金) 16:40
defgrgr
381 :
デフォルトの名無しさん:2001/07/13(金) 19:05
>>377 コンボボックソのサイズ変更の悩み(表示されない(w))
は初心者の95%が経験しています。
382 :
デフォルトの名無しさん:2001/07/17(火) 09:20
MFCのWebBroserオブジェクトで、Navigate()などを使って
Webページを表示しますが、「カチ」とクリック音が鳴ってしまいます。
これをオフにする方法はないでしょうか?
どうか教えてください
追伸:某板では誰もわからなかったので、時間をおいてのガイシュツです
>>382 答えが返ってこなかったくらいで他人を無知呼ばわりするDQNには教えません
384 :
デフォルトの名無しさん:2001/07/17(火) 10:52
>>381 結局皆経験するってことね。初心者って・・・。(w
385 :
デフォルトの名無しさん:2001/07/18(水) 03:39
ダイアログエディタでいくつかのオブジェクトを
同じ位置に配置したいのですが、
優先順位はどうやって変更できるのですか?
たとえば、3つコントロールがあってすべて可視、
常に最前面に表示されるコントロールを調整したいのです
おしえてください
386 :
ななし:2001/07/18(水) 05:32
>>385 同じ位置に置いたらごちゃごちゃにならんかな?
とりあえず、".rc"ファイルをテキストエディタでいじるとか。
387 :
名無し:2001/07/19(木) 00:07
388 :
デフォルトの名無しさん:2001/07/19(木) 10:29
全部同じ位置で全部可視だと、z-orderみたいなのが
必要になるってことじゃないの?
389 :
デフォルトの名無しさん:2001/07/19(木) 14:44
ダイアログ表示直後にMessageBoxを出したいんだけど。
OnInitDialog内で、ShowWindowしてもいいと思う?
一応逝けてるんだけど・・・。
390 :
デフォルトの名無しさん:2001/07/19(木) 19:52
ZOrderいじるアプリは95%は糞
392 :
デフォルトの名無しさん:2001/07/22(日) 23:48
DOC-VIEWでシリアライズのバージョン管理みたいなのは
どう知れば言いのでしょうか。
シリアライズするデータが増えた場合、加古のファイルも
読めないとまずいです。
はあ?
データ構造なんか自分で好きなようにしろ。
394 :
デフォルトの名無しさん:2001/07/23(月) 02:27
MFCでのMDIアプリケーション開発に関する良い
書籍ってなんかないですかねぇ?
本やいろいろ回っているんだけどなかなか
いいのが見つからないんですよ。
395 :
デフォルトの名無しさん:2001/07/23(月) 10:13
>>392 CArchive::GetObjectSchema 使っとけ。
age
Doc&Viewに的を絞った良い本をご存知の方いらっしゃいませんか?
398 :
デフォルトの名無しさん:2001/07/23(月) 11:35
Scribbleチュートリアルではダメでしたか?
MFCとDirectXって組み合わせるのは、あんまりよろしく無いですか?
DC取得してウィンドウモードで描画する分には問題なくて、フルスクリーン
モードにした瞬間プライオリティの設定に失敗して異常終了します。
MFCのフレームワークに何か設定する必要があるのか、それとも仕様上無理
なのか、どっちなのかがちょっと分からないです。
400 :
デフォルトの名無しさん:2001/07/23(月) 15:47
質問です.よろしくお願いします.
ヘルプ->バージョン情報にアプリケーションを作った
製作元のアイコンがあって,そのアイコンをクリックすると
ブラウザが起ちあがってその製作元のホームページが
表示されるというものを作りたいのです.
アイコンのBN_CLICKEDのイベントで何かをやればいいのかと
思うのですが,どなたかご存知の方いらっしゃいませんでしょうか?
初歩的な質問で申し訳ありません.
よろしくお願いします.
>>399 DirectX5ゲームプログラミングって本ではMFCで
組んでるよ。
買ったのにぜんぜん読んでない(^^;
>>400 ShellExecute(URL)
でいけるはず。
あぁ、適当すぎた。
FileにURL指定して、後は適当に。
404 :
400:2001/07/23(月) 17:33
>402さん
回答ありがとうございます.
こんな感じでよろしいのでしょうか?
ShellExecute( pParent->m_hWnd, "open", "
http://〜〜", "", "", SW_SHOW ) ;
とりあえずはうまく行っています.
405 :
デフォルトの名無しさん:2001/07/23(月) 21:02
MFCのWebBroserオブジェクトで、Navigate()などを使って
Webページを表示しますが、「カチ」とクリック音が鳴ってしまいます。
これをオフにする方法はないでしょうか?
かなり何日もなやんでいてそれでもわかりません
どうか教えてください
>>401 レスどうもです。本屋にあったら立ち読みしてみます(笑)
出来るのは確かみたいですね。GUIのためのフレームワークを
フルスクリーンで使う事ほど馬鹿な事はありませんが・・・
やっぱりスピードを考えたらAPIで素から組んだ方が軽いですね(苦笑)
407 :
392:2001/07/23(月) 21:45
>CArchive::GetObjectSchema 使っとけ。
それだ!ありがトン
>405
コントロールパネルのサウンドを開いて、”音を鳴らす場面”
てのを見ると、ナビゲーション開始とか完了とかの設定がある
から、ここに設定されてるんじゃない?
408 :
405:2001/07/23(月) 21:50
>>407 ほかの音を鳴らしたいので、クリック音は鳴らしたくないんです
うーーん、ここ2,3週間悩んでいます
409 :
デフォルトの名無しさん:2001/07/23(月) 23:30
>408
個別に設定できると思うがどうか?
クリック音がなるタイミングだけスピーカーオフにするとか(藁
単に音をならさなくするならサウンド設定から消せるけど
そういうレベルじゃないのか?
無駄に音鳴らされるっつうのはすごく厭なソフトだけど
412 :
デフォルトの名無しさん:2001/07/24(火) 09:53
同時にIEも動かすユーザがいるかもね。
413 :
デフォルトの名無しさん:2001/07/24(火) 11:00
普通のMFCアプリケーション(ほかとも共有する)で
大きめ(640×480)のウィンドウで安定したアニメーションを
させたいのですが、
やはりFPSを安定させるには、普通のタイマーよりマルチメディアタイマー
使うしかないのでしょうか?
あと、画面の更新でInvariadateRect使っているのですが、ほかに
よい方法はあるでしょうか?
もちろん全画面表示ではないですが、DirectX使ったほうが安定
しますかね?
教えてください
414 :
質問です!:2001/07/24(火) 16:37
CBrushクラスで四角とか円とか描画すると、黒い境界が出るのはなんとか
ならないでしょうか?あと、中身を塗りつぶさない方法も教えてください!
四角形だったらCPenクラス使って線引くだけでいいんだけど、円は
かなり厳しい!まさか円の方程式使って一点一点描画するわけにもいかないし。
まだVisual C++使い始めて半年の厨房ですがよろしくお願いします。m(__)m
415 :
デフォルトの名無しさん:2001/07/26(木) 08:41
age
416 :
競れ損:2001/07/26(木) 09:24
>413
通常のタイマー(OnTimerね)でやると描画速度は安定しても、
正確なFPS値が出ない。
例えばタイマー間隔を1mm/sにして100FPSにしようとしても
環境によって異なったFPSが出てしまう。
ただ、無茶なFPS値を出そうとしてもハングったりしないという利点があるかも。
417 :
デフォルトの名無しさん:2001/07/26(木) 12:04
CListCtrlについてなのですが,
アイテムを選択状態(青い箱で囲まれる)にするには
どのようにすればいいのでしょうか?
SetHotItem(), SetSelectionMark(),
を使ってみましたがだめでした.
また,LVN_ITEMCHANGEDのイベントは起こるのでしょうか?
よろしくお願いします.
418 :
競れ損:2001/07/26(木) 12:29
>417
SetItemStateを使うべきべき。
419 :
デフォルトの名無しさん:2001/07/26(木) 18:02
>競れ損さん
回答どうもです.
m_ctlErrorList.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED ) ;
m_ctlErrorList.SetFocus() ;
こんな感じで書いたらうまく行きました.
けど,“ホットアイテム”とは何ですか?
“選択状態にあるアイテム”と思っていたのですが....
420 :
デフォルトの名無しさん:2001/07/26(木) 19:45
FileメニューのOpenの動きに関して質問なんですが、
MFC AppWizardで作ったアプリって、あるファイルを開いている状態で、
もう一度同じファイルをOpenさせると、何も起きませんよね。
既に開いているからってことでしょうが。
でも、既に開いているファイルを指定しても、もう一度Open処理
(Serialize, OnInitialUpdateなど)を
通したいアプリを作っているのですが、その場合
どの辺りをいじるのが正統でしょうか?
(MatchDocTypeをオーバーライドとか?)
421 :
デフォルトの名無しさん:2001/07/26(木) 21:21
シェルを教えて下さい。あとシェルに関していい本がありますか?
422 :
デフォルトの名無しさん:2001/07/26(木) 22:59
>416
やはりマルチメディアタイマーがベストでしょうか?
(DirectXを用いない場合)
ただ、InvaridateRectって、即座に画面更新が反映しないような気が
するのですが。。。
423 :
デフォルトの名無しさん:2001/07/26(木) 23:24
ちょっと意図とは違うのですが、
コンパイラされた後のファイルから
ソースを見ることって出来ますか?
参考にしたいプログラムがあったので・・・
危ない話すんません。。
424 :
デフォルトの名無しさん:2001/07/26(木) 23:37
>>421 シェル石油のことですか?
スレチガイですよ。
426 :
競れ損:2001/07/27(金) 06:38
>419
アイテム(コントロール)にマウスカーソルを持っていったとき
(選択してなくてもよい)なんらかのアクションを起こすアイテムを
ホットアイテムといいます。
例えばツールバーのフラットボタンが良い例。
>422
DirectXを使用する場合でもマルチメディアタイマーが良いかと。
427 :
デフォルトの名無しさん:2001/07/27(金) 09:57
>>420 開きなおす
というメニューを作るのではダメですか?
428 :
デフォルトの名無しさん:2001/07/27(金) 15:49
ダイアログベースのアプリケーションで
CanselとOKボタンを消してアプリケーションを開発しているのですが
キーボード側の処理が残っていて、ESC、Enterを押すと、終了してしまいます
これを無効にする方法を教えてください
お願いします
429 :
デフォルトの名無しさん:2001/07/27(金) 16:06
OnOK、OnCancelをオーバライドして、何もしないようにし、
OnCloseでEndDialogを呼ぶべし。
430 :
デフォルトの名無しさん:2001/07/27(金) 16:29
>>429 なるほどありがとうございます
ところで独自のキー操作を追加したくて
OnKeyDownをオーバーライドしているのですが、
何をおしてもそこに飛びません(ブレークポイントを張って
チェックしてみたのですが)
何かミスっていますか?
431 :
デフォルトの名無しさん:2001/07/27(金) 16:57
>>430 PreTranslateMessage をオーバーライドする。
432 :
デフォルトの名無しさん:2001/07/27(金) 21:40
不定形ウィンドウの表示をする際に、
アンチエイリアスをかけた(要するにα合成する)
ウィンドウを表示させたいのですが、よい方法ありますか?
イメージの合成方法はわかります
問題は、ドラッグする際に、自分自身のウィンドウ(パネル)より
下のデスクトップイメージをどうやって取得すればよいか?
というところです・・・
どうかご教授ください
433 :
デフォルトの名無しさん:2001/07/27(金) 21:41
434 :
420:2001/07/27(金) 23:12
>>427 >開きなおす
>というメニューを作るのではダメですか?
それだと、FileメニューのOpenに仕込まれている色々便利な機能
(SetModifiedFlagのチェックとか、Serializeとか、FrameTitleの設定とか)
が使えないので、できれば、それらはそのまま使いたいのですが。
CSingleDocTemplateを継承したクラスを作る、という方法は思いついたのですが
もっと簡単な方法があるような気がして...。
>>432 Windows2000 なら Layered Window 使えばできる。
MFC とは関係ないので sage
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
続きはコチラです
http://www.geocities.com/entry_k/main/main01.html
>>434 CDoc::OnReOpen()
{
OnCloseDocument();
OnOpenDocument();
}
何か問題でも?
438 :
デフォルトの名無しさん:2001/07/28(土) 06:06
WM_SETTEXTがハンドリングできない、、、
439 :
434:2001/07/29(日) 00:40
>>437 OnOpenDocument()のDefaultインプリメントは、引数に
LPCTSTR lpszPathName を必要とします。
自分で ReOpenメニューを作ると、ここには Pathnameが渡されてきませんので、
これでは ちょっと...。
>>439 バカか?
OnCloseDocument(GetPathName());
何か問題でも?
バカは俺だ…
OnOpenDocument(GetPathName());
逝ってくる。
更にバカだ。
CDoc::OnReOpen()
{
CString strPathName =GetPathName();
OnCloseDocument();
OnOpenDocument(strPathName);
}
以上。
444 :
439:2001/07/29(日) 07:45
>>442 このコードだと、Access Violationになりますねぇ。
OnCloseDocument();で、自分自身が deleteされて、
その後、まだ自分が居るつもりで OnOpenDocument()するからですねぇ。
やっぱ、FrameWorkに割り込まないとダメなんじゃ?
445 :
デフォルトの名無しさん:2001/07/29(日) 10:04
>>420 VC++ 1.0で SDIのプログラムを作っていたころのメモを見てたら
↓こんなのが出てきました。自分でも何をやっているのかようわからん。
//CWinApp::OpenDocumentFile( )をオーバーライドし、
//いったん、メインウインドウにID_FILE_NEWメッセージを送る
CDocument* CMyApp::OpenDocumentFile(LPCSTR lpszFileName)
{
if(m_pMainWnd){
m_pMainWnd->SendMessage(WM_COMMAND,ID_FILE_NEW);
}
return CWinApp::OpenDocumentFile(lpszFileName);
}
今のVC++で通用するのかどうか未確認。ごめん。
ID_FILE_NEWを送ったら、SDIだと今開いているファイルは閉じられる
のでしたっけ。
446 :
420=434=439:2001/07/29(日) 11:45
>>445 おお、これは良いですねぇ。
Recent Fileにも効きますし。なるほど〜。いいなぁ。
Goodです。
ていうかOnCloseDocument()いらないじゃん!
同じだったら何もしないのはCWinAppの所業なんだ!
つーわけで、
CDoc::OnReOpen()
{
CString strPathName =GetPathName();
OnOpenDocument(strPathName);
}
終了!
>>447 あーもちろん、UPDATE_COMMAND_UIをハンドルして、何も開かれて
無いときは無効にしないと困ったことになるんでよろしく。
449 :
420:2001/07/29(日) 16:16
>>447 あ、なるほどぉ。Close要らないんだ。そーかー。
でも、これだとModifiedFlagが立ってても、有無を言わさず
ReOpenしちゃうわけですね。
455の CMyApp::OpenDocumentFileをいじる方法だと、
Modifiedだと、Saveするかどうか聞いてきます。
どっちが良いかは、
うーん...アプリの要求仕様しだいだなぁ。
ユーザがOpenで、何が起きると期待するか、という問題で、
たとえば、Editorアプリなんかで、編集結果を廃棄してReopenなら、
OnReOpenを作ればいいし、
ファイル送信ツールなんかで、Openしたら即それをどこかへ送信する
みたいなやつは、RecentFileが使えた方が便利ですよね。
今回の私のアプリは、後者のほうなんで、455さんの方がBetterでした。
>>449 modifiedくらい自分で引っかけれ。
ていうか、
>ファイル送信ツールなんかで、Openしたら即それをどこかへ送信する
だったら「保存して送信」ハンドラを作るのが適当かと。
451 :
420:2001/07/30(月) 07:25
>>450 >だったら「保存して送信」ハンドラを作るのが適当かと。
うーん、アプリの使い方として、Modifyする場合が多いときは、
その方が良いのでしょうが、
ファイルは加工せずにそのまま送信する、という場合は
Openしたらすぐ送信した方が、ユーザにとっては便利でしょ。
>>451 fool proofは?
何をどこへ送信するかによるが間違って開いてもそれだけで問答無用に
送信されるのは怖くないか?
453 :
デフォルトの名無しさん:2001/07/30(月) 16:27
hage
454 :
ゆうぼん:2001/07/30(月) 17:40
CDC memDC; (グローバル)
CBitmap myBit; (グローバル)
myBit.DeleteObject(); (初期化)
memDC.DeleteDC(); (初期化)
memDC.CreateCompatibleDC(&dc);
myBit.CreateCompatibleBitmap(&memDC,rx,ry); (クライアント領域の描画をmyBitに取り込む)
memDC.SelectObject(&myBit);
ってコーディングして、メモリ上のデバイスコンテキストにCBrushなどで描画して
dc.BitBlt(0,0,rx,ry,&memDC,0,0,SRCAND);
でクライアント領域に表示させたいんですけど、memDCにちゃんと
データが入ってないらしく、テレビの白黒みたいに表示されるんです。
クライアント領域に描画してある上からまたAND演算で描画
したいんですけど、どうしたらいいのでしょうか?
455 :
デフォルトの名無しさん:2001/07/30(月) 20:33
a
>>454 CreateCompatibleBitmap(pDC, rx, ry); // pDC はクライアント領域の DC
に直してみな。
それから、DeleteObject() と DeleteDC() は不要。
457 :
デフォルトの名無しさん:2001/07/31(火) 23:26
CSpritterWndで4つの分割ウィンドウ作ったんですが
これらのウィンドウのバーの部分にメニューをつける方法を
知りたいです。メタセコイアとかマヤみたいに。
この方法をご存知の方、よければ教えてください。
>>457 俺は昔、CControlBarを派生させて自分でメニューバー実装してた。
CView::OnCreateでCControlBar派生クラスをcreateして、各Viewの
クライアント領域にドッキングさせるがよろし。
459 :
デフォルトの名無しさん:2001/08/01(水) 12:22
VCでデバッグしてるとたまにツールバーにマウスを持っていくだけで
落ちるような状態になってしまうんですが、これについてなんか
知っている方はいますか。
自アプリだけじゃなくて、IEとかも落ちる。
ビデオカードのドライバーを上げる、もしくはビデオ自体交換
461 :
デフォルトの名無しさん:2001/08/02(木) 17:30
ほかのアプリケーションを前面にして、自分がアクティブでなくなった場合と、
背面にあった自分のアプリを、前面にもってきてアクティブにした場合には、
どういったイベントを処理してやればよいのでしょうか?
ClassWizardで簡単に追加できますか?
教えてください
InvalidateRectは第三引数をFALSEにすると
再描画が必要な部分のみが処理されるのでチラツキが減ります。
463 :
デフォルトの名無しさん:2001/08/02(木) 17:49
>>461 WM_ACTIVATE (OnActivate)
464 :
457:2001/08/03(金) 02:32
>>458 どうもありがとうございます。早速CControlBar関係を調べて
実装してみたいと思います。ありがとございました。
465 :
デフォルトの名無しさん:2001/08/03(金) 02:55
>>459 MFCのフレームワークは極小間隔のタイマーをまわして、マウス位置を
取得しています(ツールチップのため。またメニューのオンオフも、この
タイミングで操作している)WM_MOUSEMOVE 等ではなくタイマー使用
もちろんCFrameWnd内に完全カプセル化されています。
CCmdUIがらみでなんか不具合があるんでしょう。
466 :
デフォルトの名無しさん:2001/08/03(金) 03:21
ダイアログベースではPreCreateWindow関数をオーバーライド
できないのでしょうか?ブレークポイントを張っても
どうやら通過していないようなんですが
どなたかご教授ください
467 :
Poh:2001/08/03(金) 11:57
>>459 ReleaseとDebugとで、症状かわったりしないかい?
Debugでビルドしたやつを、他のPC(*D.DLLなし)に持っていって、
そんなことが起こったことあるような。
468 :
Poh:2001/08/03(金) 12:03
質問。
AppWizで作ったMFCベースのやつ
StringTableのIDR_XXXTYPEと、CFileDialogに与えられる
引数との関係教えてください。どれが、どれ?
469 :
デフォルトの名無しさん:2001/08/03(金) 12:56
なぜMSDNをみない?
470 :
Poh:2001/08/03(金) 13:16
469>>
私に言ってる?
Wizが裏でやっていること、自動で対応付けられていることについての、
情報がどこにあるのか分からないです。
どこ?
471 :
デフォルトの名無しさん:2001/08/03(金) 14:19
CDocTemplate::GetDocString
が参考になるでしょう。
472 :
Poh:2001/08/03(金) 16:11
>> 471
お!ありがとう。助かった。MFCのソースを眺めて、ちょうどCDocTemplateに
たどり着いたところだった。
473 :
競れ損:2001/08/03(金) 18:01
>466
メインフレームウィンドウを作っているわけではないので
ダイアログベースではPreCreateWindowは呼ばれない。
474 :
デフォルトの名無しさん:2001/08/03(金) 18:05
>>466 関数名忘れたがダイアログの場合表示前に呼ばれる関数あるよ
そっちに実装しなされ
ただしツリービューのチェックボックスの初期化以外
475 :
デフォルトの名無しさん:2001/08/03(金) 19:15
CListBoxって確か項目数の上限あったよね?
MSDNで以前見かけたんだけどみつかんない
(Win95がどうのこうのってやつ)
誰かこの記事のってる場所しりません?
476 :
デフォルトの名無しさん:2001/08/03(金) 20:18
>関数名忘れたがダイアログの場合表示前に呼ばれる関数あるよ
OnInitDialog か。
477 :
デフォルトの名無しさん:2001/08/04(土) 01:47
>>474 >>476 PreCreateWindowの引数で受け取るCREATESTRUCT& cs
を書き換えてウィンドウの属性を変更したいのです。
OnInitDialog内ではそういうのってできないですよね?
478 :
デフォルトの名無しさん:2001/08/04(土) 01:50
479 :
477:2001/08/04(土) 10:47
>>478 まとめなおすと、ダイアログでON_PAINT画面更新がかかる場合に
アニメーションをしたいので、余計な描画(消去)がかからないように
バックグラウンドをNULLにしたいのです
最初からそこまで言え。
481 :
デフォルトの名無しさん:2001/08/04(土) 12:20
>>479 OnEraseBkgnd を調べましょう。
>>480 激しく同意。質問の仕方も勉強しなさい。
482 :
477:2001/08/04(土) 12:23
>>477=479=482 はプログラムより小学校の道徳の授業受けたほうが良くないか?
485 :
デフォルトの名無しさん:2001/08/04(土) 19:49
482はただの夏厨の可能性もある。
俺も偽者で酷い目にあった。
どっちもどっち
PNGファイルを読み込みたいのですが、
手軽なライブラリを教えてください
よろしくお願いします
488 :
デフォルトの名無しさん:2001/08/05(日) 17:51
InvalidateRectを呼ばないで任意領域を再描画する方法ありますか?
ON_PAINTのなかの再描画を直接行うことができればベストなのですが・・・
何が目的かというと、
InvalidateRectを呼んでしまうと、システムのどこかに更新領域の
キューが残ってしまうようで、その下にコントロールオブジェクトが
あると、勝手に更新されてチラツクので、それを防ぎたいのです。
よい方法があれば教えてください
491 :
デフォルトの名無しさん:2001/08/06(月) 03:54
>>490 GetDC で DC とってきて普通に描けば描ける。
492 :
デフォルトの名無しさん:2001/08/06(月) 04:25
18 名前:尻尾だけトラ猫 投稿日:2001/08/06(月) 01:25
太学生
19 名前:くらげ 投稿日:2001/08/06(月) 01:27
犬学生
20 名前:KSM ★ 投稿日:2001/08/06(月) 01:28
大学生
21 名前:首領クサ夫 ★ 投稿日:2001/08/06(月) 01:29
中学生
22 名前:名無しさん 投稿日:2001/08/06(月) 01:44
大学生
23 名前:尻尾だけトラ猫 投稿日:2001/08/06(月) 01:46
大学玉
24 名前:尻尾だけトラ猫 投稿日:2001/08/06(月) 01:51
大往生
>>491 うーん、微妙だ・・・
その場合だと、描画領域の上に他のウィンドウが乗っかっていたら
隠蔽処理が必要ですよね?
494 :
デフォルトの名無しさん:2001/08/06(月) 06:31
>>493 WS_CLIPCHILDRENがついていなければ、ね。
でもそれは WM_PAINT 時も同じだよ。
せっかく教えてあげても、「ですよね?」なんて気取った問い返しを
根拠も無くしてくる人にはもうつきあってあげない
↑
(勝手に返事しといて高飛車ですまんけどさ)
申し訳ございません
>>494 素人の素朴な疑問でした。言い回しが悪かったのかもしれませんが
誤解なさらないでください
気をわるくなされたのでしたら、今後きをつけます
すいませんでした
496 :
デフォルトの名無しさん:2001/08/06(月) 16:03
珍しくマトモそうな質問者なんだから苛めちゃダメ。
つーか
解決したのか?
499 :
Poh:2001/08/07(火) 10:38
CRichEditCtrlについて教えて。
行番号で指定して選択したいのです。
LineIndex()で行から文字数に変換してSetSel()で
選択できるじゃん。と思ったら、LineIndexの戻り値がintなの。ちょっと足りない。
longあれば十分なんだけど、どしたらいい?
500 :
デフォルトの名無しさん:2001/08/07(火) 11:06
今の VC++ なら int も long も同じ32bitだと思うが?
501 :
Poh:2001/08/07(火) 11:19
がーん!ホントだ。
CEditで足りなくなったので、CRichEditに書き直している最中。
SetSelやGetSelがlongになっていたので、あぁそうかと思ってしまったのだよ。
CEditの限界はintよりもっと小さなとこにあったのね。
はずかしいけど、助かっちゃった。。
502 :
Poh:2001/08/07(火) 11:24
あ、ところで、CRichEditCtrlの限界はどこ?
そんなドキュメントどっかにある?
98以降NT4以降について知りたい。
503 :
デフォルトの名無しさん:2001/08/07(火) 14:10
CListCtrlでサブアイテムのインプレイス編集しようとしたら、
やっぱり派生クラス作って実装しないと無理??
504 :
デフォルトの名無しさん:2001/08/07(火) 15:24
インプレイス編集ってあんまり使い勝手良くないよ。
ダイアログオープンするように変えられないの?
505 :
デフォルトの名無しさん:2001/08/07(火) 19:43
>>504 そうかなぁ?
2個しか項目が無いからむしろインプレイスのが
楽そうなんだよね。
もともとは入力ダイアログにしてたけど・・・
なんとか出来そうっす。
自作ソフトのインストーラー(&アンインストーラー)をInstallShieldで
作成したいのですが、わかりやすい書籍やURLを教えてください
ちなみにプログラムはEXEとデータファイルのごくシンプルな構成です。
利用規約の表示と確認、スタートメニュー&デスクトップに配置などが
できれば大丈夫なレベルです。
よろしくおねがいします
508 :
デフォルトの名無しさん:2001/08/08(水) 10:33
>>507 とっととウィザード使えば済む話と思われ
そんなにシンプルなインストーラなら、LZH の自己解凍書庫でも作れると思われ
509 :
デフォルトの名無しさん:2001/08/10(金) 02:35
MFCとOpenGLを使ってオブジェクトビューアを作っています。
仕様はほぼ満たすことができたんですが,現在一つ困ってることがあります。
メニュー「Window->ObjectList」でモードレスダイアログの
オブジェクトリストを開くようにしているのですが、
このオブジェクトリストがビューアを立ち上げたときに
一瞬チラッと表示されてしまうんです。(メニューから
オブジェクトリストは呼び出すことはできます)
すごく不恰好なのでこのモードレスダイアログを起動時に
一瞬表示しないようにしたいのですが解決法が分からず苦しんでます。
大まかな実装の流れはビューアクラスCOpenGLViewのメンバとして
オブジェクトリストクラスのポインタ CObjectList* pObjectList;
をプロテクトメンバにしてコンストラクタで↓のように初期化しています。
COpenGLView::COpenGLView
{
// TODO: この場所に構築用のコードを追加してください。
pObjectList = new CObjectList;
...
モードレスダイアログの作成方法は以下のアドレスのページを参照しました。
www2s.biglobe.ne.jp/~maekawa/dev/vc/tips/tips102.htm
COpenGLViewのコンストラクタ内のpObjectListの生成部分を
コメントアウトして実行しようとすると「ハンドルされていない例外は
Viewer.exe(MFC42D.DLL)内にあります」というエラーが出てしまいます。
長々と書いて申し訳ないんですが,どなたか知恵を貸してくれないでしょうか?
よろしくお願いします。
510 :
509:2001/08/11(土) 03:04
自己レスです。いろいろやってみた結果,
メンバをStaticにしてやるとうまくいきました。
お騒がせいたしました。
はじめてInstallShiled使うのですが
初心者にもわかりやすいガイド本(またはURL)ご存知でしたら
教えてください
>>511 アスキーから本が出てるから、アスキーのサイトで検索してください。
(何年か前の本だから使えないかも知れないけど)
513 :
名無し:2001/08/12(日) 23:57
CString::Delete()にバグがあるような「気が」するんですけど。
VC++6.0pro SP5当ててあります
CString buf;
buf = "aa";
buf.Delete(0, 4); //仕様だとbuf==""だと思うんだが、それ以前に落ちる
514 :
513:2001/08/13(月) 00:02
書き忘れてましたが、mfc/src/strex.cppで
memcpyのcountが負になることによって起きるようです。
まったく仕様がない仕様ですな。
516 :
sage:2001/08/13(月) 10:03
おお、ほんとだ。
age
ソースを見給え
基本的なインストーラーを
作成したいのですが、
VCに付属のInstallShieldがよくわからなくて
Visual Studio Installerを導入することにしました
ファイル・フォルダ類は無事インストールできるのですが
デスクトップ・スタートメニューに配置する
ショートカットファイルがうまく機能しません。
インストール後に、ショートカットファイルのリンク先をチェック
すると、どうもディレクトリ階層が消えていて
実行ファイルのみになってしまいます
なにかミスしているのでしょうか
ご教授ください
519 :
:2001/08/16(木) 04:13
>>518 それってMFCなのでしょうか。クラスは?
>>518 スレ立てて
しかも回答でてるのにまだマルチポストですか?
いいかげん自分で調べたら?
521 :
名無しさん:2001/08/16(木) 08:51
いきなりMFCから入った人いますか?
522 :
:2001/08/18(土) 04:17
age
523 :
デフォルトの名無しさん:2001/08/18(土) 11:38
>>521 MFCでプログラムすると、デバッグでMFCのソースコードまで
追いかける羽目になることが多いように思う。
生APIでのプログラムをちょっとだけでもかじるのと、そうで
ないのとで、MFCのソースコードの追いかけやすさは変わるん
じゃないだろうか。
SDK→MFCが王道かねえ?
>>521 いきなりMFCから入ったけど死んだ。
APIの知識、というかWindowsのプログラムを知っとかないと
わかんないとおもう
526 :
名無し:2001/08/18(土) 20:01
MFCをはじめようと思うのですが、ドキュメントビューアーキテクチャ
について分かりやすく説明してある本とかありますでしょうか?
できれば、実例がたくさん載ってるといいのですが、、、
一応、C++はわかるので、MFCについて詳しく載ってる本がいいです。
何かあれば教えてください。
527 :
pf:2001/08/18(土) 20:49
ヒイイイイイイイイイ!
>ドキュメントビューアーキテクチャ
について分かりやすく説明してある本とかありますでしょうか?
MFCのソース
529 :
名無し:2001/08/19(日) 00:13
>>528 そんないじわるなこといわないでください。
教えてください。
>>529 scribbleのチュートリアル ヨメってばよ
>>530 とりあえず読んでみます。
でも、お勧め本あったらよろしくです。
532 :
デフォルトの名無しさん:2001/08/20(月) 10:05
SDKで書いたプログラムを、MFCに移植する上での注意点は?
>>533 使うか使わないかを含めて、
Doc-Viewがなんたるかを理解してれば全く問題なし。
マルチスレッド対応にするなら、MFCのマルチスレッド関連の注意をよく読むこと。
そんだけ
>>533 SDKで作ってそれが仕様どおり動いてるんなら、
わざわざMFCにする必要はないと思うが。
その目的は?
ちょっとあげときますか。
ところでMFCとWin32API直とでは、どっちが主流なんでしょ?
>>538 MFCor直APIだけじゃなくて
自前のクラスライブラリを使うってのも結構あるんじゃないかな?
541 :
デフォルトの名無しさん:2001/08/24(金) 12:32
自分の知識不足でしょうが、MFCの方が、SDKよりはるかに
面倒くさいなぁ。まぁ、メインに使う言語がC++とCで違うってのもあるけど。
ちょっととなりの町内会に、データをもらいに行くだけで、キャスト、アドレス、キャストぉぉ・・
となり町のファッションにいちいち着替えないと、入れてくれないんだもん(藁
MFCでスマートにコードかけない自分が悪いんだけどね。
542 :
デフォルトの名無しさん:2001/08/24(金) 13:56
画像表示の白いちらつきについて
AppWizard(exe)を使って骨組みを作ったアプリケーションで画像を表示させて
いるのですが、表示を更新するとウィンドウに白いちらつきが出て困っています。
これを消す方法をご存知の方教えていただけないでしょうか?既出のダブル
バッファを用いて1回で転送してもだめなのです。
543 :
デフォルトの名無しさん:2001/08/24(金) 16:47
InvalidateRect関数の引数にFALSE使ってもダメ?
544 :
:2001/08/24(金) 16:54
MFCではないのですが、VC6 でリモート実行というのを設定したらデバッグサブシステムを
起動できませんといわれ 止まります。何処の設定変えるのかわかりますか?
545 :
542:2001/08/24(金) 18:48
546 :
デフォルトの名無しさん:2001/08/24(金) 20:00
マウスのドラッグはどうやって検出すればいいのでしょうか?
>>546 WM_LBUTTONDOWN
SetCapture
WM_MOUSEMOVE
WM_LBUTTONUP
ReleaseCapture
548 :
◆nCjjyXhk :2001/08/24(金) 21:30
BSBTIJ
WM_CAPTURECHANGED 追加
550 :
デフォルトの名無しさん:2001/08/25(土) 01:04
551 :
_:01/09/03 00:44 ID:iwqf5Q0Q
WinMain等メインループは、Win32APIベース(ATL)で
MFCのCDialogを使って、ダイアログを扱いたいんですけど
内部のAfxFindResourceHandle関数がASSERTに引っかかります。
多分CWinAppクラスのインスタンス化をしていないとか、
そのあたりが原因と思いますが、これを回避する方法はないでしょうか?
そもそもMFCのフレームワーク以外でMFCのクラスを使おうというのが
間違っているのでしょうか?
MFCのプラットフォーム以外で、MFCのクラスはどの程度まで使えるのか
そういった情報も知りたいです。
よろしくおねがいします。
553 :
_:01/09/03 02:02 ID:HWCzgSAM
>>552 お返事ありがとうございます。
教えていただいたAfxWinInit関数をWinMainに置き、
グローバル変数にCWinApp winApp;と置いたら
成功しました。
どうもありがとうございました。
554 :
デフォルトの名無しさん:01/09/05 02:53 ID:9DGwApwE
MDIベースで、「新しいウインドウを開く」
ときに何が起こっているのか教えてください。
ビューのインスタンスがコピーされるってことで
いいんでしょうか。
555 :
47:01/09/05 03:12 ID:kiU7d71A
spy!!
556 :
デフォルトの名無しさん:01/09/05 16:07 ID:pDzmJoSY
MFC AppWizardで作成したプログラム(SDI)を
単にある処理をした後にプログラムが終了するには
どのようにすればいいでしょうか?
557 :
デフォルトの名無しさん:01/09/05 16:29 ID:iHP9cOK2
お馬鹿な質問ですみません
いまVCでチャット作ってますが、ほぼ完成したところで、マルチスレッドにしないとサーバーに
多数のクライアント繋いでる時に不具合出るって言われた。
入門書にあまり載ってないしまったく分からないので聞きたいのですが、絶対必要でしょうか?
Webでそれなりに探したがあまり詳しく説明してるところが無くて、かなり困ってます(汗
オススメの本やページありましたら教えてください m(_ _)m
>>557 その条件でつないでみてそのままでいいのかどうか自分の目で判断しろ。
559 :
557:01/09/05 19:13 ID:pDzmJoSY
補足:
「ユーザがオペレーションを行わないで」という事です。
560 :
556:01/09/05 19:14 ID:pDzmJoSY
561 :
デフォルトの名無しさん:01/09/05 21:05 ID:yo/DrG8Y
たとえば、
[default]
PROJECT_NUM=10
LAST_UPDATE=20010905
のように、連想配列をファイルに読み書きしたいんだけど、
使えるクラスとかありますか?
562 :
デフォルトの名無しさん:01/09/06 14:45 ID:5pS2jHq6
>>558 うむ、逝ったね。
どう頑張ってもサーバー作れん。
ウツダシノウ
563 :
デフォルトの名無しさん:01/09/06 15:11 ID:lC87f1l6
564 :
デフォルトの名無しさん:01/09/06 17:00 ID:DJLsxQNI
>>554 CMDIFrameWnd::OnWindowNew()
565 :
デフォルトの名無しさん:01/09/06 23:57
566 :
デフォルトの名無しさん:01/09/07 06:23
OLEドラッグアンドドロップのドロップターゲットのほうを実装しているのですが、
COleDropTarget派生クラスのOnDropで、COleDataObjectから取得した
グローバルメモリハンドルは、::GlobalFreeしなければならないのでしょうか。
いろんなサイトを見てみたのですが、解放してたりしてなかったり、果ては
COleDataSourceの方で解放していたりと、まちまちです。
567 :
デフォルトの名無しさん:01/09/07 23:02
初心者向けのメーリングリストとか無いですか?
検索してみたけど、どれがいいのかさっぱり分からないです。
CTreeViewを左に置いてエクスプローラ風にしようと思ったんだけど、
アイテムを右クリックでポップアップメニューを出すってのがどうしてもうまくいきません。
WM_CONTEXTMENUのハンドラで出してるんですけどうまく出ません。
誰か作ったことある人がいたら教えてください。
>>567 VC関連の初心者向けコミュニティーは無さそう
(普段からいろいろ漁ってるけど)
たぶん、みんなプライド高いんだろね
その点、VBは初心者サイト、腐るほどあるんだけどな
VCPPMLは?
なんか、嫌な感じの信仰があったりするけど、
礼儀正しくしてれば基本的に親切に接してくれます
572 :
デフォルトの名無しさん:01/09/08 00:11
>>569-571
ありがとうございます(ぺこり)
VCPPMLにまず入ってみました。
VC++MLも入ってみます。
573 :
デフォルトの名無しさん:01/09/11 08:59
MFCを使ったアプリケーションでネットワーク上にファイルをしていったん保存した後、変更を加えて上書きしようとするとCDocument::OnSaveDocumentでエラーになってしまいます。
CDocument::OnSaveDocument
CDocument::ReleaseFile
CMirrorFile::Close
でエラーになるのですが、ReplaceFileに失敗して、CFile::Renameを呼んで例外がスローされます。
ローカルのファイルだと、ReplaceFileが成功します。
どのような原因、対策が考えられるでしょうか?
age
575 :
デフォルトの名無しさん:01/09/22 04:04
ウィンドウのタイトルバーをドラッグ中に(連続して)
なんらかの処理を行いたい場合
(具体的には、ほかのウィンドウを同時にセットでMoveWindowで移動させたいのです)
どのへんを乗っ取って処理すればよいのでしょうか?
WindowProc内で、なにかメッセージを感知して、、、というのは想像
つくのですが、具体的にわかりません。
どうかご教授ください
>>575 WM_MOVINGとかWM_MOVEとかでは?
WM_ENTERSIZEMOVE
WM_EXITSIZEMOVE
あなた達には分からないでしょうが、Rubyは素晴らしい言語です。
オブジェクト指向スクリプト言語として他のスクリプト言語を圧倒する性能と美しい言語仕様を持っています。
例えば、SchemeやSmallTalkなどは比較的美しい言語だと言われていますが、後発である優位さでRubyは
さらなる美しさと実用性を備えています。
もちろんPerlやPythonなど問題外です。
日本語との親和性ではRubyしか選択肢がないでしょう。
LinuxのディストリビューションもRubyの採用例が増えてきています。
1年後には全てのディストリビューションがRubyを標準採用するでしょう。
Rubyは未来のスクリプト言語なのです。
長くなりましたが、コピペではありません。
賛同していただける方はRubyの事を分かっていただけない人に出会ったら、
この発言をコピペしていただければ幸いです。
VC++なんて糞の極ですがね(大爆笑)
579 :
デフォルトの名無しさん:01/09/22 14:14
┏━━━━┳━━━━┓
┃ ┃ ┃
┃ ┃ ┃
┣━━━━┫ ┃
┃ ┃ ┃
┃ ┣━━━━┫
┃ ┃ ┃
┃ ┃ ┃
┗━━━━┻━━━━┛
このように分割されたウィンドウはどうすれば上手く
出来るのでしょうか?
SplitterWndをOnCreateClientでネストして使用し
・まず左右に分割
・次に左を上下に分割
・最後に右を上下に分割
とやってみたのですが、左の領域の幅が
何故かゼロ(分割線が左端に寄ってしまう)に
なってしまい、悩んでいます。
左右のどちらか一方が分割されないような三分割は
検索すると結構見つかるのですが、この形態の四分割は
参考例が見つからないので、識者の知恵をお借りしたい次第です。
>>575 クラスウイザードで適当なメッセージをFrameクラスあたりに
引いてくれば?
>579
Delphiならすぐ出来るんだけどね
582 :
デフォルトの名無しさん:01/09/23 01:52
>>579 分割位置を指定したいだけならCSplitterWnd::SetColumnInfo()は?
3分割が分かるんならすぐだと思うんだけどなあ。
一度分割したら次に分割する前に一度サイズ指定する、だと思う。
補足:
サイズ指定されていないウインドウを分割しようとすると
>とやってみたのですが、左の領域の幅が
>何故かゼロ(分割線が左端に寄ってしまう)に
>なってしまい、悩んでいます。
まさにその状態になります。
ちなみに私はMoveWindow()でサイズ指定してます。
左右に分割した直後にSetColumnInfoを使えば良かったのですね。
上下にも分割した後にサイズを変えようとしていたのが問題だったようです。
ありがとうございました。
586 :
デフォルトの名無しさん:01/09/23 10:36
587 :
デフォルトの名無しさん:01/09/23 11:23
>>579 Rubyはクソです。ゴミ箱逝きです。
いじょ
この発言をコピペしていただければ幸いです。
―――――――――――――――――――――――
それでは次のコーナーです
__ ____________________
.|/ ‖ ‖ ____
‖ ‖ | ON AIR.|
∧ ∧ θ ‖  ̄ ̄ ̄ ̄
(,,゚Д゚)__ /[] ̄ ̄θΛ_Λ
||(. つ_/ //(´∀` )/|
┗┳ /  ̄/⊂ ||_/
┻| ̄ ̄ ̄ ̄ ̄| ( ━┳┛
|_____| /ヽ」┘┻
____________|\____
「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
591 :
デフォルトの名無しさん:01/09/24 03:59
質問です
AppendMenuでダイナミックに追加したメニュー項目を処理する方法を
教えてください
あと、AppendMenuで与えるメニューIDで、Resource.hで既存のものと
ぶつからないようにするにはどうすればよいでしょうか?
(+1ずつ加算していくにしても、そもそもどこから開始させればよいのか・・)
以上、よろしくおねがいいたします
DeveloperStudioの表示>シンボルブラウザでID登録
クラスウイザードで関連付けしてソース生成
だったかなあ?
シンボルブラウザでぶつからないか確認・・・。なのかなあ?
593 :
デフォルトの名無しさん:01/09/24 04:39
594 :
デフォルトの名無しさん:01/09/26 09:09
あげ
595 :
デフォルトの名無しさん:01/09/26 19:54
既存のMFCのソースでCSocketを使いたいのですが
#include <afxsock.h> // MFC のソケット拡張機能
と
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
を追加してもうまくいきません。
この他にも設定するものがあるのでしょうか?
質問が漠然としすぎていて誰も答えられないと思われ。
1)そりゃあ、それだけじゃ動かんだろ。
2)うまくいかないって何?
597 :
デフォルトの名無しさん:01/09/29 03:45
WebBrowserオブジェクトを埋め込んでブラウザ画面をコントロールする
プログラムを作っているのですが、gifアニメや、flash動画を
任意のタイミングでロック(静止)させておきたいのです。
何かよい方法はないでしょうか?
よろしくご教授ください
>>595 #include <afx.h> が要るんじゃない? 試してないけど。
599 :
デフォルトの名無しさん:01/10/03 03:39
CInternetSession
のOpenURLでウェブページ(HTTP)にアクセスする際に、
URLが不正だったり、指定のURLのサービスが利用できない際に
それを知る方法はありますか?
インターネットそのものにアクセスできない場合は、例外をcatch
することでわかるようなのですが。
どうか教えてください
age
601 :
デフォルトの名無しさん:01/10/10 20:52
今ビットマップを表示するプログラムを作っています。
ビットマップを表示したら、ウィンドウのサイズを自動的に
ビットマップのサイズと同じにしたいと思っています
MoveWindowでビットマップの幅と高さを指定したんですが
うまくいきません。マッピングモードはテキスモードです
画面上の1ピクセルとビットマップの1ピクセルはサイズが違うのでしょうか?
602 :
デフォルトの名無しさん:01/10/11 00:42
んなわけない。
ウィンドウサイズと表示領域は確か違ったはず。
あとディスプレイ設定より大きくは出来ないはずだね。
603 :
デフォルトの名無しさん:01/10/11 00:46
>うまくいきません
これじゃわからん。
具体的にどうなったか報告しろ。
AppWizardが吐いてるコードは、なんか全てのクラスが
CxxxAppクラスを知ってる(#includeしてる)のが気に入らなくて、
それらをCxxxAppから独立させて(絶縁して)組んでます
こういうことしてる人っていますか?
>>604 そういうことが気になる人はAppWizardを使わないのでは?
えっと何か根本的にかんちがいしていたみたいでした・・・
そこで質問なんですが
GetClientRectで得たクライアント領域の座標を
デスクトップ上の絶対座標に置き換えるにはどうしたらいいのでしょうか?
607 :
デフォルトの名無しさん:01/10/15 21:41
CWnd::ScreenToClient()
>>606 俺だったら <windowsx.h> の MapWindowRect 使うぜ。
609 :
デフォルトの名無しさん:01/10/16 13:38
>>607 それは画面座標をクライアント座標に変換するの。
正解は API の ClientToScreen()
ありがとうございます
ClietToScreenを使ってクライアント領域とウィンドウサイズの差をとって
うまく設定することが出来ました。
こんなかんじです。
CWnd* parent = GetParent();
CRect win,client;
GetClientRect(client);
parent->GetWindowRect(win);
ClientToScreen(client);
parent->MoveWindow(win.left, win.top,
w + client.left - win.left + win.right - client.right,
h + client.top - win.top + win.bottom - client.bottom );
wとhはそれぞれ画像の高さと幅です
>>610 その最後の部分、移項して整理すると
w + (win.right - win.left) - (client.right - client.left),
h + (win.bottom - win.top) - (client.bottom - client.top)
ですよね。ClientToScreen(client)の必要ないと思う…。
612 :
デフォルトの名無しさん:01/10/16 23:48
「最近使ったファイル」の使用方法がわからんです。
CxxxApp::AddToRecentFileList(filename);
で登録できることは分かったんですが・・・
最近使ったファイルを選んだ時の関数OnFileMruFile1()で
どのようにそのファイル名を取得したらいいのですか?
#やっぱりOnFileOpen()を自分で実装せず
#シリアライズを素直に使うものなのでしょうか?
>>612 CDocument::OnOpenDocumentを引っかけるのが正解。
>610
ほんとだ。なんでこんあこときずかなかったんdろう。。。
鬱氏!
615 :
CEdit:01/10/17 16:42
突然スンマセンです
SDIのスケルトンからクラスウィザードで
最上位フレームのOnCreate引っこ抜いてきて
グローバル
CEdit *e;
OnCreate(){
:
e=new CEdit;
e->Create(.....);
:
}
って感じでメインフレームのクライアント領域いっぱいに
CEdit貼り付けると
中身が編集できなるっす
スクロールバーつけたらそれも弄れない
んで
WS_MAXIMIZEを指定したり
e->SetWindowPos(&wndTop...);
とかでCEditをTOPに持ってくると
こんどは編集できるけど表示がおかしくなるっす
いったい、どうしたらよいのでしょう?
616 :
デフォルトの名無しさん:01/10/17 17:09
SDIスケルトンはフレームとビューの両ウィンドウが依存しあってるからなあ。
ビューウィンドウを隠して、別のCEditを表示させるなんてことは、やめたほうがいい。
AppWizardでビューウィンドウの基本クラスをCEditViewにしとくのが無難だよ。
どしてもCEditを貼り付けたいなら、フレームじゃなくて
ビューウィンドウに貼り付けるといいんじゃない。。。
なるほど、、
SDK風にはっつけても駄目っすか
もう少し素直になることにします
Thxです
>>613 ありがとうございます
おかげで一歩前へ進みました。
えっと次の問題なんですが・・・・
CMainFrame::PreCreateWindowで
cs.cx = 200;
cs.cy = 350;
としてもこの大きさになりません
cs.x = 0;や
cs.style &= ~(WS_MAXIMIZEBOX | WS_THICKFRAME | WS_VSCROLL | WS_HSCROLL);
は反映されるのに....
AppWizardでSDIで作ってます。
よろしくお願いします
>>619 あなたのプロジェクトのrcファイルをテキストエディタで見てご覧...
ウィンドウが出来てからSetWindowPosで変更すればOK。
621 :
デフォルトの名無しさん:01/10/19 14:42
わからないことがあって困っています。
MFC AppWizardで作成したアプリで、子ウィンドウのサイズを変更したときの
描画の更新指示はどこで行われているのでしょうか?
更新リージョン内の背景を消去しないようにしたいのです。OnSize()に記述
(Invalidate(FALSE))しても効果なしで。
test
623 :
デフォルトの名無しさん:01/10/19 15:03
>>621 OnEraseBkgnd、背景ブラシ ??
624 :
デフォルトの名無しさん:01/10/20 02:58
>>621 OnDrawで更新してるんでは?
僕的には、常に描画はバックバッファに対して行い、
それをBitBltして全部再描画してるけど(簡単なゲームみたいなプログラム
たしかRegisterWindowに渡す引数次第では
ずっとクライアント領域を保存しておくことができた気も。
ちなみにRegisterWindowに渡す引数は、
PreCreateWindowをオーバーライドして変更するyo
625 :
デフォルトの名無しさん:01/10/20 23:26
MFCは、
LRESULT WndProc(,,,,,,){
switch(...){
case WM_PAINT:
OnPaint();
break;
}
return DefWndProc(.,...)
}
calss a{
virtual void OnPaint()
}
こういうことをやっているのですか?
確認汁って、どんな汁ですか?
628 :
デフォルトの名無しさん:01/10/21 00:31
ちょっと冷めてるけどソースが多め。
一本一本ほどいて喰え。
へー、ソースが入ってるのですか。
明日、家族にその確認汁を作ってあげたいんですけどどうやって作ればいいですか。
630 :
デフォルトの名無しさん:01/10/21 00:53
VCのライセンスを家族の人数分買ってから料理しなさい。
VCのライセンスを買わないと駄目なんですか。
CD−Rに僕のVCのライセンスを譲渡しようと思うのですが駄目ですか。
ダメ
食べたい人の人数分ライセンスを買いなさい
食べてから売りに出していいですか
当店の食品はすべて使用許諾契約契約を結んでいただくことになっておりますが、
他人への譲渡は出来ない契約になっております。
買われた当人が、最後までお食べくださるようお願いします。
食べた後、ゲロすればおけ。>633
637 :
デフォルトの名無しさん:01/10/22 03:57
CInternetSession
のOpenURLでウェブページ(HTTP)にアクセスする際に、
URLが不正やリンク切れだったり、指定のURLのサービスが利用できない際に
それを知る方法はありますか?
インターネットそのものにアクセスできない場合は、例外をcatch
することでわかるようなのですが。
どうか教えてください
637の補足なのですが、
アクセスしたURLがリンク切れだったりしても、
Not Found
The requested URL /xxx.htm was not found on this server.
のようなHTMLがゲットされてしまって、あたかも正常に
ダウンロードできたっぽい結果になるんです。
>>638 httpヘッダ解析しる。
ていうかまずRFC読んでhttpそのものについて勉強した方がいいど。
640 :
デフォルトの名無しさん:01/10/22 13:34
CDialogから派生させたクラスで
生成したモードレスダイアログなんですが、
アクティブな状態でエンターキーを押すと
ウィンドウが消えてしまいます。
どうやらDestroyWindow()は呼ばれていないようなのですが
実体はお亡くなりになっている気配で、これを抑止するために
OnKeyDownをオーバーライドしてみたのですがこれも
呼ばれていないようで効きません。
モードレスダイアログ特有の現象に見えるのですが、
どなたか原因&解決抑止方法をご存知の方、いらっしゃいませんでしょうか?
>>640 それはEndDialogが呼ばれてしまっているのです。CDialogのアホ。
解決策はCDialog::OnOk()のドキュメント読んで。
それとCDialog::OnCalcel()も。
642 :
デフォルトの名無しさん:01/10/22 14:17
>641
ありがとうございます。
でも、OnOk()もOnCancel()もPostNcDestroy()も
オーバーライド済なんです。
ウィンドウシステムメニューの閉じるボタンを押したときは
きちんとOnCancelを通ってDestroyしているようです。
試しにEndDialogをオーバーライドしてみましたが変化なしです。
一体どこでリターンキーコードを受け取って動いているのでしょうか・・・
>>623 >>624 OnEraseBkgnd()を空にして(いいのだろうか・・・)解決しました。
ありがとうございました。
おっとOnOK対処済みでしたか。そうなるとわからんなー。
ウィンドウが消えるあたり(OnClose?)にブレークポイントを入れて
止まったところでコールスタックを見たら原因わかんないかなあ。
645 :
デフォルトの名無しさん:01/10/22 15:46
>644
それらしきものは試してみたのですが、
OnClose、OnOk、OnCancel、OnShowWindow、
すべて素通りでした。しくしく
>639
ヘッダ解析は面倒ですね。やはりそれしか方法はありませんかね。
では、指定したURL下のディレクトリ(ファイル)一覧を
ゲットする方法ってありますか?
(要は普通にFTPソフト実行したときのように)
参考になるプログラムとかあれば是非教えてください
647 :
デフォルトの名無しさん:01/10/22 16:06
>>645 > OnClose、OnOk、OnCancel、OnShowWindow
実はCDialog::OnOK(OKは大文字)がオーバーライドできていない、
なんてことはないよね。
うーん。考えにくいか。
>647
うっきゃーそれでした!!(大恥)
大馬鹿に付き合ってくださってありがとうございました・・・
逝ってきます・・・
しかもさげそこねてるし(二重大恥)
650 :
デフォルトの名無しさん:01/10/23 00:41
タブコントロールのタブのテキスト取得しようとしてるんですが
うまくいきません。
根本的に間違ってのでしょうか?
TC_ITEM TabCtrlItem;
memset(&TabCtrlItem,0,sizeof(TabCtrlItem));
TabCtrlItem.mask=TCIF_TEXT;
m_tabctrl.GetItem(0, &TabCtrlItem );
return TabCtrlItem.pszText;
651 :
デフォルトの名無しさん:01/10/23 07:23
>>650 pszText用のバッファは自分で用意するんでないの。
652 :
デフォルトの名無しさん :01/10/23 07:38
>>650 根本的に間違ってよ
Cからやり直したほうがイイよ
653 :
デフォルトの名無しさん:01/10/23 07:45
TabCtrlItem.pszText
は開放しなくていいのですか?
っていうか、あらかじめ確保しておかないといけない・・・。
>>652 この部分はCで書いても同じじゃねーかよ。アホか。
飛んで火にいるあほう鳥。
>>654 同じだからCを勉強しなおせって事だろ。
657 :
デフォルトの名無しさん:01/10/23 09:14
変数の寿命について勉強しなおすべし。
サブルーチン内の変数はサブルーチンを抜けたら保証されません。
(関数だろというつっこみは禁止)
スコープだろ?
CStringに 0xF6 0x85 って入れると、GetLength()が
3 返すんだけど、これってバグじゃないかい?
JIS X0208に付いてる資料だと、ユーザ定義文字領域?
660 :
デフォルトの名無しさん:01/10/24 13:00
卒研で認証画面作ってるのですが、char password[maxpass]
の所でエラーが出てしまい、上手くいきません。何か代替
手段が無いでしょうか?
//パスワード設定
CString key="PASSWORD";
int maxpass = key.GetLength();
char password[ maxpass ];
m_pass.GetWindowText(password,maxpass);
password は静的な確保のため、maxpass が定数でないと
エラーになる。C++の場合:
char *password = new char[....];
....
delete[] password;
とすれば動的確保になるかも。
>>662 あとあとのことを考えるととりあえず3日だけでも卒研を中断して
C/C++の入門書で勉強したほうがいいと思われ。
>>661 >>662 どもありがとうございます。まだ本読みながら書いてる
状態なので、もうちょい勉強してから再開してみます。
664 :
デフォルトの名無しさん:01/10/24 16:30
CStdioFileで、追加書き込みモードでファイルを扱う方法はありますか?
CStdioFile file("hoge.txt", CFile::modeWrite | CFile::modeNoTruncate);
で、オープンすると、上書き書き込みモードになってしまうようです。
665 :
デフォルトの名無しさん:01/10/24 16:36
AppWizardで2ペインのウィンドウを作ったのですが、(左がCTreeView,右がCListView)
左側のCTreeViewの中にツールバーをつけたいのですがどうやったらよいでしょうか。
CTreeViewのOnCreateでCToolBarCtrlをCreateして、
OnSizeでTreeCtrlとToolBarCtrlの位置を変更してみたのですが、
Viewの中身が描画されずうまくいきませんでした。
Seek忘れでした!
667 :
デフォルトの名無しさん:01/10/25 06:40
MFC+OpenGLでポリゴンビューアを作成しているものです。
私はVisualC++で作成をしているのですが,いままでずっと
メインウィンドウのメニューやサブウィンドウのGUIの作成&設定は
VisualC++のリソースエディタを使ってこつこつ作成してきました.
ですが、最近になってツール(ポリゴンビューア)上から
インタラクティブにサブウィンドウのGUI(テキストフィールド,ボタン等)
を変更・追加・削除する機能をつけたいと思うようになりました.
具体的に似たような機能を持つMayaを例にあげて説明させてもらいます.
(Mayaをご存知でない方申し訳ないです)
MayaのAttributeEditor(サブウィンドウ)を開いてそのメニューの
”Add Attribute”でアトリビュートを追加するとAttributeEditor
に新しい項目(アトリビュート)が追加されてGUIも更新されている、
といった感じのものを作りたいと考えています。
このようなことって実現できるのでしょうか?
リソースデータ等を無理やり書き換えるプログラムを作成するのでしょうか?
それとももっとスマートな方法が存在するのでしょうか?
分かりにくい説明かもしれませんが,ご教授のほどお願いします.
668 :
デフォルトの名無しさん:01/10/25 10:36
>>667 「追加、削除」を「表示、非表示」と考えたら比較的簡単にできます。
ボタンなどのコントロールも結局CWnd派生ですから
GetDlgItemでコントロールのポインタを取得して
ShowWindowで表示、非表示、MoveWindowで位置を動的に
調整することができます。
また、メニュー項目の追加や削除なども動的に変更できます。
CMenuあたりのヘルプを見てください。
669 :
デフォルトの名無しさん:01/10/25 12:21
質問です
procedure Tjotai_real.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
文
end;
上の文をFormCreateで呼ぼうと思っImage1MouseDown(Sender,mbLeft,ssShift,0,0);
をしたのですが「TshiftStateとEnumerationには互換性がありません」って警告が
出ます。
どうしたら良いでしょうか?
誤爆
671 :
デフォルトの名無しさん:01/10/25 14:45
CMDIChildWndから派生させたクラスで、
WS_VSCROLLとWS_HSCROLLを指定して
生成したウィンドウをスクロールさせたいのですが、
引数で渡されるCScrollBarが死んでいる様子なので
GetScrollBarCtrlを使おうとしたら、GetScrollBarCtrlは
WS_VSCROLLで生成したスクロールバーには無効と
MSDNに書いてありました(涙)
どうやって制御したらよいのでしょうか?
本も10冊近く調べ、MSDNもしつこく調べたのですが
よくわからなくて・・
どなたか教えてください!よろしくお願い致します。
「引数で渡される」と書いた関数はOnVScrollです。
>>671 CScrollBar::SetScrollInfo()ではなく
CWnd::SetScrollInfo()をウィンドウ自身に対して使う。
>673
ありがとうございます!
CWnd::GetScrollInfo&SetScrollInfo&ScrollWindowでなんとなく動くようになりました。
でも、クライアント領域の再描画がうまくいきません。
調べてみます。
>>667 あんた、ものすごく仕事の相談してるっぽいな。
ところでGUIのボタン等はMFCでクラス化されてるんだから
動的にクラスの実体を作ればいいだけのこと。
C++から勉強し直すことをオススメするよ。
676 :
デフォルトの名無しさん:01/10/26 00:24
>>668,675さん
貴重なアドバイスありがとうございました.
確かにC++(オブジェクト指向)の理解が足りないと思います。。
どうもありがとうございました。
age
678 :
デフォルトの名無しさん:01/10/29 10:57
mfcのMDIアプリのウィンドウメニュー(重ねて表示/並べて表示/...)
に現在開いているウィンドウが、自動的に追加表示されますが、
特定のウィンドウはメニューに表示されないようにしたいのですが、
どうしたらいいのでしょうか?
>>678 その表示したくないウィンドウを、Doc-Viewアーキテクチャ以外
(例えばモードレスダイアログとか、MDIフレームとは独立した
ChildFrameとか)で作る。
な〜る
681 :
デフォルトの名無しさん:01/10/30 16:54
>>679 それでうまくいきました。どうもありがとうございました。
682 :
デフォルトの名無しさん:01/10/30 19:52
こんばんは。
AfxBeginThreadについて質問です。
下にあるソースを実行すると、
----------------------------------------------------
error C2665: 'AfxBeginThread' : 2 のオーバーロードは
1 番目の引数を 'void (void *)' から要求の型に変換できません。
----------------------------------------------------
というエラーが出てきてしまいます。
Threadをstaticで宣言しているのになぜですか?
class Caaa : public CWinApp
{
public:
void Rethread(void);
static void Thread(LPVOID p);
LPVOID pParam;
protected:
・
・
・
};
void Caaa::Rethread()
{
if (AfxBeginThread(Thread, pParam) == -1)
{
//処理
}
return ;
}
void Caaa::Thread(LPVOID p)
{
//処理
return ;
}
>>682 &Thread
ポインタの勉強を最初からやり直せ。
>>683 いやそれは別に問題なかろう。
UINT Caaa::Thread(LPVOID p)
{
//処理
return ;
}
685 :
デフォルトの名無しさん:01/10/31 10:06
>>684さん
型をUINTにしてみましたが、今度は
----------------------------------------------
error C2511: 'Camera_thread' : オーバーロードされたメンバ関数が
'<Unknown>' にありません。
----------------------------------------------
というエラーが出てしまいました。
class Caaa : public CWinApp
{
public:
void Rethread(UINT);
static UINT Thread(LPVOID p);
LPVOID pParam;
};
UINT Caaa::Thread(LPVOID p)
{
//処理
return ;
}
ではいけないのでしょうか?
よろしくお願い致します。
DocumentのSerialize時(無効なファイルの読み込みの時)に新たにウィンドウを
作りたくないのですが、どうすればよいかわかりません。誰か助けて。
void CSmatPaint2Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: この位置に保存用のコードを追加してください。
}
else
{
// TODO: この位置に読み込み用のコードを追加してください。
CFile* pf=ar.GetFile();
CString fn=pf->GetFileName();
image=IeImg((LPCTSTR)fn);
if( !image->isValid() ){ //無効なイメージファイル
AfxGetMainWnd()->MessageBox("無効なイメージファイルです");
//ここで新しいドキュメントを作成せずに、閉じたい(アプリケーション
//は終了せず)のですが、その方法がわかりません。
}
else
{
//有効なイメージデータの処理
}
}
}
>>687さん
ありがとうございます。
でも、いきなりOnCloseDocument()を呼び出すと、
不正な処理...のDialogBox
↓
ハンドルされていない例外はSmatPaint2.exeにあります。:0xc0000005:Access Violation
↓
メモリウィンドウが出てくる(文字が灰色で???)
の様になってしまいます。MSDNを見る限りでは何の問題もなさそうなのですけど。
ついでに、起動時に子ウィンドウを出さない様にするにはどうすればよいのでしょうか?
・OnNewDocumentのインプリメントをコメントアウトしてもダメ。
・OnNewDocument()の中でOnCloseDocument()を呼び出ししたら氏んでしまう。
>>688 OnNewDocument/OnOpenDocumentが完了する前にはOnCloseDocument呼べないみたいだね。
MDI子フレームにWM_CLOSEを送ってみるってのはどうだ。
690 :
デフォルトの名無しさん:01/10/31 19:45
>>688 >起動時に子ウィンドウを出さない様にする
これは知ってます。
CxxxApp::InitInstance()の中で
CCommandLineInfo cmdInfo;
の直後に
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
を挿入。
>>689さん
CxxxDoc::Serialize の内部で行うと氏んでしまいました。
CxxxDoc::Serialize(CArchive& ar)
{
.....
POSITION pos=GetFirstViewPosition();
while(pos != NULL){
CView* pView=GetNextView();
CWnd* pWnd=pView->GetParent();
pWnd->SendMessage(WM_CLOSE);
}
....
}
次にドキュメントがダメならCxxxViewでやっちまえと思って
OnInitialUpdate,OnDrawなどでやってみましたが、ことごとく
粉砕されてしまいましたが、
CxxxDoc::OnOpenDocument()の内部で下記の様にやるとうまくいきました。
BOOL CSmatPaint2Doc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: この位置に固有の作成用コードを追加してください
//拡張子によるフィルタ
CString s = lpszPathName;
if( s.Right(3).CompareNoCase("TIF") != 0 ){
AfxGetMainWnd()->MessageBox("サポートされていないファイル形式です。");
return FALSE;
}
//イメージオブジェクトをファイル名から生成
m_img = IeImg(lpszPathName);
//---イメージの有効性チェック---
// 拡張子が合っていても、いたずらにて拡張子が変更されている場合または
// ファイルが壊れている可能性があるためにこれを行う
if(!m_img.isValid()) {
AfxGetMainWnd()->MessageBox("無効なイメージファイルです。");
m_img = ieImgNull;
return FALSE;
}
return TRUE;
}
大変良い勉強になりました。感謝してます。
>>690さん
ばっちりです。ありがとうございます。
SQLサーバからデータを読み出している際にNULLが入っていると例外でおちます。
_variant_t vString;
vString = m_pRecordset->GetCollect(_variant_t("整理"));
vString.ChangeType(VT_BSTR);
s11=vString.bstrVal;
整理がNULLの場合2行目のvString.ChangeTypeで
落ちますがどう対処すればいいのでしょうか。
693 :
デフォルトの名無しさん:01/11/02 09:27
>>692 VC++のspでの修正内容一覧でそんなのを見かけた気が、、、
spのバージョンは?
694 :
デフォルトの名無しさん :01/11/02 09:29
誤爆した。
if ( vString ) で囲んでもダメなのかい?
最新パッチあててるはずです。
ただvc起動時 VBみたいに SPなんとかと出ませんが...。
カッコでくくってみます。vbでいう on error resume next みたい
のがあるといいな
697 :
デフォルトの名無しさん:01/11/02 12:01
>>696 try {
} catch (...) {
}
__try {
} __finally {
}
TRY {
} CATCH_ALL{
} END_CATCH_ALL;
なにやらヒントが。やってみます>697
例外キャッチしてもいいけど、バグったバージョンの bstr とか使うと
痛い目見るかも。
700 :
デフォルトの名無しさん:01/11/03 16:35
MFCを勉強しはじめです。
CTimeとかをコンポジションしたいときって
ポインタだけにして
コンストラクタでヒープ領域にとるようにすべきなんでしょうか。
それはコンポジションでもなんでもないが、
ポインタでもメンバ変数として持ってもどちらでもよい。
702 :
デフォルトの名無しさん:01/11/03 16:48
OO用語つかいたいなら集約にしとけ
703 :
デフォルトの名無しさん:01/11/03 17:00
集約=コンポジション?
>>701 それはCTime自身がヒープ領域を取るからですか?
集約=アグリゲーションじゃねえの?
706 :
デフォルトの名無しさん:01/11/03 17:08
勉強し始めの頃は、どちらで持つべきかは好きにしてよい。
>>706 了解です。簡単なスタックの方にしときます。
>>704 ヒープにとるぶんにはまあ問題ないでしょう。
スタックだとちょっとまずい。
たとえばCTimeがメンバ変数に大きな配列を持っていて、その実体を
メンバとするクラスAを作ったとする。
このAをプログラム中でlocal変数としてインスタンス化した場合、
大量のスタック領域が消費されることになる。
まCTimeではそんなことは無いから気にしなくてもいいんだけど。
>>708 アドバイスどうもです。
CTime,CFile,CStringとかいっぱい入れてるんで
(それをコンポジションと言うと思ってた。なんて言うのだろ)
ヒープにとることにします。
ポインタにしたら
Time = CTime::GetCurrentTime();
error C2679: 二項演算子 '=' : 型 'class CTime'
の右オペランドを扱う演算子は定義されていません。
(または変換できません)
って出てしまいました。なんですかこれ?
711 :
デフォルトの名無しさん:01/11/03 18:02
*Time = 〜
>711
ああ、そうか、あれじゃポインタの置き換えになっちゃいますね。ボケてました。
こうして700は一つ大人になった。
ProgressCtrlを継承して独自のプログレスバーを
作ったんですけど、
OnPaintがprotected:メンバになっていて
コンパイルエラーになります。
publicにしちゃって良いですか?
>>714 状況がよくわからんが…、OnPaintを外から直接呼ぶ気か?
止めとけ。InvalidateRect() か何かで間接的に使うようにすべき。
716 :
デフォルトの名無しさん:01/11/05 09:18
オレ、CTime嫌いです。
718 :
デフォルトの名無しさん:01/11/05 10:13
メインフレームのフレームウィンドウを消す方法はありますか?
透明にしたり色を変えたりでもいいのでお願いします
720 :
デフォルトの名無しさん:01/11/05 10:28
>>718 Create時かPreCreateWindowでウインドウスタイルを変える。
722 :
デフォルトの名無しさん:01/11/05 10:54
システムモニタのようなスクロールする
折れ線グラフのクラスを作りたいんですが
CPaintDCだけじゃだめでしょうか。
723 :
デフォルトの名無しさん:01/11/05 11:03
分割ウィンドウについて質問します。
メーラのBecky!を例に挙げますが、このソフトのメール一覧ビューと
本文ビューの間には、縦サイズが固定で日時情報や複数のボタンが
表示されているビューが存在します。
このビューのように、MFCで水平に3分割したビューのうち
中央のビューの縦サイズを固定し、なおかつドラッグしても
縦サイズが保持されたまま移動するビューの実現はどのように
すれば良いのでしょうか?
参考になるソースへのポインタだけでも教えて頂けると有り難いです。
724 :
デフォルトの名無しさん:01/11/05 11:30
>>720 >Create時かPreCreateWindowでウインドウスタイルを変える。
ありがとうございます。が、PreCreateWindowだとアサートされてしまうので
Create時に試してみたところ、
ModifyStyleEx(0, ~WS_EX_WINDOWEDGE);
ではまたもにクリックできないようになり、
ModifyStyleEx(0, WS_EX_TRANSPARENT);
では期待した効果が得られませんでした。具体的にはどうすればいいのでしょうか。
727 :
デフォルトの名無しさん:01/11/05 11:40
たびたび、お世話になります。
ショートカットの上にドラッグ&ドロップしたときにファイル名又はフォルダ名を
をGETするにはどうすればよいのでしょうか?
::DragQueryFile(...)のまねをしたいのです。
730 :
デフォルトの名無しさん:01/11/05 14:10
>>725 これって端っこまで行った時、画面からはみ出てしまいます。
自動的にスクロールするようなやつ、ないですか?
>>730 プログラマだろ?
自分でカスタマイズしろよ
>>733 いやなんとなく親切したい心理状態
昨日ペイフォワードみたからな
>>729さん
Quick Responseありがとうございます。
早速やってみました。
GetCommandLine()で大概はOKなのですが、問題があります。
その問題とは、ファイル名がMS-DOSファイル名(8.3形式)にされてしまうのと、
ファイルを複数ドロップしたときに、ファイル名がスペース区切りにされてし
まうことです。::FindFirstFile()等でMS-DOSファイル名で検索し、
WIN32_FIND_DATA構造体の中にLong file nameで格納されていれば問題なし
なのですが、まだそこまで確認できていません。
MS-DOSファイル名→Long file name変換の関数があれば何の問題もないのですが。
GetLongPathName()
737 :
デフォルトの名無しさん:01/11/05 17:04
自分で全部作ったから
ゴルァしようかと来て見たら
732のような天使がいて心洗われました。
>>736さん
ばっちりです。ありがとうございました。WIN32 APIを打ち込みするのに
::をいれたら__argcと__argvが出てきたのを偶然発見したので、もしかしたら
と思って、使ったらうまくいきました。
以下動作確認部分のコードです。
...
int arg_cnt = ::__argc;
CString s="";
char buff[MAX_PATH+1];
for(int i=1; i<arg_cnt; i++){
::GetLongPathName(::__argv[i],buff,MAX_PATH+1);
s += buff;
if(i != arg_cnt-1 ){
s += "\n";
}
}
MessageBox(s);
...
739 :
デフォルトの名無しさん:01/11/08 19:51
OnInit内でのエラー処理ってどうやるんでしょう?
returnしただけだとウィンドウが残ったままです。
WM_DESTROYするとアプリケーションエラーになります。
740 :
デフォルトの名無しさん:01/11/08 20:00
VC++相談スレにも書いたのですが・・・。
二重書き込み申し訳ないです。
COleDataSource::OnRenderGlobalData
COleDataObject
の、サンプルコードがあるところを教えてください。
達人の方々、簡単なサンプルコードをいただけると幸いです。
サパーリわからなくて困り果てています。うう(泣
OnInit内でレジストリ判定とか入れてエラー処理を入れるのは
だめなんですか?
どのサイトみてもそういうサンプルがないので。
>>741 OnInitって何よ?
.NETの話ならスレ違い。
743 :
デフォルトの名無しさん:01/11/08 21:26
たぶんOnInitDialogだが
問題点すら明確に伝達できないやつに教えるのはばかばかしいので
さらしage
744 :
デフォルトの名無しさん:01/11/08 21:37
>>743 >returnしただけだとウィンドウが残ったままです。
>WM_DESTROYするとアプリケーションエラーになります。
ゆーてるやろもうええわ!っち。
745 :
デフォルトの名無しさん:01/11/08 21:50
起動時のエラーチェックはアプリケーションクラスでやれ馬鹿
>>745 >>744は元VB厨だからForm_Loadでエラーチェックするのが作法なんだよ、きっと。
CWinAppとCDialogの派生クラスが切り離されている意味がよく分かってないんだね。
なんとか入門の本を読んでも、その辺の構造について解説してないもんな。
>>744 MFCのフレームワークにはOnInitなんてハンドラはないんだけど。
6.0で画像を90度回転させるのってどうやるの??
>>751 画像の回転には5.0でも4.0でも
バージョンは関係ない。
ちなみに
pDC->StretchBlt(xDest, yDest, bm.bmWidth, bm.bmHeight, &memDC,
bm.bmWidth-1, 0, -bm.bmWidth, bm.bmHeight, SRCCOPY);
このsrcの値を変えれば回転する。
753 :
デフォルトの名無しさん:01/11/09 14:21
よく見たらアプリケーションクラスにデストラクタがありません!
なんでですか?
>>753 デストラクタは基本クラスにあるだろ
オーバーライドしてないだけだろ
>>754 ExitInstanceで処理することにしました。
画面に出たウィンドウの特定のボタンを自動的に押す という
方法はどのようにするのでしょうか。
spyというやつでid(?)取得してどうこうするのでしょうか?途方にくれてます。
できないことないけど、なんでそんなことしたいの?
rocket mouse買う方が簡単でやすくつくよ
ユーザにどうしても押されたくないボタンがあるんです。
だからウィンドウがでたらキャンセルを自動的に押して
キャンセルしたいんです。
ほかの方法でもいいんですが...
(´-`).。oO(自爆ボタンかな?)
761 :
デフォルトの名無しさん:01/11/09 22:39
>759
WM_CREATEをフックして送られてきたハンドルからボタンのハンドルをゲットしてMESSAGE送る。
すなおにdisableしとけよ
その押されたくないボタンのプログラムはexeしかないんです。
764 :
デフォルトの名無しさん:01/11/10 13:20
>759
フックしなくてもよかった。
普通にWM_CREATEでSendMessage送れヴぁ?
ふーむ。なんせMFC初めて間もないので方法すら分からないのでした。
>>763 押されたくないボタンのあるアプリなんか使わせなければいい。
何のボタンなのかすげー気になる
ふむむ。努力してみます。ちなみに押されたくないボタンは顧客情報を
エクスポートするボタン。
フリーでも画面に出た特定ボタン押すというソフトあるれどこれじゃその
ソフト終了されたらおしまいだし。だから自分で偽装したやつ作る必要が
ある訳でした。
多分rocket mouseも簡単に終了できんるですよね。これいいと思ったんですが。
さげ忘れたごめんなさい。
VisualStudioでEXEをリソース形式で開けば
ダイアログのボタンとか削除とか、disableにできるよ。
ダイアログじゃないとか、
動的にコントロールを制御してるようだと、
駄目だけどね。
>>770 他人のプログラムに改変を加えて再配布というのはいろいろ問題がないか?
再配布はしません。改造したexeを内部で使うだけです。
ただ改造すら禁止しているケースもありますが。
というか、誰でもエクスポートできるように作るなと言いたい。
ファイルをダイアログベースのソフトに
ドラッグ&ドロップしてファイル名とパスを
取得したいんですが、よくわかりません。
どなたか、教えていただけないでしょうか。
おねがいします。
WM_DROPFILESのハンドラを作る。
ただしClassWizardはデフォルトではCDialog派生クラスにWM_DROPFILESを表示しないので
クラスのメッセージフィルタを"Dialog"から"Window"に変更する。
>>774 ありがとうございます。
まだファイル名がうまく取れませんが、ドロップは認識しました。
なんとかできそうです。ありがとうございます。
それにしてもVC(MFC)は奥が深いです。
ラジオボタンを使用するためにDoDataExchange()で
DDX_Control(pDX, IDC_RADIO1, m_radio1)
としているんですがこれって問題ありますか?
778 :
デフォルトの名無しさん:01/11/14 03:10
>>777 afxdd_hを見たところDDX_Control関数の3番目の引数が参照になってるね。
m_radio1はポインタなの?
ヘッダファイルで
CButton m_radio1;
としています。
他のコントロールならばClassWizardで追加するのですが、
グループスタイルの無いラジオボタンなので手作業で追加しました。
>>779 あーなるほど。グループスタイルを付けないと
ClassWizardじゃDDX変数を作れないんだ。
しかしなんでグループスタイル付けないんですか?
>>780 全部のラジオボタンにグループスタイルつけるとラジオボタンのON/OFFが
各ボタンでばらばらになってしまうからです。
例えば、
○ラジオボタン1
○ラジオボタン2
上のように二つのボタンがあったとき、1だけにグループスタイルをつけると
1をONにしたときに2が自動的にOFFになり、またその逆も可能です。
ところが両方のボタンにグループスタイルを設定してしまうと、
2は1のON/OFFとは関係無しに独立して動作します。
782 :
デフォルトの名無しさん:01/11/14 17:39
>>781 分かった。「1だけグループスタイルあり」でグループ化したとき、
グループスタイルを持たないラジオボタン2以降にも、
手作業でコントロール型のDDX変数を割り当てたいつー話?
たしかに問題ありそうな無さそうな微妙なところですな。
これはMFCのソースを見るしか。
783 :
デフォルトの名無しさん:01/11/14 18:53
RPGらしきもの作ってて、マップ情報を保存する時にクラスを2次元配列(というかvector)にしたいだが、
CArrayで2次元配列作る方法、操作などがわかりません(;´Д`)
参考してる本はSTL使ってるが良く分からないし、、
どなたか、教えていただけないでしょうか。
おねがいします。
class nijigenhairetsu {
int x_;
int y_;
int *vec_;
public:
nijigenhaitetsu(int x, y) : x_(x), y_(y), vec_(new int[x*y]) { std::fill(vec_, vec_+x_*y_, 0); }
~nijigenhaitetsu() { delete [] vec_; }
int &get(int x, int y) const { return vec_[y * y_ + x]; }
};
>>783 CArrayに初めて触ってみたので変なとこあったらごめんね。
#include <afxtempl.h>
struct cell_t {
int m_data;
};
struct map_t : public CArray< CArray< cell_t, cell_t& >, CArray< cell_t, cell_t& >& >
{
map_t(int width = 1, int height = 1)
{
SetSize(height);
for (int i = 0; i < height; i++)
(*this)[i].SetSize(width);
}
};
int main()
{
map_t map(10, 10);
map[9][9].m_data = 777;
printf("%d\n", map[9][9].m_data);
return 0;
}
なるほど、直接使うのではなくクラスを作るのですね。
>struct map_t : public CArray< CArray< cell_t, cell_t& >, CArray< cell_t, cell_t& >& >
CArrayを継承した構造体map_tを作ったみたいんですが、後ろのほうの< CArray< cell_t, cell_t& >, CArray< cell_t, cell_t& >& >
の意味がわかりませんが、もしよければ教えてもらえませんでしょうか?
あとクラスで書くときはどうなるとか、、
MFCから始めたなんちゃってプログラマで、構造体いじった事もなくてすみません(;´Д`
2次元配列ってC習う時良く使うが、実務ではあまり使わないのでしょうか?
質問させていただきます。
VisualC++6で
char型の配列buf[0] buf[1] buf[2]に格納した8bitデータ3つを
24bitデータにまとめたいのですがどうしたらよいでしょうか。
例********************************
buf[0]:0xAA
buf[1]:0xBB
buf[2]:0xCC
の場合
0xAABBCCにまとめる。
**********************************
int data = 0x000000;
data = (buf[2] * 0x010000) + (buf[3] * 0x000100) + buf[4];
とやってみたのですが、おかしくなります。
どなたかご教授願います。
キャストしろや>787
>787
こういうことだ
BYTE buf[4];
buf[0] = 0xcc;
buf[1] = 0xbb;
buf[2] = 0xaa;
buf[3] = 0;
DWORD data = *(DWORD*)buf;
int data = 0x000000;
data = ((unsigned long)buf[0] * 0x010000) + ((unsigned long)buf[1] * 0x000100) + (unsigned long)buf[2];
とも
unsigned long datasize = 0L;
datasize = (unsigned long)buf[2];
datasize += (unsigned long)buf[1] << 8;
datasize += (unsigned long)buf[0] << 16;
ともやってみたんですが、やっぱりおかしくなります。
どこが間違っているのでしょうか?
だからキャストしろって>790
それと、インディアンで検索しとけ>790
>>786 「クラスTを要素に持つCArrayの宣言」が CArray< T, T& > array; なんですね。
だから「『クラスTを要素に持つCArray』のCArray」なら、
CArray< CArray< T, T& >, CArray< T, T& > > map; となる。
785をtypedefでわかりやすく書けば、
typedef CArray< cell_t, cell_t& > array_t;
typedef CArray< array_t, array_t& > array_of_array_t;
class map_t : public array_of_array_t { ... }
となるでしょう。
785で構造体(struct)にしたのは、特に意味ないです。
structはデフォルトで全メンバがpublicなだけで、それ以外はクラス(class)と同じと思ってください。
あとmap_tをarray_of_array_tから派生させたのは、
map_t自体のコンストラクタを定義したかったからで、
2次元配列だから特に必須ってわけではないです。
>789
DWORD data = 0x000000;
data = ((BYTE)buf[0] * 0x010000) + ((BYTE)buf[1] * 0x000100) + (BYTE)buf[2];
で
できました!
ありがとうございます!
デカルチャ。
CArray< CArray< T, T& >, CArray< T, T& > > からクラス派生出来るのはちょっとデカルチャでした。
本当にプログラマとして仕事できるかどうか心配になってきた(大学3年)
なんとか使えそうです、ありがとうございました。
796 :
デフォルトの名無しさん:01/11/15 10:59
>>794 data = buf[0]<<16 | buf[1]<<8 | buf[2];
の方がコーディング量少ないぞ(藁
union.............
>>786 なぜint型の配列ではいけないのか小一時間問い詰めたい
799 :
デフォルトの名無しさん:01/11/15 15:09
メールソフトのサンプルプログラムってどこかにありませんか?
>798
同じマスに色んな情報を詰め込みたいので、クラスを使いたい
map[2][3].cell = 1 ,map[2][3].character = player ←みたいな使い方で、、
マップはサイズ変更可能なので、できればベクターのほうが使いやすい
もしかしたらとんでもない勘違いしたかな?小一時間教えてくださいm(_ _)m
801 :
デフォルトの名無しさん:01/11/15 16:49
template<class T>
class GikoMap {
int x_;
int y_;
T *vec_;
public:
GikoMap(int x, int y) : x_(x), y_(y), vec_(new T[x*y]) {}
~GikoMap() { delete [] vec_; }
T &get(int x, int y) const { return vec_[y * y_ + x]; }
};
s/get/cell/
みなさんラジオボタンを使うとき(CButtonメンバ関数を使うとき)は
どうやってるのでしょうか
804 :
デフォルトの名無しさん:01/11/16 01:11
>>803 普通に1番目だけグループスタイルをつけてグループ化して、
整数型のDDX変数にしてる。
個々のラジオボタンを操作することはほとんどないけど、
もしやるならDDX変数を解さずに直接
GetDlgItem(ID_RADIO1)->SetCheck() とか。
805 :
デフォルトの名無しさん:01/11/16 01:59
CButton* radio1 = (CButton*)GetDlgItem(ID_RADIO1);
radio1->SetCheck(1);
というようなGetDlgItemの返り値をキャストして使うのは
状況によっては動かない場合があると聞いたのですがどうなんでしょう。
入門書によく載ってますが。
>>805 CButtonとCWndの継承関係から考えるに、それはだめじゃないの?
CButton* radio1 = (CButton*)GetDlgItem(ID_RADIO1);
((CWnd*)radio1)->SetCheck(1);
ならよいかも。というより、すなおに
CWnd* radio1 = GetDlgItem(ID_RADIO1);
radio1->SetCheck(1);
ではないか。
あ、SetCheckってCWndのメンバにないのか。
808 :
デフォルトの名無しさん:01/11/16 02:36
>CButtonとCWndの継承関係から考えるに、それはだめじゃないの?
でもMFCはそれを動くようにしてるそうです。
>CWnd* radio1 = GetDlgItem(ID_RADIO1);
>radio1->SetCheck(1);
SetCheck()はCWndのメンバでは無いのですが良いのでしょうか?
809 :
デフォルトの名無しさん:01/11/16 02:53
>>804 >普通に1番目だけグループスタイルをつけてグループ化して、
>整数型のDDX変数にしてる。
自分、わざわざ各ボタンでGetCheck、SetCheckしてました。
>でもMFCはそれを動くようにしてるそうです。
うがー確かに。
ソースを見るとCButtonにはメンバ変数がないようなので
(CButton*)を(CWnd*)にキャストしてもポインタがずれなくて大丈夫なのかな?
811 :
デフォルトの名無しさん:01/11/16 03:23
DDX変数で
UpdateData();
int n = m_num_radio;
で選択ボタンを判定したり
m_num_radio = 3;
UpdateData(FALSE);
で4番目のボタンを選択したりというのは定石??
>>806>>810 おめーえらそーに嘘教えてんじゃねーよ!!
>>805はダウンキャストの危険性についての話だろが!
CButtonはCWndをpublic継承してんだから、
CButtonをキャストなしにCWndと見なすのは全然問題ねーだろが!
>>805 C++のdynamic_castやstatic_cast、reinterpret_castについて調べみ。
いろいろ出てくるから。
>>805 Note that it's always safer to check for the validity of the results from GetDlgItem.
814 :
デフォルトの名無しさん:01/11/16 16:46
MFC ActiveX ControlWizardで生成したプロジェクトに
ダイアログを追加して、
その上にWeb Browserコントロールを載せているのですが
そうすると元のActiveX自体をコールできなくなってしまいます。
ちなみに、ActiveXでは無くMFC AppWizard(exe)などでやると
正常に動いてくれます。
どうしたらいいのでしょうか?
815 :
デフォルトの名無しさん:01/11/20 12:58
age
816 :
デフォルトの名無しさん:01/11/20 13:11
MFCなんて覚えても技術力は一切あがらないねぇハァ・・・・
VBでやるよりは困難が多いので時間は掛かるが上がると思う>技術力
818 :
デフォルトの名無しさん:01/11/20 17:30
MFCのスタティックライブラリを使ってビルドすると、
AfxLoadLibrary()、AfxFreeLibrary()
が使えないんだけど、どういうわけですか?
819 :
デフォルトの名無しさん:01/11/20 17:34
ロードしたりフリーする必要がないからなのでは?
>819
じゃ、APIの LoadLibraly、FreeLibraly使って問題ないわけですね?
ロードされる DLLでは、MFCの共有 DLL使ってるんです。で、
MSDNには、「グローバルなMFC の状態を破損するのを防ぎます」と
あるのが気になるんですが。このグローバルって...
821 :
デフォルトの名無しさん:01/11/20 17:52
あんまり詳しくないのですが、
自分はMFCスタティックで、
呼び出すDLLがMFCダイナミックだとどうなるんですかね?
リンケージがうまくいかないような気もするんですが。
>>821 はい。いかなくなります。スマートな解決方法は多分ありません。
>>821 自分も DLL な MFC を使うしかないと思われ。
逆は不可。
MFCを今までやっていたんですが、DirectXもやってみたくなりました。
それで少し聞きたいんですがMFCでDirectXを取り込むような形で使えますか?
使えるとしたらどんな形でどうやるんでしょうか??
825 :
デフォルトの名無しさん:01/11/21 00:40
>>823 逆は不可とは?
DLLをスタティックに出来るなら、自分がスタティックでもいいだろ?
826 :
デフォルトの名無しさん:01/11/21 00:43
質問。
Win2000でCOleDateTimeのGetCurrentTime();をやってみたんだけど
1899年12月30日になります。
なんで?
827 :
デフォルトの名無しさん:01/11/21 01:04
2000年問題と思われw
ごめんなさい。
使い方間違ってた。
COleDateTime today;
today.GetCurrentTime();ってやってたよ・・・
正しくは
today = COleDateTime::GetCurrentTime();だった。逝っとく。
829 :
デフォルトの名無しさん:01/11/21 22:36
標準のチェックボックスCCheckListBoxに対して、ビットマップパターンを
差し替えることってできますか?
ボタンだったら、CBitmapButtonでできるのですが・・・・
いつもお世話になってます、また馬鹿な質問しますがあまり怒らないで下さい(;´Д`)
SDIウインドウの下に(ステータスバーの上)に、エディットボックスを追加したいけどどうすればいいんですか?
RPGらしきもの作ってますがチャット機能も追加しょうと思って、入力できる場所を用意しないといけないが、
一々ダイアログを出してはあまり美しくないので、エンターキーを押すと下のほうにエディットボックスが出てくれると
いいなーと思って、、 宜しくおねがいします。
832 :
ネット初心者:01/11/24 10:43
チャットソフトにファイル転送の機能をつけたいのですが、なにか簡単な方法ありますか?
分かりやすいサンプルあればいいんですが、、VCのサンプル分かりにくいですね。
CSocketFileとCArchive使うまでは分かったが、なかなか実装できない。なにかヒントでも、、
>832
ファイルを開いてその内容をチャットと同じ方式で転送。
834 :
デフォルトの名無しさん:01/11/24 11:19
秀丸みたいにCRichEditCtrlにハイパーリンク付けられますか?
文字のサイズや色を変える事しかわからないっす。
厨房質問でスマソ
835 :
デフォルトの名無しさん:01/11/26 14:07
>>834 秀丸などのエディタは、RichEditは使ってないよ。
で、EM_AUTOURLDETECT
ってのがあるけど、Win2000限定かも
ひとつの同じコマンドボタンを一回、二回と押すごとに、線を表示させることは
できるのでしょうか?そのとき、前に表示された線はそのまま残していきたいのですが・・。
838 :
デフォルトの名無しさん:01/11/27 16:18
>>834 自分で文字列を抽出してリンク張れば出来る。
MFCでVBにある、Hex(number)のような、
10進数から16進数への変換関数はないでしょうか?
あるのでしたら、関数名だけでも結構ですので教えてください。
840 :
デフォルトの名無しさん:01/11/27 19:57
>>839 16進数字列にしたいの?
MFCは知らないけど、sprintf()を使えば?
str=sprintf("%X",num);
こんな感じ。
あ、numは整数値ね。
もし、10進数字列を16進数字列にしたいのなら、atoiやatolを使って数値にしておいてね。
str=sprintf("%X",atoi(dec));
>>842 おおっと、Perlと勘違いした(汗
sprintf(str,"%X",num);
sprintf(str,"%X",atoi(dec));
だね(汗
サンクス!!
>>845 なんとか出来そうっす。
ヒントサンクス
間違い>835サンクス
839です。
>>843さん
ありがとうございます。
sprintfでやってみます。
847 :
デフォルトの名無しさん:01/11/27 23:11
MFCならCStringのFormat()がありますよ。
CString strResult;
strResult.Format(_T("%X"), num);
こんなロジックのプログラムがあったんだが・・
MFCのダイアログベースのプログラムなんですが
1) CTestAppでTestMainという関数をスレッド使って呼び込む
2) CTestAppでCTestDlgのダイアログを表示
3) TestMainの関数内のfor(;;)で永久ループ
処理としてグローバルにある終了フラグを見続ける
TRUEならWM_CLOCEをPostして終了
4) CTestDlgのダイアログ内で終了ボタンを押したらグローバルにある終了フラグをTRUEにする
ある特定ファイルそ検索してて見つかったらなにか処理をするというプログラムなんですが
せっかくスレッドを作ってやってもその中で永久ループしてるので意味無しでした・・
おかげさまでCPU稼働率が常に100%な業務アプリです^^;
これって普通の作り方なんでしょうか?
違うと思いたい・・・
>>848 イベントオブジェクトでも使ったらちっとはマシになる?
その3が、終了フラグを見るためだけにループしてるなら、最悪。
マルチスレッドとか、それ以前の問題。
とっととイベントオブジェクト+WaitFor〜系API使え
>>848 それが普通かどうかはともかく、
ループの中に Sleep(0); を入れるだけで
一気に負荷が減ります。
やっぱりforでループさせといて終了フラグを待つなんてのは
かなーりボトルネックなってますよね。
CPUが複数あるんならいいんでない?
どうせあまってんだろ。
HDDもどうせATAだろうし(藁
ついでに監視スレッドの優先度も一個下げとけ。
だが二度とそんなクソプログラムは世に出すな
私に引き継がれたんだが、私で5人目だ・・・
考えてみれば私以外皆、MFC初心者か大学出の新卒が作った奴だった^^;
ループの前ではSetTimer使って、タイマー使用フラグを立ててるだけ・・
ループ中にファイル検索して見つかったらメイン処理を行う。
うーん、素直にWM_TIMER拾ったらファイル検索してメイン処理したほうがいいような・・
やっぱりC言語初心者のやつが作った物はこんなもんなんだろうか
Sleepは試しましたが駄目でしたね。
あと残念ながらCPUは一つしかつんでませんので。
HDDはATAでした。
まぁ、どうせその業務アプリしか動かないシステム構成になってるので
他アプリとの平行稼動しないから現時点ではさほど問題になっておりません。
>856
おまえは一体何を相談にきたのかと小一時間問いつめるYO!
愚痴ならプログラマ板いけや。
>857
うーん愚痴になってしまいましたねごめんなさい。
作り方についての意見を聞きたかったのですが。
やっぱり普通のやりかたではなかったという皆様の意見が聞けましたので・・
皆様どうもありがとうございました。
ついでにsage進行だったの気づかずにageてましたね。
雰囲気読めませんでした・・
今後気を付けます。
860 :
デフォルトの名無しさん:01/11/30 15:09
質問なのですが、
MFCでWebオブジェクトにあるWeb(test.htmとする)を表示して、
それに対してGetLocationName(またはURL)すると、当然test.htmが
取得できますが、ユーザー操作(リンククリック)によって
test.htmの中にあるリンクページ(link.htm)にジャンプしてから、
GetLocationNameすると、link.htmが得られそうなのに、
test.htmが戻ってきますね。
Webオブジェクトに現在表示されている最新のURLを取得する方法はありますか?
教えてください
861 :
デフォルトの名無しさん:01/12/01 02:33
ワーカースレッドを呼び出し元スレッドから終了させるために、フラグを使って
// ワーカースレッド内
if(*flg == 0)
return 0;
などとしていますが、
CInternetSession session;
session.OpenURL(・・・);
if(*flg == 0)
return 0;
などのようにフラグを判定する前に時間のかかる関数などを実行すると、
関数が返ってくるまで終了できません。
このような場合でもすぐにワーカースレッドを終了させるには
どうすればよいのでしょうか。
862 :
デフォルトの名無しさん:01/12/01 03:28
フォルダを開いた時に
名前、サイズ、種類等のデータが表示されますよね
ああいうのを作りたいのですが、MFCに用意されているのでしょうか?
Serializeがそうだと思うが・・・。
用意され過ぎていてどうやって動いてるのか判らん・・・・。
864 :
デフォルトの名無しさん:01/12/01 09:20
865 :
デフォルトの名無しさん:01/12/01 13:50
>>864 CInternetSessionを非同期で使えということですか?
セッション途中で通信を中止させるには具体的にどうすればよいのでしょう。
866 :
デフォルトの名無しさん:01/12/01 21:06
矢印キーが押されたのを
OnCharで検出できるのでしょうか?
つうか、そうゆう時はprint文かなんかでコード出す。
spy++使って調べろ
869 :
デフォルトの名無しさん:01/12/02 06:25
MetasequiaとかMayaとかでやっている
ツール起動時にタイトルウィンドウが表示される機能を
自分のツールに実装したいと思っています。
MFCでこれを実現するための便利な関数はあるのでしょうか?
どなたかご教授ください。よろしくお願いします。
>>869 起動してデータやファイルをロードしているときに
ウィンドウ一つ作って絵を表示してるだけちゃう…?
MFC にそれ専用の関数があるかは知らないな…。
スプラッシュあたりをキーワードにして調べればいろいろ
でてくると思うが。俺は詳しくないんでそれ以上はパス。
>>869 コンポーネントギャラリに入ってなかったっけ? >スプラッシュ
873 :
デフォルトの名無しさん:01/12/02 16:17
MFCでWebオブジェクトにあるWeb(test.htmとする)を表示して、
それに対してGetLocationName(またはURL)すると、当然test.htmが
取得できますが、ユーザー操作(リンククリック)によって
test.htmの中にあるリンクページ(link.htm)にジャンプしてから、
GetLocationNameすると、link.htmが得られそうなのに、
test.htmが戻ってきますね。
Webオブジェクトに現在表示されている最新のURLを取得する方法はありますか?
>>869 ダイアログ作成ー>絵を表示
起動処理
ダイアログ破棄
そのままです
874 :
デフォルトの名無しさん:01/12/03 22:37
WinAppとは別のスレッドからすべてのビューを更新するにはどうすればいいのでしょうか?
スレッドが違うとCWndなどは正常に動かないようなんで、Documentの
UpdateAllViews()を呼び出しても希望どうりの動作にはなりませんよね。
メインフレームにメッセージを送ってそのハンドラでUpdateAllViews()
を呼び出すようなコードを書かなければならないのでしょうか?
とりあえず聞くけどCWinThreadから派生してあげてる?
876 :
デフォルトの名無しさん:01/12/04 04:31
派生してあげてます。
877 :
デフォルトの名無しさん:01/12/04 10:03
質問です。
MFCでActiveXコントロールをActiveXコンテナにする方法を
教えてください。ActiveXコントロール上にActiveXコントロール
を貼り付けたいのです。
CDialogの上で、buttonとかlistboxは貼り付けて、
使うことができるんですが、コントロールギャラリで追加した
コントロールを使おうとすると起動中でエラーが出ちゃいます。
878 :
デフォルトの名無しさん:01/12/04 10:20
リソースエディタでダイアログにラジオボタンを配置。
そのボタンに対し、CButton::SetCheck
を使いたいのですが、どうすればよいのでしょう?
879 :
デフォルトの名無しさん:01/12/04 10:25
>> 878
ClassWizardで、メンバ変数を作りましょう。
グループ化もしなきゃ。
>>879 ありがとうございます。
グループ化っていうのは「プロパティ」→「グループ」のことですか?
881 :
デフォルトの名無しさん:01/12/04 11:54
そうですね。
882 :
SUMIO:01/12/04 13:50
質問なのですが、
CEditコントロールにエディタ(メモ帳など)で書いた文章を出力したい
のですが、なにかうまい方法はありますかねえ?
883 :
デフォルトの名無しさん:01/12/04 16:42
884 :
SUMIO:01/12/04 16:53
>>882 えっと、言葉が足りなかったのですが、
(メモ帳などの)ファイルから「開く」という形で
出力したいんですよ。
>>884 だから、「ファイルを開く」というイベントを受け取ったメソッドで、
ファイル読み込んでCEditに貼り付けするように組めばいいだろ。
それともCEditに「ファイルから読み込む」なんて機能が付いてると
思ってるのか?
886 :
デフォルトの名無しさん:01/12/04 17:30
ダイアログアプリならファイルをメモリに読み込んでSetSel, ReplaceSel(かWM_SETTEXT)
Doc-ViewならCDocument::OnOpenDocumentあたりでファイルからメモリに読み込む。
んでもってCView::OnUpdateあたりでDocumentからテキストを受け取ってSetSel, ReplaceSel(かWM_SETTEXT)
887 :
デフォルトの名無しさん:01/12/04 17:57
ボタンのラベルをビットマップにしたいんですけど
なにか方法はないですか?
CBitmapButton
あたりを使えばよいと思うんですけど
その通りだ
889 :
デフォルトの名無しさん:01/12/05 15:50
>>887
自己完結型Q&A
CIPAddressコントロールでカッコよくIPアドレスを入力させそう
などと考えてた(←過去形)者です。
・・・で、詰まったんですけんど、
リソースエディタでIPAddressボックスをダイアログに貼り付け、ClassWizardで
メンバ変数としてCIPAddessを割り当てました。そして実際に使おうとしたら
なぜかメンバ変数が使えません。基本クラスのメンバは使えるのですが・・・
なぜなんでしょう? 結局あきらめてCStringで代用しましたが、気になって
仕方ありません。
891 :
デフォルトの名無しさん:01/12/05 16:33
VC++相談スレにも書いたのですが・・・。
二重書き込み申し訳ないです。
COleDataSource・COleDropTargetでドラック&ドロップを行っています。
COleDropTargetを設定しているViewでドロップを行うとOnDropがコールされますが、
COleDropTargetを設定していないViewでドロップを行ったのはどーやって判断すればいいですか?
ファイルを転送する機能を実装したいですが、具体的にはどうすればいいでしょうか?
ヘルプ見ても、CSocket→CSocketFile→CArchiveのコンボしか書いてないが、これはオブジェクトを送る
方法ですよね?
チャットのように、CFileから一行読んで→送信→受信→ファイルに一行書き込む というやり方でいけるでしょうか?
ネット初心者教えてクンで申し訳ない。
あと、CSocketとCAsyncSocketはどこが違うのかヘルプ何回良く分かりません。だれか簡単に説明してくれると
うれしいですm(_ _)m
>>892 私も初心者なんであまり偉そうなことはいえませんが、解る範囲で。
>チャットのように、CFileから一行読んで→送信→受信→ファイルに一行書き込む というやり方でいけるでしょうか?
いけるとおもいますよ。普通にSendかSendtoで。CStringつかうと簡単です。
私はSendしか使ったことありませんが、Sendの中身はchar[]です。
CSocketとCAsyncSocketのちがいは色々あるみたいですけど、CSocketはブロッキングモード前提で、
CAsync(非同期の意味)の方は、基本的にコールバックでブロック制御するためのものみたいです。
・・・問題は解決されました。クラス名.(ドット)とやってもメンバが出なかったので使えないと勘違いしてました。
手入力したら普通にコンパイル通りました。(動作は確認してないけど)
でもおかしいですねー?afxcmn.hに記述されてますしね・・・??
895 :
デフォルトの名無しさん:01/12/06 15:00
ソケットにCArchiveを使うときには、フラッシュを忘れるな!
どうしても分からないので教えて頂ければ幸いです。
キーがchar*で、値がlongである場合の
CMapを利用して高速検索機能を実現したいと考えてます。
CMapのポインタはグローバルで初期処理でmdbから読み込んだ値をCMapのオブジェクトへと
格納したいのですが下記のやり方ですと検索が出来ないのです。
どなたか教えて頂けると幸いです。
ヘッダーには
CMap <const char*, LPCTSTR, long, long&> *pm;
クラスのコンストラクタではmdbからの読み込んだ件数をCntとして
pm = new CMap<const char*, LPCTSTR, long, long&> (Cnt);
値(char* a, long b)を入れる所では
pm->SetAt(a, b);
としています。この条件下で
クラス内の別関数内で検索を掛けるとキーに対応した値を持ってこないのです。
なにぶんまだ未熟ではあるので質問も的を得ていないかもしれません。
宜しくお願い致します。
char *の値を比較しても意味がないぞ。
当たり前だのクラッシュ
>>897 ちょっとウケタ>当たり前だの
まあいいや。
>>896 せいぜい文字列のハッシュ値をキーにするとか?
CMapのソース見たこと無いけど内部ではハッシュだったら
高速とか言っても無理だな。
std::mapとstd::string使えば?
std::mapと関数オブジェクトでもいいけど
900 :
デフォルトの名無しさん:01/12/07 03:32
Dialogで作成したMS WebBrowserオブジェクトから
CWebBrowser2クラスが作成されますが、
OnBeforeNavigateをオーバーライドすることができません。
オーバーライドするにはどうしたらよいのでしょうか?(CHtmlViewを用いずに)
教えてください
>899
どうもありがとうございます。早速やってみます。
902 :
デフォルトの名無しさん:01/12/07 13:22
>>900 >OnBeforeNavigateをオーバーライドすることができません
OnBeforeNavigate2のこと?CHtmlViewメンバだけど・・・?
>893
ありがとうございます、とりあえず実装してみます。
904 :
デフォルトの名無しさん:01/12/07 14:05
質問あります
integerの値を stringに変えることは可能なのでしょうか?
string get_string(int value)
このようなfunctionで intの値を stringで戻したいのですが
おねがいします
sprintf(str,"%d",value);
でいいのでは。
#include <string>
#include <sstream>
std::string get_string(int value)
{
std::stringstream ss;
ss << value;
return ss.str();
}
こんなの?
907 :
デフォルトの名無しさん:01/12/07 14:58
>>904 テンプレートクラスカヨ・・・
MFC限定のはずが・・・
CStringじゃ駄目なの?
908 :
デフォルトの名無しさん:01/12/07 15:03
ありがとうございました
まさにそれがやりたかったことです
string streamの 使い方がよく分からなかったので 助かりました
>>902 CHtmlViewメンバなのはわかっていますが、
Dialogで作成したMS WebBrowserオブジェクトから作成される
CWebBrowser2クラスには「OnBeforeNavigate2」が含まれていませんよね。
ヘッダで、
CWebBrowser2の親クラスをCWndではなく、CHtmlViewにしても
無事コンパイルはできたのですが、ブレークポイントを立てると、
オーバーライドした「OnBeforeNavigate2」は通過していません。
どなたか知恵をかしてください
>>904 get_string()じゃなくてto_string()とかにしてくれ
911 :
デフォルトの名無しさん:01/12/07 21:20
>>909 「Dialogで作成した」っていうのはダイアログにブラウザコントロールを貼り付けたって意味か?
OnBeforeNabigate2()はブラウザコントロールの親ウィンドウ(つまりダイアログ)につくるんじゃないの?
912 :
デフォルトの名無しさん:01/12/08 00:41
EXEファイルの小さいアイコンの変更の仕方を教えて下さい。
どうしてもMFCのアイコンになったまんまなのですが…。
914 :
デフォルトの名無しさん:01/12/08 00:52
>>913 上の方とはどこの事なんでしょうか?すいません、初心者で…
一つのアイコンファイルに複数のサイズの絵がおけることを知らないんだよ、きっと。
>>916 あぁそういうことか。
リソースエディタを開いて「32×32」とか
書いてあるコンボボックスを選択すればよいってことね。
918 :
デフォルトの名無しさん:01/12/08 06:20
(ノ゜O゜)ノおぉ〜!
上のコンボボックスの意味がやっとわかりました。
リソースのアイコンファイルの編集の時の話だったんですね。
僕はてっきりダイアログの設定でアイコンを指定すると
アイコンを自動的に小さく縮小しているものだと思ってました(汗)
小さいアイコンを作って解決出来ました。ありがとうございます。
>>911 まじですか?ブラウザコントロールの親(ダイアログ)となると
CDialogを継承しているだけなので、CHtmlViewの関数である
OnBeforeNabigate2()は呼び出せないと思いますが。
それとも、この親(ダイアログそのもの)をCHtmlViewから継承させる
ということですかね?
うーーん
>>919 いやそうじゃなくて ブラウザコントロールの「これからなびげーとするよ」メッセージのハンドラがOnBeforeNabivage2()ってことだろ。
CHtmlViewとブラウザコントロール(IWebBrowser2だっけか)の関係をよく考えてみろ。
921 :
デフォルトの名無しさん:01/12/08 22:30
ダブルクリックに対応するメッセージってあるんですか?
>>921 WM_LBUTTONDBLCLK
CWnd::OnLButtonDblClk
SDI+MFCで生成したウィンドウのテキストエリアにある
スクロールバーを消すにはどうしたらよいでしょうか?
924 :
デフォルトの名無しさん:01/12/08 23:15
モーダルレスダイアログでユーザーにデータ入力して、メインウインドウの内容を変えるようにしたいんですが、
モーダルレスダイアログはどうやって呼び出す側にメッセージ与えるんですか?
例えば元のクラスの関数呼びたいときとか、、
いまは呼び出す側のポインタも貰って使ってるが、そうすると相互includeしてたまにおかしくなる。
クラス宣言の前にincludeするクラスを書いておけば通るが、なんか危なそうなので、、
ああ、、(;´Д`)その手があったのか←逝って良し
closeのときメインの方にポストするんですか?
よーくわからないからヘルプ見てみる、、、
サンクス!
928 :
デフォルトの名無しさん:01/12/09 06:59
929 :
900,909:01/12/09 08:33
>>920 最近きづいたことなのですが、まず、自分のアプリはウィザードから
「ダイアログベース」として作成して、Webオブジェクトを貼り付けて
コントロールしています。
もしかして、CHtmlViewって、「SDI,MDI」ベースのアプリじゃないと
利用できないっぽくないですか?
こちらだと、問題なく、OnBeforeNavigate2はオーバーライドできますが・・・
問題点をまとめると、ダイアログベースのアプリで、あるWebオブジェクト
に対するCWebBrowser2クラスで「OnBeforeNavigate2」と同じことを
やりたいのです。
どなたかどうか知恵をかしてください
930 :
デフォルトの名無しさん:01/12/09 11:34
質問でございます。
WIN32(NT SP5)で、VC6のMFCで作成されたモジュールが実行されている環境です。
VCから起動している8つ程度のスレッドがおのおの
VBモジュールを呼び出し、そこで1個の名前付セマフォを取得しているような状態で、
VCから起動されたスレッドがランタイムエラーを出したときに、
VBが獲得した名前付セマフォが開放されず残っているようなのです。
そこでVBがつかんでいるセマフォを開放する手段はあるでしょうか?
ReleaseSemaphoreは自分がつかんでいるセマフォしか開放できないのでしょうか?
詳しい方教えてください。
>>929 だからぁ
ダイアログクラスで、ウエブブラウザコントロールの「これからナビゲートします」メッセージのハンドラを作ればいいだけじゃないの?
CHTMLViewクラスは内部にウェブブラウザコントロールを持っていて、「これからナビゲートします」メッセージのハンドラとしてOnBeforeNavigate2()が書かれているわけだろ?
君の場合はCHTMLViewがダイアログに変わるだけの話だろ?。
だまされたと思ってクラスウィザードで ダイアログクラスにウェブブラウザコントロールの「これからナビゲートします」メッセージのハンドラを作ってみてくれ。
それで何が不満なのか教えてくれ。
それともウェブブラウザコントロールの派生クラス自身でどうしてもやりたいのか?それならCHtmlViewの話がでてくるのはおかしくないか?
それとも俺はからかわれているだけなのか?
933 :
デフォルトの名無しさん:01/12/09 18:40
>CHtmlView
Viewはウィンドウではないのでメッセージはポストされません。
なのでダイアログの派生元をCHtmlViewにしてもメッセージハンドラは
呼ばれません。
934 :
900,909:01/12/09 21:24
>>931 いろいろありがとうございます。決してからかっていません。
それから、動作報告も必ずします。
これから試してみますが、933さんのような意見があると、ちょっと不安・・・
931さんを信じてみます
935 :
デフォルトの名無しさん:01/12/09 22:13
ダイアログベースのアプリケーションで
エディットコントロールなどを貼り付けてしまうと、
WM_CHARやWM_KEYDOWNなどがダイアログクラスで受け取れなく
なってしまいますけど、
いい対処法ってありますか?
936 :
900,909:01/12/10 03:29
>>931 やっぱり駄目でした
>だまされたと思ってクラスウィザードで ダイアログクラスに
>ウェブブラウザコントロールの「これからナビゲートします」メッセージの
>ハンドラを作ってみてくれ。
class CTestDlg : public CDialog
{
}
ダイアログクラスはこんな感じですが、
やはり、ClassWizardでは、OnBeforeNavigate2メッセージハンドラは
生成できないですね。
CDialogを継承するだけでは無理ぽい気もしますが・・・
かといって、
class CTestDlg : public CDialog,public CHtmlView
{
}
も駄目でしたし。
>やはり、ClassWizardでは、OnBeforeNavigate2メッセージハンドラは
>生成できないですね。
ClassWizardがないと、何もできない人のようですね:)
CHtmlViewくらい、改造してしまえばいいのに。
どうしてCHtmlViewのソースを見ないんだろう…
>>936 お前には本当にいらいらさせられるな。
ダイアログにブラウザコントロールを貼り付けるだろ。
クラスウィザードでダイアログのクラスを選択して オブジェクトIDでブラウザコントロールを選択するだろ。
そうするとそのブラウザコントロールのメッセージとしてBeforeNavigate2というのがあるだろ。
そのメッセージのハンドラを作れって二日前から延々言ってんだよ。
ダイアログベースのアプリなんだからCHtmlViewは全然関係ない。
メッセージハンドラを作るんだぞ!。オーバーライドじゃないぞ!。わかるか??
940 :
結構初心者:01/12/10 09:38
すいません。質問です。
文字列の内容を判断して実行させる、インタープリタもどきな機能をもたせたアプリケーションを
作りたいのですが、文字列の判断にif elseを連発して、いまいち見栄えがよくありません。
良い方法があったらどなたかレスお願いします。
941 :
デフォルトの名無しさん:01/12/10 09:42
>>940 yacc&lex
flex&bison
あたりをキーワードに何か探してみなさい
関数オブジェクトをstd::mapに入れる。見た目だけはいいぞ。トロいが。
943 :
デフォルトの名無しさん:01/12/10 10:01
>>939 なんつーか・・・なんだかんだで教えてやってるお前・・・優しいな
惚れちまいそうだ(ぽっ
>>941 >>942 ありがとうございいます。調べてみます。
ただ、トロいのには抵抗あります。トロさにもよりますが・・・。
>>944 多少のオーバーヘッドはあるにせよ、総当りでif elseを繰り返すよりは
比較回数減る分速いとは思うが、結局文字列比較繰り返してることには
変わらないからトロい。hash_mapならもうちょっと速いが標準じゃないし。
まぁ、yacc&lex使う根性がなくて、速度を求めないならアリって程度。
946 :
デフォルトの名無しさん:01/12/10 11:18
MFCならCMap?
>946
CMap!?
ザッツサウンドナイス(訳:根性なくてもできそうな響き♪)!!
それも見てみます。
948 :
デフォルトの名無しさん:01/12/10 14:22
VCでActiveXdll作った時、どこにコード書けばいいの?
>>942 遅いかどうか以前に、yacc と比べると受け付ける言語のクラスが限定されるのが痛いと思われ。
手で状態遷移を計算できる程度だと LR(1) なんて論外でしょ。
>>939 なるほど
うまくいきました。自分で間違って思い込みしていたところがあって、
ClassWizard立ち上げても見過ごしていました。
デバッガでも万事うまく通過しました!!
ありがとうございました
951 :
デフォルトの名無しさん:01/12/10 19:23
ちょっと失礼!
age。
952 :
デフォルトの名無しさん:01/12/10 21:59
どーせジサクジエンだろ?
俺は認めないぞ!
954 :
デフォルトの名無しさん:01/12/11 04:58
ちょっと教えてください
CBitmapButtonで管理している任意のビットマップボタンを
操作不能(マウスオンに反応せずノーマルボタン状態の画像が表示されたまま)
にするのはどうしたらよいのでしょうか?
EnableWindow(FALSE)だと、ボタンの画像すら描画されないですし。
>>954 EnableWindowでできますよ。
ボタンに割り当てる画像(操作不能時)のリソースIDを
"hogehogeX" にしてますよね?
956 :
デフォルトの名無しさん:01/12/11 09:30
>>1 そろそろ新スレたてるべきかと。
もういないかもしれないけど・・・
957 :
デフォルトの名無しさん:01/12/11 09:49
VC++6.0で
新規作成で
MFC AppWizard→ダイアログベース→***App
を選択したもので
始めに出来ているダイアログ画面の
親を適当なもの(ウィンドウクラス名をAとする)
に変更することなんかはできるのでしょうか?
このときダイアログのウィンドウクラス名をBに設定し
親のウィンドウクラス名をAにする方法もおしえてください
959 :
デフォルトの名無しさん:02/01/31 14:18
VC++6.0でNetscapeプラグイン形式のものを
IE6で動作させるためにActiveX化したいと
思っています。
機能は、ファイルアップロード、ダウンロードです。
お勧めの開発方法、書籍などあったら教えてください。
960 :
デフォルトの名無しさん:02/01/31 15:09
質問です。
あるスレッドを使ったプログラムをCOM化すると、
WaitForSingleObjectのところで応答が返ってきません。
どうやらスレッドが終了していないようなのですが、原因不明です。
COM化してない場合は問題なく動くのですが、
なにかご存知の方、いらっしゃいますでしょうか?