トップページ⇒tech
961コメント299KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
VisualC++相談室はすでにあるようですが
MFCに限ったお話をしましょう。

ルールを提案。
Qは高度なものからくだらないものまで何でもOK。

Aは「知ってるつもり君」、「えらそうに解説する人」お断りと
いうことで。
0002デフォルトの名無しさんNGNG
えらそうにスレ立てる人もお断りということで。
0003デフォルトの名無しさんNGNG
Q「MFCはなんでこんなにクソですか?」
0004デフォルトの名無しさんNGNG
>>3
教えてあげない。
0005デフォルトの名無しさんNGNG
>> 1
細かいルールとかは別にいらないんじゃない?

といいつつ質問
CStringの文字列の一部を別の文字で置き換えるのってどうやるの?
CString文字列をChar配列にコピーしてからstrncpyして
それをCStringに戻すってのはなんか汚いよね
他にいい方法知ってる人教えてください
0006デフォルトの名無しさんNGNG
>>5
CString::GetBufferでポインタを取得して、中をいじったあとCString::ReleaseBuffer。
0007デフォルトの名無しさんNGNG
「豆知識」
ReleaseBuffer()しないと別のCStringに代入できんし
GetLength()してもsizeは0のままなので要注意だ。
この2つはセットで使うようにしよう。
0008デフォルトの名無しさんNGNG
MFCって便利ですね。クソ面倒くさい登録作業とかやらなくていいし。
0009デフォルトの名無しさんNGNG
CSpinButtonCtrl の SetRange32() ででっかい範囲を設定できるのは
いいんだが、どうやってそこにでっかい値を設定するんだ?
SetPos()だとUD_MAXVAL(0x7FFF)までしか設定できんぞゴラァ!
SetPos32()はどこだゴラァ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0010デフォルトの名無しさんNGNG
 ∧∧  
(゜Д゜)<ハァ?
  ||
 ||_
  (________Э
   ||∴
   ||∵
    жж _
0011デフォルトの名無しさんNGNG
>>5
>CStringの文字列の一部を別の文字で置き換えるのってどうやるの?

効率悪いかも知れないけどCString::replace()ってのもあり。
0012デフォルトの名無しさんNGNG
MFCなんか覚えてもプログラマとしての実力はなにも伸びない
VC++をマスターしたつもりでもプログラマとしての実力はなにも変わっていない。
0013デフォルトの名無しさんNGNG
>12
でも楽だからいいじゃん。ね。C++で普通にWINのプログラムする方法知らないとよくわからないわけだし。
0014名無しさんNGNG
MFCはうまく使えばなんてこたないよ。
うまく扱えず落ちこぼれる人もいるようだけど。
現状、MSの仕事やるんなら、覚えておかないとダメだと思うよ。
0015デフォルトの名無しさんNGNG
びるだーを経験した後に MFC を触ると、インターフェースのクソさに
キれたくなる. ラジオボタンをビルダーなみに使いやすくしる!
0016>15NGNG
同意。
でもエディタがクソ。
0017デフォルトの名無しさんNGNG
漏れあんまMFC使わんからわからんのだけど、
std::stringじゃなくてCStringを使うメリットってなに?
やっぱオーバーヘッドを気にしての事?
0018デフォルトの名無しさんNGNG
>17
結合とか容易だからじゃない?
0019デフォルトの名無しさんNGNG
.NETではMFCってどうなるんだろ。
0020デフォルトの名無しさんNGNG
>>17
- MFC では CString を引数に取る関数が多い
- MFC の提供するシリアライズ機能が使える
- BSTR との変換やリソースから文字列を読み込むような Win32 固有の機能
 が実装されているので、便利。
0021デフォルトの名無しさんNGNG
>>20
そうそう。文字列クラスって、単体でどんなにがんばっても、
そのクラスを引数にして、値の受け渡しができないと意味が無いよね。
その点、MFCではWin32ではchar*とバッファサイズで
文字列を受け取る関数をほとんどCStringで受け取れるようにラップ
してあるから便利。
0022デフォルトの名無しさんNGNG
MFCを経験したあとにびるだーを触ると、機能の貧弱さに
キれたくなる。プッシュボタン型チェックボックスをVC++なみに使いやすくしる!
0023デフォルトの名無しさんNGNG
>>1
MFCって自体、ぼろくそに叩かれてこのスレ終了かと思っていたけど
結構順調な滑り出しですな。マターリマターリ
0024デフォルトの名無しさんNGNG
CDockBase(だっけ?)等の非公開クラスについて書いているページありませんか?
0025デフォルトの名無しさんNGNG
MFCで、メインフレームを起動時に最大化しても元に戻ってしまうバグ的仕様が解消されたのはいつですか?
0026デフォルトの名無しさんNGNG
>そうそう。文字列クラスって、単体でどんなにがんばっても、
>そのクラスを引数にして、値の受け渡しができないと意味が無いよね。

同感同感。過去、コアサービスがBSTRとstd::string、
表示用DLLがMFC-DLLでCString使用といったアプリ書く
ことになったんだが値の受け渡しはけっこう苦労したよう
に記憶している。
変換表みたいなの作ってないと、CString<->BSTRだけでも
あれ?これどうやって渡すんだっけかなんてことになる。
その後、_bstr_tなるマクロを知って、だいぶ楽になった。
0027デフォルトの名無しさんNGNG
>>そうそう。文字列クラスって、単体でどんなにがんばっても、
>>そのクラスを引数にして、値の受け渡しができないと意味が無いよね。
>同感同感。過去、コアサービスがBSTRとstd::string、
>表示用DLLがMFC-DLLでCString使用といったアプリ書く
>ことになったんだが値の受け渡しはけっこう苦労したよう

それはクラスライブラリというもののの問題点では。
関数ライブラリであれば複数組み合わせても違和感無いが、
クラスライブラリを複数にすると受け渡し時にコーディングが発生っていう。

MFC/ATL/.NETと増やすのやめて欲しい...と思ったが自分は余り関係無い。
0028デフォルトの名無しさんNGNG
CString に機能追加したくて継承してみたんだけど
=とか<とかオペレータ演算子が使えなくなってしまいました。
機能追加部分以外はCStringとまったく同じ動きにさせたいんだけど
どうやって書けばいいの?
教えてください
0029デフォルトの名無しさんNGNG
>>27
まあそれはわかるんだが現実問題として横たわっている。
ATL/COMで作ったNTサービスをWebインターフェースから
使う場合や、そのサービス自身の制御用プログラムを製造する
ときとか。全部ATLでやると開発工数かかったりPG限定されたりでモゴモゴ・・・
0030デフォルトの名無しさんNGNG
>>29
話が逸れるけど ATL 使えるプログラマって不足してるの?
0031デフォルトの名無しさんNGNG
>>30
NT/2000で常駐型のサービスというだけでATL/COMになるよ。
オレ自身業務系/ネットワーク系問わず監視サービス書いたり
することは少なくない。つーか最近そればっかり。
ただまあ、一般的かというとそうでもないから不足してのか?
と聞かれると判断つかないや。
外注あたってもスキル餅がめったにいないんだもの。
いても人月140+とか。オレの社内単価より高いぞゴラァ。
0032デフォルトの名無しさんNGNG
>6 >7 >11
ありがとー!
0033デフォルトの名無しさんNGNG
マップモードをMM_TEXT以外にしてから
ディスプレイに全角文字を表示させると
例)
pDC->TextOut(0, 0, "文字列");

正しく表示できません。
どうしたらうまくいくんでしょう?
0034デフォルトの名無しさんNGNG
age
0035デフォルトの名無しさんNGNG
ダイアログベースのMFCアプリで、ダイアログに張り付けた水平スクロールバーの位置がOnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)のnPosに入ってるらしいのですが、イマイチその辺の処理がわかりません。ヒントをください。
003635NGNG
あ、質問の意図がはっきりしてない。
スクロールバーにへPosに入ってる位置情報を設定するにはどうすれば良いのかということです・・・。
003735NGNG
あ、検索したらありました。
0038名無しさんNGNG
age
0039名無しさんNGNG
age
0040名無しさんNGNG
age
0041名無しさんNGNG
age
0042名無しさんNGNG
age
004335NGNG
と思って実行しましたが全然だめでした。マイクロソフトのサンプルコードだったのですが、ダメでした。
http://www.microsoft.com/japan/support/kb/articles/J020/6/52.htm
とにかくスクロールバーをマスターしたいです。お願いします。教えてください。
0044デフォルトの名無しさんNGNG
どこらへんがダメでした?
004535NGNG
とりあえず、スクロールバーの親ウインドウにint型の変数myScrollPosを追加して、親ウインドウのOnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)にサンプルコードをコピペしたのですが、ダメでした。
004635NGNG
ダメというのはつまりスクロールしないということです。
004735NGNG
あと、スクロールバーのメンバ変数にint型の変数(DDX?)を設定できるのですが、その変数はどうやって使うものなのでしょう。
004835NGNG
age
0049デフォルトの名無しさんNGNG
スクロールがうまく行っているMFCのサンプルコードでも拾ってこい>35
0050デフォルトの名無しさんNGNG
スクロールバーを離すと戻ってこそMFC(MS)
0051デフォルトの名無しさんNGNG
>>35
どうやって書いたらどのように動かないのか、それを示せって。
005251NGNG
>>35
あぁ、わかったよ
スクロールレンジが決まってないだけだろ。
0053デフォルトの名無しさんNGNG
>>47
DDX = ダイアログデータエクスチェンジ
たとえばint型DDX変数 m_nScroll がある場合
UpdateData(TRUE)を呼ぶことででスクロールバーの値を
m_nScrollに取得できる。
反対に、UpdateData(FALSE)でm_nScrollの値を
スクロールバーに反映できる。
DDX変数には値の上限、下限を設定できるDDVというものもあり
とっても便利&Heart
0054デフォルトの名無しさんNGNG
ハートが出ない・・(鬱
0055デフォルトの名無しさんNGNG
>>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);
}
005655NGNG
あ、ごめん、
TRACE消し忘れた。
消してね
005755NGNG
>>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);
}
005835NGNG
>57
駄目でした。ダイアログに貼り付けられたスクロールバーにレンジが設定できないみたいです。あとSetScrollPosでポジションも指定したのですが、位置が変わりませんでした。
SetScrollRange(IDC_SCROLLBAR1,0,10,TRUE)で、1番目の引数をNULLにするとダイアログの端に自動的にスクロールバーができますよね。
そのときはレンジが設定できました。ポジションも設定できたのですが、動かすと強制終了になってしまいました。
0059デフォルトの名無しさんNGNG
>>58
おいおい。
お前の言ってるSetScrollBarてのは、
1.::SetScrollRange
2.CWnd::SetScrollRange
3.CScrollBar::SetScrollRange
のどれだ?

少なくとも俺は第1引数にコントロールIDを取るようなSetScrollRangeの
オーバーロードを見たことがない。
まずAPIなりクラスメンバの使い方をきっちり調べれ!
ここで訊くのはそれからだ。
006035NGNG
>59
コードエディタでSetScrollRangeと入力し出てきた引数の型を適当に判断したのが間違いでした。
それから気づいてOnHScrollの引数の*pScrollPosでRangeを設定したらちゃんとできました。
本当に馬鹿で申し訳ない。どうもありがとうございました。
0061デフォルトの名無しさんNGNG
すいません。あるクラスから別のクラスのpublic変数にアクセスする方法がわかりません。いかんせんMFCが初めてなもので。MFCじゃなかったらわかるのですが。MFCのクラスの実体がどこにあるかわからないのです。
0062デフォルトの名無しさんNGNG
>>61
MFCでも何でも一緒だと思うが。

# Viewのインスタンスへのポインタの取り方がわからんとかそういうこと?
0063デフォルトの名無しさんNGNG
View?
聞いたことない単語ですが、アクセスしたい変数がるクラスのインスタンスがどこにあるのかわからないということです。
インスタンスの所在が不明なので、その変数を返す関数にもアクセスできないのです。
0064デフォルトの名無しさんNGNG
>View?
>聞いたことない単語ですが、
まじですか
0065デフォルトの名無しさんNGNG
>>63
具体的に、どういうクラスのインスタンスポインタが欲しいか
言ってください。
GetActiveViewとか、GetActiveDocument、AfxGetMainWnd、
GetDocument()、いろいろあるよ。
0066デフォルトの名無しさんNGNG
そういやあ、Afxってどういう意味?
アフロX?
0067デフォルトの名無しさんNGNG
>65
リソースエディタで生成したダイアログクラスです。
0068デフォルトの名無しさんNGNG
CXXXDialog dlg;
dlg.m_EDIT1.SetWindowText("逝ってよし");
dlg.m_EDIT2.SetWindowText("オマエモナー");
こういうことか?
ClassWizardでメンバ変数をCStringとかにしてんのかな。
メンバ変数作成するときに「値」じゃなくて「コントロール」
にすれ。つーかサンプルコードも読め。
006965NGNG
うっ、その場合には自分で作る必要があるでしょう。
CAboutDlg aboutDlg;
aboutDlg.DoModal();
みたいに。
0070デフォルトの名無しさんNGNG
変更が面倒なら
CEdit* ed = GetDigItem(IDC_EDIT1);
ed->SetWindowText("逝ってよし");
でもいいぞ。
0071デフォルトの名無しさんNGNG
65のアプリの画面はリソースエディタで作ったダイアログ
ベースのアプリつーこと?
0072デフォルトの名無しさんNGNG
頭が混乱してきました。すみません。
概ねこんな感じです。長文です。

まず、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の関数へのアクセス方法がわからないので駄目でした。
0073デフォルトの名無しさんNGNG
もうMFCは終わるのに熱心だね。
0074デフォルトの名無しさんNGNG
KFC
0075デフォルトの名無しさんNGNG
>>72
CMyDlg2の、どのインスタンスかを指定しないと代入できるわけがない。
CMyDlg3を実体化するときに、テキストを変更したいCMyDlg2のインスタンスを
渡してやればよい。
クラスとインスタンスの違いがわかってないように読める。
007665NGNG
CMyDlg2 md2;
md2.SetTextCaption(CString("AAA"));
md2.DoModal();
とか、こういう感じでいいと思うのだけど・・。
0077デフォルトの名無しさんNGNG
■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);
}
0078デフォルトの名無しさんNGNG
誤:CMyDlg2;;OnOK()
正:CMyDlg2::OnOK()
0079デフォルトの名無しさんNGNG
CStringってstrlenで調べるとちゃんとした値が出るのに、
GetLengthだとたまに変な値が帰ってくるのは何故?
特に400byteとか大きな文字列を入れているとき起こりやすいような。
0080デフォルトの名無しさんNGNG
>>79
GetLength()がNUL文字までの文字長を返すわけではないからです。
文字列バッファの前方に長さ等を保持しているんですが、詳細は
MFCのソースを読んでください。
008172NGNG
>75
その方法で解決できました。どうもありがとうございました。
0082名無しさんNGNG
VC++ってフリーソフトですか?
マイクロソフトのホームページでダウンロードできますか?
0083デフォルトの名無しさんNGNG
age
0084デフォルトの名無しさんNGNG
>83
買え
0085デフォルトの名無しさんNGNG
ダイアログベースアプリで、ENTER押しても終了しないようにするにはどうすればいいのでしょう。
0086デフォルトの名無しさんNGNG
>>85
デフォルトボタンを頃せ。
0087デフォルトの名無しさんNGNG
>86
殺しましたがENTERで終了してしまいます。
0088デフォルトの名無しさんNGNG
自クラスになんも処理しない
virtual void OnOK();を作ればOK。

ついでにID_OKでダイアログを終了するには
CDialog::OnOK()をよぶ。
0089デフォルトの名無しさんNGNG
>88
できました!ありがとうございました。
0090デフォルトの名無しさんNGNG
僕も質問があるのですがよろしいでしょうか???

VCを使ったプログラミングで、
マウスポインタが画面の端に移動したことを
感知するにはどうすればよいのでしょう?
ご存知の方がいましたら宜しくお願いします。
0091デフォルトの名無しさんNGNG
>>90
大麻でもセットしてGetCursorPosで常に監視とか、アイドル時に同様の方法で監視。
それぐらいしか思いつかん。
0092デフォルトの名無しさんNGNG
ウインドウメッセージ拾うんじゃダメ?
0093デフォルトの名無しさんNGNG
画面のマッピングモードをMM_TEXTから変更すると上手く円を描けません。
どうしたら上手く円を描画できるのでしょうか?
MM_TEXTだと普通に
  pDC->Ellipse(0,0,100,100);
で、円がかけるのですが
    pDC->SetMapMode(MM_TWIPS);
を上に挿入すると描けなくなってしまうんです。
0094デフォルトの名無しさんNGNG
>>90
やったことないけど、WM_MOUSEMOVEでWindowFromPoint()するのはどう?
0095デフォルトの名無しさんNGNG
>>93
MM_TWIPSでは下方向はマイナスですよ。
だから
pDC->Ellipse(0, 0, 100, -100);
が正解ですね。
0096デフォルトの名無しさんNGNG
ビュークラスのWM_MOUSEMOVEハンドラでチェックじゃダメ?
void CTestView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
CRect rectWindow;
GetWindowRect(rectWindow);

if(!rectWindow.PtInRect(point)){
TRACE("マウスがウィンドウの外に出ているよ\n");
}
CView::OnMouseMove(nFlags, point);
}
0097デフォルトの名無しさんNGNG
>>96
それちがう
009893NGNG
>>95
どうも有り難うございます。おかげで助かりました。
0099デフォルトの名無しさんNGNG
>>90
「画面の端」ってスクリーンでの端かウィンドウ単位の端かどっちよ?
0100デフォルトの名無しさんNGNG
>>90

GetCapture しといて WM_MOUSEMOVE で座標を確認したらいいよ
0101100NGNG
SetCaptureだったかも? 
0102遅レスですがNGNG
>>80
Thanks!
0103浮気者NGNG
DelphiでのApplication.Processmessagesや、VBでのDoEventsに対応するVC++のコードって何でしょうか。教えて欲しいです。
0104デフォルトの名無しさんNGNG
MFC:PumpMessage SDK:PeekMessageとかで自作>103
0105デフォルトの名無しさんNGNG
>>100
それじゃマウスのボタンを押している間しか有効でなかったような。
0106質問ですNGNG
はじめてMFCアプリつくってるのですが、
ダイアログベースで作成したアプリそのものを、
SetWindowRgnをつかって不定形ウィンドウにしたいのですが
どのように適用すればよいでしょうか?
教えてください
0107デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0108デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0109デフォルトの名無しさんNGNG
>>107
スレ違い。
ここは MFC 限定。
0110デフォルトの名無しさんNGNG
>>106
OnInitDialogのときにやれば?
0111こーすけNGNG
現在、Webブラウザに貼り付けたActiveXへファイルをドラッグ&ドロップ
してファイルのパスをリストに表示するOCXを作成中です。
ちなみに現在はドラッグ&ドロップしたらメッセージボックスが出るだけです^^;

つまっている点は、オーバーライドした以下の関数
OnDrop(COleDataObject* pDataObject,・・・)で
pDataObjectからどのようにドラッグドロップしたファイルのパスを取り出すか
が今だにわかりません。

おまけにテストコンテナ終了するたびにアプリケーションエラーでるし。。。
泣き入ってきました。
0112sageNGNG
MFCで保存先のフォルダを指定してプログラム内固定のファイル名
を使用し保存することって簡単に可能なのでしょうか?
フォルダダイアログクラスみたいなの。
0113デフォルトの名無しさんNGNG
>>111
KBのQ185572を参照せよ
http://support.microsoft.com/support/kb/articles/Q185/5/72.ASP?LN=JA&SD=SO&FR=0
0114デフォルトの名無しさんNGNG
どうも、いつも参考にさせてもらってます。
今度、SDIが二つ横に並ぶようなアプリを作ろうと思ってます。
この実現方法として次のうちのどれが一番よいでしょうか?
1.SDI+CFrameWndの継承クラス
2.SDI+SDI
3.SDIのアプリを2つ作って通信させる

2が一番よいのかもしれませんが、
DOC/VIEWを自前で自装するのって可能ですか?
0115デフォルトの名無しさんNGNG
意外に3が良いかも・・>>114
0116デフォルトの名無しさんNGNG
>>114
115に同意。プロセス間通信を使うのが手っ取り早い。
0117デフォルトの名無しさんNGNG
メニューは1個なの?
0118デフォルトの名無しさんNGNG
>>114
SplitterWndを使うのかな???
0119こーすけNGNG
>>113
ありがとうございます。無事に取得できました。
これってフォルダをドロップしたときは中身のファイル名が
だーっと出てくるんだ思ったんですが、違うんですね。。。
0120デフォルトの名無しさんNGNG
>>114
SDIは
App--FrameWnd--DocTemplate--Doc--View
が全て1対なので、Appに対して別フレームをもうひとつ作るのは無理(たぶん)
できるとしてもかなりマニアックなつくりになるので、
2アプリ作るか、親子関係を確定する設計にするか(1か3)のどちらかにしたほうがいいと思います。
0121114NGNG
みなさん、アドバイスありがとうございます。
今のところ、1の方法で始めています。
SplitterWndとは何でしょう?あとで調べてみます。
0122デフォルトの名無しさんNGNG
>>121
CSplitterWndクラス。エクスプローラで、ディレクトリ部分
と中身部分のウィンドウを分けるのに、中に縦棒を付けて
Viewを分割してる。
オレとしては121さんが何をしたいかよくわからないわけだけど・・・。
0123かなりの初心者NGNG
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" は未解決です
このようなエラーがでてしまいます。

原因はなにが考えられるでしょうか?
0124デフォルトの名無しさんNGNG
ライブラリが指定されていない。
0125うぉNGNG
>>124さんありがとうございます。フォルダにコピーしただけじゃ駄目なんですね!!
プロジェクト→設定→リンクタブ→オブジェクト・ライブラリモジュールにzlib.lib libpng.libを書きこむとリンカが動いてくれました!!
でもLINK : warning LNK4098: defaultlib "LIBCMT" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
という警告が出ますがこれは自力で解決してみます。
0126123-125NGNG
すみません。やっぱり教えてください。
ttp://www.mapletown.net/~nekora/soft/libpng.html
にあるように、静的ランタイムに設定すればいいと思っていたんですが、
やっぱり警告がでます…。
0127デフォルトの名無しさんNGNG
ふーん
0128126NGNG
自己レス。
ttp://www.mapletown.net/~nekora/soft/howto/libpng.html
URL間違い。訂正。
ねこらさんのmakefileでnmakeするとdll使う設定でも警告でません!
でもデバッグだと出ます。
0129sageNGNG
上の方の分割ってコトバは聞いて
MFCでフォルダ指定ダイアログが簡単に作成できました。
お騒がせしましたです。
最近なんか頭がまわらなくなってきたよーな。。。
0130初心者NGNG
MFCのプログラムをデスクトップに常駐(通常、右下配置のやつ)
させたいのですが、どうしたらよいのでしょうか?
教えてください
0131デフォルトの名無しさんNGNG
>>130
Shell_NotifyIcon() を使用
例えばこれ
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TaskTray.html
0132石田NGNG
130ですがありがとうございます>131さん
あなたとても親切!!

        石田兄弟
0133デフォルトの名無しさんNGNG
メニューの、淡色表示になっているIDR_AIUEOを、普通の表示に戻したいのですが、強制終了になってしまいます。
色々試したのですが、最終的に下のような変な形になりました。でも強制終了になります。
どうすればよいのでしょうか。

HMENU *m;
CMenu *cm;
*m=GetMenu((HWND)theApp.m_pMainWnd);
cm=(CMenu *)m;
cm->EnableMenuItem(IDR_AIUEO,MF_BYCOMMAND|MF_ENABLED);
0134デフォルトの名無しさんNGNG
CMenu::FromHandle使え。
0135デフォルトの名無しさんNGNG
やってみましたが強制終了してしまいます。どこが間違っているのでしょう。

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);
0136デフォルトの名無しさんNGNG
>>135
普通に、CApp 派生クラスか CDocument派生クラスに有効化したい
コマンドのUPDATE_UI ハンドラを書いて、pCmdUI->Enable()する
のはまずいのですか?
0137名無しNGNG
m_bAutoMenuEnable変数のセットは?
0138135NGNG
大事なことを言い忘れてました。
メニューの、淡色表示とは別のアイテムを押すと、淡色表示が元に戻るようにしたいのです。
すみません。
0139デフォルトの名無しさんNGNG
>>138
UPDATE_UI...じゃなかった、ON_UPDATE_COMMAND_UIハンドラを書く。
『Visual C++ プログラマーガイド』の「メッセージの処理とマッピング」を
参照してください。あとこれは蛇足ですが、僕はちゃんと適切なことを書いて
いますので信じておくのが吉です。
0140fujitaNGNG
インターネット関連のアプリ作りたいのですが、
よくありがちな
・指定したURLにブラウザを立ち上げてジャンプ
・指定したe-mailに送信するためにメールソフトを立ち上げ新規作成

は、どうやったらできるのでしょうか?
おしえてください。よろしくお願いします
0141デフォルトの名無しさんNGNG
>>140
ShellExecute(NULL,NULL,"http://www.2ch.net",NULL,NULL,SW_SHOWNORMAL);
0142デフォルトの名無しさんNGNG
メールは?>141
"mailto:〜@〜"
でいいんだっけ?
0143デフォルトの名無しさんNGNG
てゆうかメッセージマップって何?
0144デフォルトの名無しさんNGNG
「てゆうか」って何?どこに掛かるの?>>143
0145143NGNG
やっぱ終了。
0146デフォルトの名無しさんNGNG
>>145
「やっぱ」って?
なにがやっぱりなんですか?
0147135NGNG
>139
色々試した結果、WM_COMMANDをマップしてるところへ

CMenu *cm;
cm=GetMenu();
cm->EnableMenuItem(IDR_SAVEPROJECT,MF_ENABLED);

とやるとできました。最期までつきあってもらってどうもありがとうございました。
0148139NGNG
漏れはもっと最後までちゃんとつきあいたかったよ。
0149fujita(140)NGNG
thanks!!
>141
>142
0150デフォルトの名無しさんNGNG
WM_COMMAND_RANGEをクラスウィザードで追加する方法を教えて
ください
お願いします
0151デフォルトの名無しさんNGNG
>>150
ありません。お大事に。
0152150NGNG
>>151
教えてくれたっていいのに
0153デフォルトの名無しさんNGNG
>>152
無いものは教えられません。
0154デフォルトの名無しさんNGNG
他人が作った.DLLを勝手に使おうと思うんですけど、困りました。
.DLLはC++のクラスがエクスポートされているようで、
dependencywalker2.0で見ると、クラスのコンストラクタやらメンバ関数やら
引数や戻り値が見えました。
でもこれから先どうすればいいのかわかりません。
ふつうのCの関数は、LoadLibraryで.DLLをロードして
GetProcAddressで関数のアドレス調べて、呼ぶというのは知っています。
クラスをnewして、メンバ呼んで…ていうのは、どういう風に書くのでしょうか?
環境はVisualC++6.0です。なんとかかんとかお願いします。
0155152NGNG
>>153
何とかなりませんか?
0156デフォルトの名無しさんNGNG
>>155
どうにもなりません。手動で何とかしてください。
0157デフォルトの名無しさんNGNG
>>154
LoadLibrary後、インラインアセンブラで直接CALLするのでは?
0158デフォルトの名無しさんNGNG
>>156
ではせめてON_UPDATE_COMMAND_UI_RANGEをクラスウィザードで
追加する方法だけでも教えていただけませんか?
よろしくお願いします。
0159デフォルトの名無しさんNGNG
>>158
ありません。お大事に。
0160158NGNG
2チャンネルって冷たいね
0161デフォルトの名無しさんNGNG
冷たいとかじゃなくて無いもんは教えられない。
道具を使わずに空を飛ぶ方法を教えてくれるやつは、歴史的に見て詐欺師である
可能性が非常に高い。麻原彰行とかな。
0162デフォルトの名無しさんNGNG
プロポーショナル送りってどういうものなのでしょうか?
0163デフォルトの名無しさんNGNG
>>162
フォントに含まれるグリフに送り幅情報を関連づけているのがプロポーショナルフォント。
0164154NGNG
誰かほんとに教えてもらえませんか?
やはり簡単にはできないんですかねぇ…。
0165デフォルトの名無しさんNGNG
モードレスダイアログをnewでつくって、
ダイアログ自身にdeleteさせたいんだけど、
どのタイミングでdeleteさせたら良いですか?
0166デフォルトの名無しさんNGNG
>>164
無理です。素直に普通の方法でやってください。
0167デフォルトの名無しさんNGNG
>>165
ダイアログを消したいときにdeleteしてください
0168デフォルトの名無しさんNGNG
>>154
普通のDLLではないんじゃない?拡張DLLかCOM(ActiveX)のDLLかも。
0169デフォルトの名無しさんNGNG
>>158
手動でハンドラを追加しましょう。それほど難しい作業じゃないです。
0170デフォルトの名無しさんNGNG
背景の色を変えたいのですがどこでかえればいいのでしょうか。
普通ならウインドウクラス構造体の設定で背景を指定すれば
いいのですがMFCだとそれが隠されているのでちょっとわかりません。
お願いします。
0171デフォルトの名無しさんNGNG
>>170
別に隠されてないよ。
PreCreateWindowをオーバーロードするとか。

MDIメインフレームの壁紙だったら、OnCreateでm_hWndMDIClientを
サブクラス化。サブクラス化先のウィンドウはCWndから派生させて
メンバ変数として持たせておく。
0172デフォルトの名無しさんNGNG
>>165
自己レス
PostNcDestroyでdelete thisすれば良いみたい。
楽チン楽チン
0173      NGNG
ActiveXコントロールのプロパティーページについておたずねします。
ActiveXコントロールのプロパティとプロパティページのメンバをリンクさせたいのですが
うまくいきません。
コントロール側でm_hogeがあり、DoPropExchangeで永続化(PX_Long)
プロパティページがわで、DoPropExchangeで指定したプロパティ名で
おなじくDoDataExchangeでDDP_Radioで交換しています。
プロパティページ側はラジオボタンです。
0174デフォルトの名無しさんNGNG
>>154
ヘッダーとインポートライブラリがないと辛いと思う。
LoadLibraryは動的リンクなのでクラスのインスタンスをDLL内で宣言されていないと無理。(ってホントか)
0175デフォルトの名無しさんNGNG
>>154
適当な量のメモリを確保する。
dllからクラスのコンストラクタを関数としてGetProcAddressする。
さっき確保したメモリを引数として、コンストラクタを呼ぶ。
(呼び出し既約が異なるなら、アセンブラで実現する)
メンバ関数も、基本的に同様。thisをecxで取るような呼び出し形式で
なければ、第一引数をthisにして呼べばいい。
 個人的にはそこまでしたくはないが。
0176デフォルトの名無しさんNGNG
MFCによるウインドウズプログラミングに書いてあったのですが
ダイアログの中のコントロールへのCWndポインタをGetDlgItemで取得して
(CListBox*)GetDlgItem(IDD_LIST)のようにして使うのは未熟で危険と
書いてありました。ある種の状況ではまったく機能しないとも。
どのようなときに危険なのでしょうか?
0177デフォルトの名無しさんNGNG
>>176
返されるポインタが一時的なものである、ということを
理解していれば別に危険ではないよ。おそらくその本は
あまり良くない本だと思う。
0178176NGNG
>>177
取得したポインタを保存しといて使うのがよくないと言うことですね。
その本によればAttachを使ってその都度取得するか、DDXを使うべし、
とかいてありますが、なぜだめなのかがちゃんと書いてありませんでした。
この本Microsoft PressのやつなんですがMicrosoftと関係ないの
でしょうか。
0179176NGNG
>>177
お礼をわすれてました。
アリガトウございました。
0180デフォルトの名無しさんNGNG
プロパティーシートで適用ボタンが押されたときにどのページで押されたかが
わかる方法ってありますか?
0181デフォルトの名無しさんNGNG
CMapテンプレートを

CMap<CString,CString&,CPoint,CPoint&>

みたいに使うとだめだしされるのですがどうすればいいのでしょうか?
0182デフォルトの名無しさんNGNG
亀レスだけど...

>>164
できる/できないのレベルでいうと、それは「できます」。

ひとことで言うと、ヘッダと implib をいかにしてでっち上げるか、ということです...。

それでも不可能と思うなら、ハッカーを探しなさい。
0183デフォルトの名無しさんNGNG
>>182
それはできるといえるのだろーか?
自分でヘッダーとかを作ってもまともに動かない気がするが
0184182NGNG
>>183
まぁ、確かに「できる」とはいっても、いろいろあるな。
漏れは単にリンクする方法を聞いているのだと思った。

まともに動くかどうかは漏れには関係のないことだが、
その DLL の呼び出し方が、少なくとも機械語レベルで正しいようには、
作ることが「できる」。

それで動かなければ、使い方がおかしい。
0185デフォルトの名無しさんNGNG
そうだね。方法さえわかればできないわけはない。
ただし、方法を見つけるのが限りなく難しいだけ。
0186僕はあなたの分身ですNGNG
>>185
でもそんなことしているまに自分で同じ機能のプログラムを作った
ほうが早い気が...
0187154NGNG
たくさんのヒントありがとうございます。

>>174
インスタンスといえば、BC++のサイトにはクラスを
エクスポートするサンプルとして
newしたポインタを返す関数をエクスポートしていました。
今使いたいdllはそれらしきものがエクスポートされてません。

>>175
試してみます。

>>182-185
アセンブラがいるようだと私には難しいのですね…。

>>186
あるデバイスにアクセスするために使われているdllらしいのですが、
デバイスの仕様が公開されていないのです。
dllをみるとエクスポートされた関数の名前が
「いかにも」で呼び出しさえできれば簡単に使えそうだったので
なんとかしたいなぁと…。
0188>>187NGNG
まったく簡単じゃないですよ。
たぶん自分で作ったほうが早いかと
ヘッダーとlibがないのならあきらめるのが賢明かと
0189182NGNG
>>187
仮想メンバ関数を呼び出そうとしたら大変なことになるけど、
non-virtual なメンバ関数を呼び出すくらいなら、
アセンブリ言語の知識が無くても、なんとかなると思うよ。

ひとことで言うと、「ハッキング」ですね(正しい意味で)。

単にエクスポート名のデコレーションを解いてクラスの宣言をでっち上げ、
空っぽのメンバ関数を書いて、同名で同じ顔をしたハリボテの DLL を
作ればいいんだから。
で、その DLL をリンクしたときにできた .lib を使えばいい。

まぁ、だいたい、大筋はこんなもん。
細部で少々、調整する必要が出てくるかも知れないけど。

でも、もし、いま書いたことが「???」なら、
やっぱり近くのハッカーを探した方がいいかも(クラッカーじゃないよ)。
0190デフォルトの名無しさんNGNG
>>189
クラスの宣言を使える程度にでっち上げるのが難しいと思われ。
どういう構造かは逆アセンブルしなきゃわかんないだろうし。
0191ななしNGNG
>>181
誰も答えないようなので、私がやってみよう。・・・
ああエラーになるね。
CMap< CString, LPCTSTR, CPoint, CPoint& >とするのが正当だろう。
0192デフォルトの名無しさんNGNG
OSに制御を渡す方法ってどうやるの?

ボタンクリック時に多重ループの処理を行うのですが、一度クリックすると、
そのイベントが終了するまで他のイベントを受け付けません。
(キャンセルボタンが別にあるのにクリックしてもOK処理終了するまで反応なし)

//サンプル
void CTest::OnOK()
{
while( 1 ){
// 処理(特定の条件でbreak)
}
}

VBで比較して悪いけど DoEventsの変わりになるような関数。
while( 1 )
// 処理
DoEvents
Wend
0193デフォルトの名無しさんNGNG
>>192
スレッドを作れば良いのです
ワーカスレッドあたりをキーワードで捜すとサンプルも出てきます
OnOK
↓
スレッドを作成
↓
OnOKを抜ける
↓
イベント待機状態に戻る
0194182NGNG
>>190
インスタンスのサイズなんてテキトーに多めに確保して渡しとけばいいし、
ただメンバ関数を呼び出すだけなら、メンバ変数なんて知らなくていい。

その DLL をリンクしてメンバ関数を呼び出したいだけなら、
でっち上げるのは至極簡単なはず。

でも確かに「使える程度」ってのが、どの程度かにもよるよね。
それ次第では逆アセンブルが必要になる。

ただしそこまでくると完全に「リバースエンジニアリング」になってしまうので、
場合によっては法的な問題が生じることになる。
0195192NGNG
>>193
確かにそうすればできると思ってたけど、
手抜きしたかったんですよね。
VBでいうDoEventsの変わりとなりそうなのはないか……。

そもそも VBと比較した時点で駄目ですね。逝ってきます。
何はともあれありがとです〜。
0196デフォルトの名無しさんNGNG
CEditViewのフォントを変えるにはどうすればいいのでしょうか?
CEditViewの中でSetFontを使うとエラーがでるのですが
0197デフォルトの名無しさんNGNG
>>192
BCBには
Application->ProcessMessages();
があるなり
0198デフォルトの名無しさんNGNG
>>195
適当にGetMessageをはさむべし
0199154NGNG
DLLを勝手に使うの件ですが、出来ました。
本当にありがとうございます!

コンストラクタのアドレスを調べて呼び出して…という方法は
僕にはうまくできませんでした。

次に同じ形のクラスを作ってできあがったインポートライブラリを
使うという方法を試しましたがこれがうまく行きました。
DLLのすべての機能を使うのは引数の構造体とか
知らないとできないのでこれは大変そうですが、とりあえず
欲しい機能の物が作れそうです。

ありがとうございました。

それから、
今までVC++でアセンブラを使うには別のソフトを入れないと
ダメだと思いこんでいました。
MSDN見たらインラインアセンブラは使えると書いてあるじゃないですか。
アホでした。
まーアセンブラは結局私には使えなかったのでアホのままなのですが。
0200デフォルトの名無しさんNGNG
CEditで全文字数を取得する方法ってあるのでしょうか?
0201デフォルトの名無しさん NGNG
>>195
>VBでいうDoEventsの変わりとなりそうなのはないか

GetMessage,TranslateMessage,DispatchMessageを
DoEventsの代わりに埋め込めばOK!
0202デフォルトの名無しさんNGNG
>>9
SendMassge(hWnd, UDM_SETPOS32, (WPARAM)0, (LPARAM)(INT)0x7FFFFFFF);
0203182NGNG
>>199
よかったね。 (^o^)/

> 次に同じ形のクラスを作ってできあがったインポートライブラリを
> 使うという方法を試しましたがこれがうまく行きました。
0204デフォルトの名無しさんNGNG
>>202
遅すぎねーか?
0205202NGNG
>>204
遅すぎです。
0206192=195NGNG
>>197
記憶の隅にでも置いておく。

>>198
>>201
情報サンクス。
これを求めていたのだよ。
0207デフォルトの名無しさんNGNG
CToolBarを継承するにはどうすればいいのでしょうか?
0208208NGNG
完全に手作業しないといけないのでしょうか?
0209デフォルトの名無しさんNGNG
generic CWndから継承させといて、適当に手で CWnd -> CToolBarと
直せば?
0210デフォルトの名無しさんNGNG
MFC超初心者です。
MFCのキー入力はわかるのですが、ウェイトの設定方法がよくわからないです。
どなたかスロットゲームのソースを頂けないでしょうか?
スロットゲームのソースを見れば本当によく理解でき、勉強できると思うんです。
本当にめんどくさいこと書いて恐縮なのですが、どうかよろしくお願いします。
0211デフォルトの名無しさんNGNG
>>210
ここに逝けばわかるぞ(藁
http://piza.2ch.net/test/read.cgi?bbs=tech&key=992508442
0212デフォルトの名無しさんNGNG
ファイルからbmpファイルを読みこんだものを
CBitmapクラスに取り込む方法を教えてください
(リソースのビットマップからなら楽なんですが)
よろしくお願いします
0213デフォルトの名無しさんNGNG
>>212
CreateDIBSectionとか。
0214デフォルトの名無しさんNGNG
LoadImage & Attach
>212
0215デフォルトの名無しさんNGNG
>>212
自分で解析せーや
0216デフォルトの名無しさんNGNG
>>212
自分で解析せーや
0217デフォルトの名無しさんNGNG
そんなことをいいだしたら、この手のスレの意義がなくなる
Q&A系ボードにそういうこと書くやつって必ずいるんだよな〜
>>215
0218215NGNG
DDBやDIBを解析するのは基本だと思うんだが....
0219デフォルトの名無しさんNGNG
>>215
書き方が悪いんだろ、アンサーになってないしな。
>>212
BitmapFileHeader,BitmapInfo,BitmapInfoHeaderをヘルプで調べてみ。
0220↑変なまとめ方NGNG
CBitmap はDDBです。よって214に回答されてます。
DIBとして無理やり使用したければ
http://www.microsoft.com/japan/developer/library/vcsample/_sample_mfc_diblook.htm
の ReadDIBFile() をパクッてちょうだい。
0221↑NGNG
>>212
0222デフォルトの名無しさんNGNG
>>212
CBrush::CreateDIBPatternBrush
が簡単だったり・・・・
0223212ですNGNG
ありがとうございました
あっさりと214のキーワードを調べれば
できました、おさわがせしました
0224デフォルトの名無しさんNGNG
>>223
それで終わらせずDDBやDIBを勉強するように
0225デフォルトの名無しさんNGNG
bmpからgifに変換する方法をしりたいのですが
0226デフォルトの名無しさんNGNG
MS Web Browserオブジェクトを用いて表示させたブラウザ画面の
イメージをCBitmapに取り込みたいのですが。
ただし、そのウィンドウ&ブラウザ画面は非表示のままで。
(すなわち、ダイアログウィンドウは不要なのですが、
MS Web Browserオブジェクトを貼り付ける都合上、作成)

何か方法はないでしょうか?
0227デフォルトの名無しさんNGNG
>>225
UNISYS(本社)に訊いてみれば?
0228デフォルトの名無しさんNGNG
>>224
くどすぎる説明は単なる自慰です
0229デフォルトの名無しさんNGNG
>>226
別のスレで IViewObject 経由でやれば、って返事したつもりだけど。
別の人ならごめん。
0230224NGNG
>>228
説明じゃなくて指針を与えているだけです。
0231デフォルトの名無しさんNGNG
コード読んでDIB の読み方勉強するより、LoadImage で DIB 読んで、
GetObject で DIBSECTION 取り出すって方法の方が有効じゃないかな。
いや、有効かどうかはしらんが僕の指針はこうだ。ビットマップ本体と
ビットマップヘッダの両方を管理せずに HBITMAP だけで済むし、HBITMAP
としても DIB としても使いやすい。
0232結構わがままやねNGNG
>>230
前レスにとっくに書いてあることです。
0233デフォルトの名無しさんNGNG
MFCがらみはどうも粘着しますね。
0234デフォルトの名無しさんNGNG
型付きポインタの配列(Scribbleチュートリアルの
CTypedPtrList<CObject,CStroke*>など)を、あるクラスの
メンバ変数として持ちたい時、宣言はどのようにしたら良いのでしょう?
CTypedPtrListは別クラスで代入されて、それらを値か参照できるよう
持つようにしたいのですが。
参照で持とうとしたのですが、初期化の方法がよくわかりません。
0235デフォルトの名無しさんNGNG
>>234
Scribble ってなんだっけ、サンプル?

こんな感じではアカンの?
-----------------------------------
#include <afxtempl.h>
class Honya {
public:
Honya(CTypedPtrList<CObject,CStroke*>& list):m_list(list) {}
private:
CTypedPtrList<CObject,CStroke*>& m_list;
};
-----------------------------------
0236234NGNG
>>235
ありがとうございます。結局ポインタ使ってで何とか
解決しました…が、こんな方法で初期化できるんですね(;゚Д゚)
勉強になります。
あ、Scribbleってのは仰るとおりVC++ チュートリアルにあるサンプルっす。
0237質問ですNGNG
プログラムでテキスト形式の初期設定ファイルを読みこみたいのです
たとえば
BG = "BMP/BACK.BMP",20,300
などのような簡単なファイル名や座標をテキストで列挙したものを
バッファに読みこんで、適切にそれを読みこんで
ファイル名部分はCSringのデータ、座標部分はINTデータなどに
セットしたいのです。

まとめると、文字列を解析して、数値変換などするクラス、ライブラリとか
簡単な方法ってあるでしょうか?
(もちろん上記程度なら自分で書くこともできるでしょうが・・)
0238デフォルトの名無しさんNGNG
>>237
””で囲まれていると文字列でそれ以外が数字ですか?
そんなクラスやライブラリは聞いたことがないので
捜すより自作した方が早いと思うよ.
0239237ですNGNG
要するに、そのアプリ専用のコンフィグファイルの解析といった
感じです
Windowsフォルダにあるiniファイルみたいなのと
同じ感じです
0240デフォルトの名無しさんNGNG
>>237
GetPrivateProfileString()でも使え
0241デフォルトの名無しさんNGNG
>>237
lex
0242デフォルトの名無しさんNGNG
>>237, 240
GetPrivateProfileStringはWin9X系だと64Kの制限がある
で、scanfは使いたくないから、
それくらいだったら自作の方が速いし、
カンマ区切りくらいの文字列解析だったら、標準関数である。
strtokとか。
0243デフォルトの名無しさんNGNG
>>242
> GetPrivateProfileStringはWin9X系だと64Kの制限がある
それは間違い。32767 バイトが正しい。

65536 バイトの制限…ってのは、Windows 95 における
ひとつのレジストリキーの大きさでしょ?
0244デフォルトの名無しさんNGNG
質問です!!
CBitmapのLoadImageと同じような感覚で
JPGファイルをファイルから読み込めるクラスないでしょうか?

できれば、CBitmapのサブクラスで、内部的にbmpに変換してくれるのが
ベストです。
どうか教えてください
0245デフォルトの名無しさんNGNG
>>244
CBitmap派生をさせて作れば目的達成。
>質問です!!
鬱陶しいからエクスクラメーションマークを連発するな!!
0246デフォルトの名無しさんNGNG
>>245
おまえもな!!
0247デフォルトの名無しさんNGNG
>>247
おれもな!!!!
0248デフォルトの名無しさんNGNG
>>245
んなもんわかってんだよ!!
そのライブラリはないかどーか、きいとんじゃこらぁぁぁ
0249デフォルトの名無しさんNGNG
無いです。
0250244NGNG
同じ質問で、JPGはあきらめてPNGの場合の
解決法を教えてください
せっぱつまっています、よろしくお願いします
0251デフォルトの名無しさんNGNG
JPGって
0252デフォルトの名無しさんNGNG
jpeg でゆくなら Intel performance library のを使うか、
IJG のソースを使うかすると良いのでは。PNG なら libpng
でも使ってみては?

google ででも検索して入手してね。
もう二度と同じ質問はしないでね。
0253デフォルトの名無しさんNGNG
相談です。

CViewにTabCtrlを貼り付けようとしています。

TabCtrlのCreate成功してInsertItemも成功しているのに
TagCtrlが表示されません。

なぜでしょう。なにかヒントないでしょうか。
0254デフォルトの名無しさんNGNG
ありがとうございました、また何かあれば
質問させていただきます!!
>>252
0255デフォルトの名無しさんNGNG
そんなことしなくてもJPEG読み込みAPIがあるのに。
別にライブラリ拾ってきても出来るけどさ。
0256デフォルトの名無しさんNGNG
>>255
シッ!
みんなわかってて黙ってるんだから言っちゃダメだよ(w
0257デフォルトNGNG
MFC使うのってC++勉強してからの方がいいすか?
ある程度クラスとかは理解してんだけど…
0258OleLoadPictureNGNG
初心者たたきするやつは、最低>256
0259デフォルトの名無しさんNGNG
MFC使いながらでもC++の勉強はできるよ。
0260デフォルトの名無しさんNGNG
>>258
叩かれてるのはただの初心者じゃないということに注意せよ。
初心者なら何をやっても許されるわけではない。
0261デフォルトの名無しさんNGNG
俺は翔泳社のVC++シリーズ3巻をやったよ。
1)API
2)C++
3)MFC
0262デフォルトの名無しさんNGNG
えらいねー
ヨシヨシ(ナデナデ、、顔文字が使えない)
>>261
0263261NGNG
>>262
?
0264254NGNG
まじでお願いしますよ。
APIの名前だけでいいので教えてください。
0265デフォルトの名無しさん NGNG
>>264
ただの初心者じゃないってどういうことですか。
0266デフォルトの名無しさんNGNG
>>264
もう書いてあるよ。これでわかんなかったらあきらめろよ。
みんなお前から金もらってるわけじゃないんだからさぁ。
0267デフォルトの名無しさんNGNG
>>265
マルチポストの超教えてクン
0268デフォルトの名無しさんNGNG
OldLoadPictureを検索されてみてはいかがですか?
>>244
>>264
サンプルも結構簡単にみつかりますよ
またわからないことがあれば遠慮なくかいてくださいね
0269デフォルトの名無しさんNGNG
>>268
お前も死んでくれ。
0270デフォルトの名無しさんNGNG
OilLardPorcineを検索されてみてはいかがですか?
>>244
>>264
サンプルも結構簡単にみつかりますよ
またわからないことがあれば遠慮なくかいてくださいね
0271デフォルトの名無しさんNGNG
プロセス間通信がよくわかるいい本ってありませんか?
0272考えられることNGNG
>>253
イ)Z順の位置が下
ロ)サイズが過小
ハ)位置が表意範囲外
二)SW_HIDE
ホ)TabCtrl使うならFormViewにして下さい
0273デフォルトの名無しさんNGNG
1 名前:GD素人 投稿日:2001/06/28(木) 16:35
初めて、書きこみします。
GD素人なので、教えて下さい。
GDグラフィックスでイメージは作成できたのですが、それに日本語
文字列をGD::Image::stringで書こうとすると、文字が化けます。
やはり、日本語は、サポートされていないのでしょうか?
何か、他に方法はあるのでしょうか?
どうしても、図形上に日本語を書きたいのです。
よろしく、お願いします。
0274デフォルトの名無しさんNGNG
GD::Image::stringって何?
0275デフォルトの名無しさんNGNG
>>274
ゴールデンウィーク
0276名無しNGNG
http://www.boutell.com/gd/
この辺かな。私はもちろん回答を知らない。
0277デフォルトの名無しさんNGNG
>>274
ジーディーのイメージのストリング
0278女の子NGNG
エディットボックスのバックカラーを変えたいのですが
どうすれば、いいですか?
0279デフォルトの名無しさんNGNG
ビットマップを保存するにはどうすればいいんでしょうか?
0280デフォルトの名無しさんNGNG
その、保存すべきビットマップは、どこに、どういう形式で
存在しているのかを言え。まずはそれからだ。
0281↑NGNG
それを言われても俺ならまだワカラン
0282デフォルトの名無しさんNGNG
ALT+F4でOK
>279
0283デフォルトの名無しさんNGNG
>>282
ALT+PrintScreenじゃないの?
0284デフォルトの名無しさんNGNG
>>283
PrintScreenだけでオーケーだよ。
ALT + F4 はそのアプリを終了させます。
0285デフォルトの名無しさんNGNG
PrintScreenだけだとデスクトップ全体がコピーされるから
ALT+PrintScreenの方がいいよ。
0286284NGNG
>>285
知らなかった。
あいやー、勉強になったじょー
0287デフォルトの名無しさんNGNG
質問です
ダイアログでWeb BrowserオブジェクトでIEのWebページを表示できますが、
これを画面に表示しないで、ビットマップイメージを取得する方法
ありますか?
教えてください
0288デフォルトの名無しさんNGNG
質問があります。
エクスプローラが開いているフォルダの絶対パスを
プログラム中で取得する方法ってありますか?

ご存知の方がいましたら宜しくお願いします。
0289デフォルトの名無しさんNGNG
質問です。
MFCは、メンバ変数をpublicにしている部分がたくさんあるのですが、
MFCの設計者はオブジェクト指向を理解しているのですか?
答えられる人いますか?
0290デフォルトの名無しさんNGNG
MFCはWin32APIを「カプセル化」したクラスライブラリです。以上。
0291デフォルトの名無しさんNGNG
なんでもかんでもprivateにするのがオブジェクト指向じゃないぞ。
部品や物としてより正確に設計したり使いやすくするために
メンバ変数をpublicにすることはある。
0292デフォルトの名無しさんNGNG
>>291
しません。
更新権限&参照権限を分けることができるだけでも有用なので、
常にメンバ変数はprivateがデフォルトです。
0293デフォルトの名無しさんNGNG
>>292
クラスライブラリがオブジェクト指向型設計を踏襲する必要はないんじゃないの?

>>289
あれは別にオブジェクト指向で作っているわけじゃないよ。
C++ == OOPではない。
でも、CObjectから派生してるんじゃないかというのは、もっともな意見だ。
0294デフォルトの名無しさんNGNG
>>292
んなアホな
0295デフォルトの名無しさんNGNG
>>292
継承って知ってるか?
0296デフォルトの名無しさんNGNG
>>295
しってます。
メンバアクセスは、自身のメンバに対してもsetter・getter
でアクセスがデフォルトです。
0297デフォルトの名無しさんNGNG
privateメンバが継承されないのは知らないらしい…
0298デフォルトの名無しさんNGNG
理想を突き詰めすぎたオブジェクト指向プロジェクトは必ず破綻します。
0299デフォルトの名無しさんNGNG
MFCについて言えば、メンバがpublicになっているのは非常に合理的な
理由があるんだがね。
MFCを使い倒せるようになった後で考えてみな。
それらがみんな隠されていたらと思うとぞっとするよ。
APIとMFCが同時に更新されるならともかく。
0300デフォルトの名無しさんNGNG
>297
基底クラスにセットゲット作っとけって言ってんでしょ多分
0301デフォルトの名無しさんNGNG
>>300
じゃあCFileとその派生クラスみたいな例だと、派生クラスごとに
セットゲットはおろかハンドルを保存するメンバ変数までprivateに
実装しろってか。
ReadとかWriteとかの操作はAPI上では全く同じなのに、セットゲット
の手段が違うために全部再実装しなきゃいけなくなるねぇ。
0302デフォルトの名無しさんNGNG
>>301
俺に怒るな
俺はお前派
0303デフォルトの名無しさんNGNG
CFileはHFILEを透過的に使うためのクラスだからねえ。

あれをどう見れば、オブジェクト指向にみれるんだろう。
やっぱ、CObjectから派生してるから?
0304300,302NGNG
なんか危険のにおい。。
MFCがらみはどうも・・・
0305やばいよやばいよNGNG
誰かプログラミングの相談入れてちょ
0306デフォルトの名無しさんNGNG
じゃあ、今気づいてるMFCのバグ教えて。
0307デフォルトの名無しさんNGNG
MFCにおいてはバグは存在しません。全て仕様です


こーやってだんだんアンチ側になっちまうんだよな
もやめとこ
0308デフォルトの名無しさんNGNG
CString::Remove(TCHAR ch)
バグってるよね。MBCSだと。

バグとわかってれば、回避も出来る。
DLLがOSに始めっからはいってるというのは利点だと思うので
有効利用しよう。

ほかには?
0309デフォルトの名無しさんNGNG
CSocketなんだけど、Acceptしてやるのに新しいCSocketがいるじゃない?
あれって何でなの?
よく分からずに使ってる厨坊です・・・
0310デフォルトの名無しさんNGNG
面白いけど別スレでできりゃいいね。
荒れんよ
0311301NGNG
>>302
了解。怒ってるように見えたらすまん。>>297に対する揶揄だ。
0312↑NGNG
>308 他
0313312(ほんとにすまねえ)NGNG
↑は310を指してます。
0314デフォルトの名無しさんNGNG
同じC++のクラスライブラリなのに、ボーランドのOWLは
MFCに比べて遙かに上手にカプセル化してるよ。
もっとも、今となってはかなりマイナー化してるが。
0315デフォルトの名無しさんNGNG
>>314
何故今マイナー化しているか考えたことはあるか?
OSが先にバージョンアップされたら新しいOSの機能が何一つ
使えなくなるからだ。
隠蔽すれば当然APIに対する自由度は下がる。
0316デフォルトの名無しさんNGNG
「MFCインターナル」というMFCの内部実装解説本があるんだが、そこに
MFC設計者のコメントがあって

「最初はOWLみたいな(とは書いてなかったが)抽象的なライブラリに
するつもりだったんだけど〜、実際作ってみたら遅くて使い物になら
なかったし〜、細かい事できなくて不便だったんで〜、それ捨てて
利便性追求型の今のMFCの形で作り直したんだよ〜」

とか書いてあった。まぁ当時のCPUパワーとか考えるとわからなくも
ないが、CPUパワーが十分になった現在では、醜い設計がきわきわに
目立つようになったよなー
0317デフォルトの名無しさんNGNG
>316
言い訳にしか聞こえない
0318デフォルトの名無しさんNGNG
メンバのpublic化ってのは僕の中では
「カプセル化」に反する内容だと思ってます。(一般的には、ですが。)
例えば、代表的なメンバ、m_widthとかを作ったとき、
widthの設定 : m_width = n;
widthの取得 : n = m_width;
という方法でOKなら問題ないのですが、ウインドウとかだと
設定はsetWidth()とかにする必要があるはずです。
「ウインドウの幅を変更する」にはメンバの更新以外にも
様々な処理が必要です。
また、将来的にm_widthと同時に、m_lengthを内部的に
合わせなければならなくなったときとか、メンバを直接
いじるのは非常に困ると思います。

ならばsetWidth()、getWidth()というメソッドでやりとり
するのが正しいし、将来的にも「幅の設定、取得」という
意味での予約ができるため、「カプセル化」というのは
このようにすべきではないか、というのが経験上の鉄則です。

オーバーヘッドが気になるならば、この程度のものは
インライン関数にしてしまえばいいし、メンバはあくまで
内部で処理、確実に意味を持ったアクセスはメソッドに
するべきでしょう。
0319デフォルトの名無しさんNGNG
MFCは、ウインドウハンドルを公開メンバにしてあるのですが
m_hWndを簡単に書きかえられてしまうというのは盲点でした。
ためしに、ダイアログのOnInitDialog()のなかに、
m_hWnd = NULL;
とやってみましたが、見事に落ちました。
当然、ウィンドウの外部からもこれをやってしまう可能性があるわけですから、
「MFC恐るべし」って感じですね。なるほど、勉強になりました。
0320デフォルトの名無しさんNGNG
>>318
java厨発見
0321デフォルトの名無しさんNGNG
べつにいーんじゃないのー
漏れはprivateに入れるべきだと思うよ。

MFCはMFCでいいと思うけど普通publicには入れないでしょう?
0322321NGNG
漏れのWin用俺様ライブラリは

private:
  HWND m_hWnd;
protected:
  HWND  SetHwnd();
public:
  HWND GetHwnd() const;
0323デフォルトの名無しさんNGNG
>>318
C++で getWidth, setWidth はやめてくれ。
頭おかしいとしか思えないぞ、その名前の付け方。
0324デフォルトの名無しさんNGNG
質問です
ダイアログでWeb BrowserオブジェクトでIEのWebページを表示できますが、
これを画面に表示しないで、ビットマップイメージを取得する方法
ありますか?
教えてください
0325デフォルトの名無しさんNGNG
>>322
それがマトモなC++プログラマの発想だよねん。
0326デフォルトの名無しさんNGNG
HWNDがprivateだと、CreateWindowが拡張されたときに困りそう。
CreateWindowEx2とか…MSならやりかねないし。
0327デフォルトの名無しさんNGNG
public、protected、private は頻繁に使用される C++ キーワードです。
MFC ヘッダー ファイルでは、各クラスの中でそれぞれのキーワードが何回
も使われます。たとえば、パブリック メンバ変数とパブリック メンバ関数
は、複数の public キーワードの下に分けて記述されることがあります。
これは、MFC ではアクセス タイプではなく、用途によってメンバ変数とメ
ンバ関数を分類しているからです。MFC は private をできるだけ使用しな
いように設計されているので、処理系に密着した変数や関数であっても、
protected または public が使われるようになっています。通常、クラス
外部からインプリメントの詳細部分へのアクセスは避けることになっていま
すが、MFC では最終的な判断はプログラマに任されています。
0328デフォルトの名無しさんNGNG
つまりダメプログラマが使うと大変なことになるというわけだ。
0329ちょっとツッコンいいか?NGNG
>>322,325
>HWND  SetHwnd();
0330デフォルトの名無しさんNGNG
>>329
おぉ、確かに(笑)
0331デフォルトの名無しさんNGNG
MFCがオカシイっていっても、話の次元がずれてるのは参加しない方が良いでしょ。
デザインパターン(MediatorとかObserverとかになんのか?俺も知らん)の話だと思うが...
C++プログラマっていってもイロイロあんだろ。「僕の中」って言われてもなあ
ま、しょせんMSだからオカシんだろうとは思うけど。。
0332デフォルトの名無しさんNGNG
>>289は、しったか厨房ってことでOK?
0333デフォルトの名無しさんNGNG
OOP厨です
0334デフォルトの名無しさんNGNG
ここの連中のレベルがよく分かりました。もう消えます。
0335デフォルトの名無しさんNGNG
>>319
CWnd::m_hWndが(言語使用上)書き換え可能であるからといって、書き換えても
いいというわけではない。それはクラスライブラリの用法上の話。
もちろん、クラスライブラリの用法上間違った操作を言語仕様で保護できるに
越したことはないが、言語仕様で保護されないからと言ってクラスライブラリを
せめるのは筋違い。
0336デフォルトの名無しさんNGNG
http://mentai.2ch.net/prog/kako/970/970891381.html
この辺とかから続いてるコピペなわけね。
2ch世界だけで知識共有 求めて生きてるヤツ、イタいな。
仕事しな
0337デフォルトの名無しさんNGNG
MFCがらみはどうも・・・
0338デフォルトの名無しさんNGNG
あげ
0339デフォルトの名無しさんNGNG
そろそろクソスレ化
かな?
0340デフォルトの名無しさんNGNG
>>334
そうか。君程度のレベルじゃついてこれなかったか。精進せえよ。
0341デフォルトの名無しさんNGNG
m_hWnd書き換えるようなプログラム書くやつがいたらこわいぞ。
SetWindowLongでHINSTANCE書き換えるのを試したことはあるが
なんも問題なく動いていたのはなぜ?
0342デフォルトの名無しさんNGNG
>>341
HINSTANCEってもうほとんど意味無いんじゃなかったっけ?
0343デフォルトの名無しさんNGNG
ヒンスタンス
0344デフォルトの名無しさんNGNG
フレームのデザインを自分で作ったBMPとかに
置き換えたいのですが、可能でしょうか?
0345デフォルトの名無しさんNGNG
サブクラス化してWM_NCPAINTをコーディングする
でも隠蔽されてるかもね、MFCのアプリでそうゆうのって聞いたことない
0346デフォルトの名無しさんNGNG
CStringがやたらとメモリリークします。
普通にLeft、Mid、Find、Deleteくらいしか使ってないのに。
何とかならないでしょうか?
0347デフォルトの名無しさんNGNG
>>346
どんな使い方してんの?
CStringが原因でメモリリーク起こすなんて聞いたことないぞ。
0348デフォルトの名無しさんNGNG
>>347
デバッガが見つけたメモリリークが常にCStringのバッファ辺りなんですよね。
文字列も残ってるし・・・。
ほんとに代入、Left、Mid、しか使ってないし、引数に渡すときも当然LPCSTRか、
MFCのCString参照にしか渡してないし・・・。
0349デフォルトの名無しさんNGNG
>>348
他にリークしたオブジェクトが使ってるんだろ?
0350デフォルトの名無しさんNGNG
>>348
Purify か BounceChecker を使う
0351デフォルトの名無しさんNGNG
>>350
とりあえず、BoundsChecker体験版をDL中。
DL完了が早いか自分で見つけるのが早いか(笑)
0352346NGNG
デバッガで追っかけてたら、MFCの内部で::DestroyWindow(m_hWnd)を
実行した時点でアプリが終了してました・・・・

OnDestroyWindow()はオーバーライドしてないし、
PostNcDestroy()でも、タイマー殺してるだけだし・・・。

もう少し調べてみますね・・・。
0353346NGNG
>>352
馬鹿でした・・・・・・
PostNcDestroy()内ではもうウインドウハンドルがなくなってるんですね・・・。
鬱・・・・・
0354デフォルトの名無しさんNGNG
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();
}

こんな関数作りました。
逝ってよしでしょうか?
0355sageNGNG
>>354
そのとおり。
今のバージョンは正常に動作してません。
0356354NGNG
ソース見たら _tcsinc() 使ってて一見マルチバイトを意識してるソースの
ようで、その実、2 バイト文字の 2 バイト目をコピーしていないドキュソースですね。

もしかして、これって有名な不具合なのでしょうか?
0357sageNGNG
つい四日くらい前に後ろの席の人がはまってました
sore
0358デフォルトの名無しさんNGNG
>>356
で、ソレ、どうやって調教したの?

自前で mfc42.dll をビルド?
それともスタティックリンク?
あるいは…(謎)
0359sageNGNG
>>258
>>354が調教策じゃないの?

おれんとこのは、Replaceを使うように勧めたけどね。
速度が重要じゃないとこだったから、動けばいいやってことで。
0360デフォルトの名無しさんNGNG
モードレスダイアログ作ってやると、
そのダイアログは別スレッドで動いてると考えていいんですよね?
0361sageNGNG
メッセージキューは別に持つけどスレッドは一緒だったような気が。
調査してない。誰かつっこんでくれ
0362デフォルトの名無しさんNGNG
>>360
よくない
0363デフォルトの名無しさんNGNG
>>361 >>362
やっぱそうですか・・・・・
分かりました。
0364354NGNG
>>358
自前で CString::Remove だけを実装して、MFC より先にリンクしちゃう
っていうのもアリですか?
0365358NGNG
>>359
あっ、そうか。
CString::Remove を直接、調教したわけじゃ、ないんだ。

>>364
なるほどね、それだけ先にスタティックにリンクしちゃって、
のこりは mfc42.dll へ Go! なワケね。
CString::Remove が virtual なら、話は早かったんだけどね...。
0366デフォルトの名無しさんNGNG
あほな質問でごめんなさい。

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);
0367デフォルトの名無しさんNGNG
256色の bitmap には当然パレットが必要。
パレットは DC が持つので、m_bufferDC とやらに適切なパレットを
選択しておくこと。
0368デフォルトの名無しさんNGNG
>>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に失敗しているようなのですが、
原因がまったくわかりません。

お願いいたします。
0369デフォルトの名無しさんNGNG
Crystal Reports を使って tiff 形式画像を出力する方法が
どうも分かりません。
とりあえずヘルプに載っていたレポートの印刷方法は理解できましたが,
画像ファイル出力となると,一体どのメソッドを使えばいいやら。
オススメの参考文献とか URL とか,ご存知ないでしょうか?
環境:
Windows2000,VC++6.0,Crystal Reports ver.8
0370369NGNG
調べれば調べるほど
「そもそも Crystal Reports は画像を出力しないんじゃ?」
という気がしてきました。
私は逝ってもよい存在なのでしょうか?
0371デフォルトの名無しさんNGNG
ワシ、経験だけは長いけど
CrustalReports使ってる人はじめてみたよ。

びくーり。

で、なにができんの?それ。
0372369NGNG
http://japan.crystaldecisions.com/products/crystalreports/
私も今回の仕事で初めて"Crystal Reports"てなモノを扱うんで,何が何だか・・
どうやら DB と連携して,綺麗なレポートを仕上げてくれるようです。
VB には標準でバンドルされている(?)ということで,使う人はよく使うとか?
0373デフォルトの名無しさんNGNG
>>369
Accessのレポートみたいなもんか?
さんくす
0374369NGNG
感謝されちゃった ヽ(´ー`)ノ 聞きたいことがあるのは私の方なのに。わらい
ところで >>369 ていうか,むしろ私の興味はすでに >>370 に移っちゃったんだけど
どなたかご存知ないっすかねぇ・・・
0375デフォルトの名無しさんNGNG
コンボボックスにコントロールメンバ関数を関連付けています。
このとき、OnInitDialog関数でAddStringしてるんですけど、
表示に反映されません。
リストボックスで試したところ、問題なく表示されます。
これはどういったことが考えられるでしょうか。
0376素人NGNG
>>375
DDXとかDDYとかじゃないのかな?
0377デフォルトの名無しさんNGNG
>>376 DDX使ってるよ。

原因分かったよ。コンボボックスの高さ方向のサイズが十分じゃなかったのな。
コンボボックスって、▼を押すと下にリストボックスみたいのが出るじゃん。
そのスペースを考えて高さ設定をしなけりゃならなかったのさ。
それにしても、リソースエディタ不親切すぎんぞゴルァ!!!
0378デフォルトの名無しさんNGNG
>>377
あ〜〜、わかるわかる
高さ方向のサイズ変更ってわかりにくいよね。
前はやり方わからんかったからいちいち新しいの作りなおしてた(爆)
0379デフォルトの名無しさんNGNG
somebody go
0380デフォルトの名無しさんNGNG
defgrgr
0381デフォルトの名無しさんNGNG
>>377
コンボボックソのサイズ変更の悩み(表示されない(w))
は初心者の95%が経験しています。
0382デフォルトの名無しさんNGNG
MFCのWebBroserオブジェクトで、Navigate()などを使って
Webページを表示しますが、「カチ」とクリック音が鳴ってしまいます。
これをオフにする方法はないでしょうか?
どうか教えてください

追伸:某板では誰もわからなかったので、時間をおいてのガイシュツです
0383デフォルトの名無しさんNGNG
>>382
答えが返ってこなかったくらいで他人を無知呼ばわりするDQNには教えません
0384デフォルトの名無しさんNGNG
>>381 結局皆経験するってことね。初心者って・・・。(w
0385デフォルトの名無しさんNGNG
ダイアログエディタでいくつかのオブジェクトを
同じ位置に配置したいのですが、
優先順位はどうやって変更できるのですか?

たとえば、3つコントロールがあってすべて可視、
常に最前面に表示されるコントロールを調整したいのです

おしえてください
0386ななしNGNG
>>385
同じ位置に置いたらごちゃごちゃにならんかな?
とりあえず、".rc"ファイルをテキストエディタでいじるとか。
0387名無しNGNG
>>385 非可視にはできないの?
0388デフォルトの名無しさんNGNG
全部同じ位置で全部可視だと、z-orderみたいなのが
必要になるってことじゃないの?
0389デフォルトの名無しさんNGNG
ダイアログ表示直後にMessageBoxを出したいんだけど。
OnInitDialog内で、ShowWindowしてもいいと思う?
一応逝けてるんだけど・・・。
0390デフォルトの名無しさんNGNG
>>389
いいよ
0391デフォルトの名無しさんNGNG
ZOrderいじるアプリは95%は糞
0392デフォルトの名無しさんNGNG
DOC-VIEWでシリアライズのバージョン管理みたいなのは
どう知れば言いのでしょうか。
シリアライズするデータが増えた場合、加古のファイルも
読めないとまずいです。
0393デフォルトの名無しさんNGNG
はあ?
データ構造なんか自分で好きなようにしろ。
0394デフォルトの名無しさんNGNG
MFCでのMDIアプリケーション開発に関する良い
書籍ってなんかないですかねぇ?
本やいろいろ回っているんだけどなかなか
いいのが見つからないんですよ。
0395デフォルトの名無しさんNGNG
>>392
CArchive::GetObjectSchema 使っとけ。
0396デフォルト名無しNGNG
age
0397デフォルトの名無しさんNGNG
Doc&Viewに的を絞った良い本をご存知の方いらっしゃいませんか?
0398デフォルトの名無しさんNGNG
Scribbleチュートリアルではダメでしたか?
0399名無しサソNGNG
 MFCとDirectXって組み合わせるのは、あんまりよろしく無いですか?
DC取得してウィンドウモードで描画する分には問題なくて、フルスクリーン
モードにした瞬間プライオリティの設定に失敗して異常終了します。
MFCのフレームワークに何か設定する必要があるのか、それとも仕様上無理
なのか、どっちなのかがちょっと分からないです。
0400デフォルトの名無しさんNGNG
質問です.よろしくお願いします.

ヘルプ->バージョン情報にアプリケーションを作った
製作元のアイコンがあって,そのアイコンをクリックすると
ブラウザが起ちあがってその製作元のホームページが
表示されるというものを作りたいのです.

アイコンのBN_CLICKEDのイベントで何かをやればいいのかと
思うのですが,どなたかご存知の方いらっしゃいませんでしょうか?
初歩的な質問で申し訳ありません.

よろしくお願いします.
0401デフォルトの名無しさんNGNG
>>399
DirectX5ゲームプログラミングって本ではMFCで
組んでるよ。

買ったのにぜんぜん読んでない(^^;
0402デフォルトの名無しさんNGNG
>>400
ShellExecute(URL)

でいけるはず。
0403402NGNG
あぁ、適当すぎた。
FileにURL指定して、後は適当に。
0404400NGNG
>402さん
回答ありがとうございます.

こんな感じでよろしいのでしょうか?

ShellExecute( pParent->m_hWnd, "open", "http://〜〜", "", "", SW_SHOW ) ;

とりあえずはうまく行っています.
0405デフォルトの名無しさんNGNG
MFCのWebBroserオブジェクトで、Navigate()などを使って
Webページを表示しますが、「カチ」とクリック音が鳴ってしまいます。
これをオフにする方法はないでしょうか?
かなり何日もなやんでいてそれでもわかりません
どうか教えてください
0406名無しサソNGNG
>>401
 レスどうもです。本屋にあったら立ち読みしてみます(笑)
出来るのは確かみたいですね。GUIのためのフレームワークを
フルスクリーンで使う事ほど馬鹿な事はありませんが・・・

 やっぱりスピードを考えたらAPIで素から組んだ方が軽いですね(苦笑)
0407392NGNG
>CArchive::GetObjectSchema 使っとけ。
それだ!ありがトン

>405
コントロールパネルのサウンドを開いて、”音を鳴らす場面”
てのを見ると、ナビゲーション開始とか完了とかの設定がある
から、ここに設定されてるんじゃない?
0408405NGNG
>>407
ほかの音を鳴らしたいので、クリック音は鳴らしたくないんです
うーーん、ここ2,3週間悩んでいます
0409デフォルトの名無しさんNGNG
>408
個別に設定できると思うがどうか?
0410デフォルトの名無しさんNGNG
クリック音がなるタイミングだけスピーカーオフにするとか(藁
0411デフォルトの名無しさんNGNG
単に音をならさなくするならサウンド設定から消せるけど
そういうレベルじゃないのか?
無駄に音鳴らされるっつうのはすごく厭なソフトだけど
0412デフォルトの名無しさんNGNG
同時にIEも動かすユーザがいるかもね。
0413デフォルトの名無しさんNGNG
普通のMFCアプリケーション(ほかとも共有する)で
大きめ(640×480)のウィンドウで安定したアニメーションを
させたいのですが、
やはりFPSを安定させるには、普通のタイマーよりマルチメディアタイマー
使うしかないのでしょうか?

あと、画面の更新でInvariadateRect使っているのですが、ほかに
よい方法はあるでしょうか?
もちろん全画面表示ではないですが、DirectX使ったほうが安定
しますかね?

教えてください
0414質問です!NGNG
CBrushクラスで四角とか円とか描画すると、黒い境界が出るのはなんとか
ならないでしょうか?あと、中身を塗りつぶさない方法も教えてください!
四角形だったらCPenクラス使って線引くだけでいいんだけど、円は
かなり厳しい!まさか円の方程式使って一点一点描画するわけにもいかないし。
まだVisual C++使い始めて半年の厨房ですがよろしくお願いします。m(__)m
0415デフォルトの名無しさんNGNG
age
0416競れ損NGNG
>413
通常のタイマー(OnTimerね)でやると描画速度は安定しても、
正確なFPS値が出ない。
例えばタイマー間隔を1mm/sにして100FPSにしようとしても
環境によって異なったFPSが出てしまう。
ただ、無茶なFPS値を出そうとしてもハングったりしないという利点があるかも。
0417デフォルトの名無しさんNGNG
CListCtrlについてなのですが,

アイテムを選択状態(青い箱で囲まれる)にするには
どのようにすればいいのでしょうか?
SetHotItem(), SetSelectionMark(),
を使ってみましたがだめでした.

また,LVN_ITEMCHANGEDのイベントは起こるのでしょうか?

よろしくお願いします.
0418競れ損NGNG
>417
SetItemStateを使うべきべき。
0419デフォルトの名無しさんNGNG
>競れ損さん

回答どうもです.

m_ctlErrorList.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED ) ;
m_ctlErrorList.SetFocus() ;

こんな感じで書いたらうまく行きました.
けど,“ホットアイテム”とは何ですか?
“選択状態にあるアイテム”と思っていたのですが....
0420デフォルトの名無しさんNGNG
FileメニューのOpenの動きに関して質問なんですが、
MFC AppWizardで作ったアプリって、あるファイルを開いている状態で、
もう一度同じファイルをOpenさせると、何も起きませんよね。
既に開いているからってことでしょうが。

でも、既に開いているファイルを指定しても、もう一度Open処理
(Serialize, OnInitialUpdateなど)を
通したいアプリを作っているのですが、その場合
どの辺りをいじるのが正統でしょうか?

(MatchDocTypeをオーバーライドとか?)
0421デフォルトの名無しさんNGNG
シェルを教えて下さい。あとシェルに関していい本がありますか?
0422デフォルトの名無しさんNGNG
>416
やはりマルチメディアタイマーがベストでしょうか?
(DirectXを用いない場合)
ただ、InvaridateRectって、即座に画面更新が反映しないような気が
するのですが。。。
0423デフォルトの名無しさんNGNG
ちょっと意図とは違うのですが、
コンパイラされた後のファイルから
ソースを見ることって出来ますか?

参考にしたいプログラムがあったので・・・
危ない話すんません。。
0424デフォルトの名無しさんNGNG
>>421
シェル石油のことですか?
スレチガイですよ。
0425デフォルトの名無しさんNGNG
>>423
失せろマルチポスト野郎。
0426競れ損NGNG
>419
アイテム(コントロール)にマウスカーソルを持っていったとき
(選択してなくてもよい)なんらかのアクションを起こすアイテムを
ホットアイテムといいます。
例えばツールバーのフラットボタンが良い例。

>422
DirectXを使用する場合でもマルチメディアタイマーが良いかと。
0427デフォルトの名無しさんNGNG
>>420
開きなおす
というメニューを作るのではダメですか?
0428デフォルトの名無しさんNGNG
ダイアログベースのアプリケーションで
CanselとOKボタンを消してアプリケーションを開発しているのですが
キーボード側の処理が残っていて、ESC、Enterを押すと、終了してしまいます
これを無効にする方法を教えてください
お願いします
0429デフォルトの名無しさんNGNG
OnOK、OnCancelをオーバライドして、何もしないようにし、
OnCloseでEndDialogを呼ぶべし。
0430デフォルトの名無しさんNGNG
>>429
なるほどありがとうございます

ところで独自のキー操作を追加したくて
OnKeyDownをオーバーライドしているのですが、
何をおしてもそこに飛びません(ブレークポイントを張って
チェックしてみたのですが)
何かミスっていますか?
0431デフォルトの名無しさんNGNG
>>430
PreTranslateMessage をオーバーライドする。
0432デフォルトの名無しさんNGNG
不定形ウィンドウの表示をする際に、
アンチエイリアスをかけた(要するにα合成する)
ウィンドウを表示させたいのですが、よい方法ありますか?

イメージの合成方法はわかります
問題は、ドラッグする際に、自分自身のウィンドウ(パネル)より
下のデスクトップイメージをどうやって取得すればよいか?
というところです・・・

どうかご教授ください
0433デフォルトの名無しさんNGNG
>>432
ありません。あきらめてください。
0434420NGNG
>>427
>開きなおす
>というメニューを作るのではダメですか?
それだと、FileメニューのOpenに仕込まれている色々便利な機能
(SetModifiedFlagのチェックとか、Serializeとか、FrameTitleの設定とか)
が使えないので、できれば、それらはそのまま使いたいのですが。

CSingleDocTemplateを継承したクラスを作る、という方法は思いついたのですが
もっと簡単な方法があるような気がして...。
0435デフォルトの名無しさんNGNG
>>432
Windows2000 なら Layered Window 使えばできる。
MFC とは関係ないので sage
0436無能な姦理人@Shiri-QNGNG
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□





続きはコチラです
http://www.geocities.com/entry_k/main/main01.html
0437デフォルトの名無しさんNGNG
>>434
CDoc::OnReOpen()
{
    OnCloseDocument();
    OnOpenDocument();
}

何か問題でも?
0438デフォルトの名無しさんNGNG
WM_SETTEXTがハンドリングできない、、、
0439434NGNG
>>437
OnOpenDocument()のDefaultインプリメントは、引数に
LPCTSTR lpszPathName を必要とします。
自分で ReOpenメニューを作ると、ここには Pathnameが渡されてきませんので、
これでは ちょっと...。
0440デフォルトの名無しさんNGNG
>>439
バカか?
OnCloseDocument(GetPathName());
何か問題でも?
0441440NGNG
バカは俺だ…
OnOpenDocument(GetPathName());
逝ってくる。
0442440NGNG
更にバカだ。
CDoc::OnReOpen()
{
    CString strPathName =GetPathName();
    OnCloseDocument();
    OnOpenDocument(strPathName);
}
以上。
0443デフォルトの名無しさんNGNG
>>442
その程度のバグは残しといてやれよ(藁
0444439NGNG
>>442
このコードだと、Access Violationになりますねぇ。
OnCloseDocument();で、自分自身が deleteされて、
その後、まだ自分が居るつもりで OnOpenDocument()するからですねぇ。

やっぱ、FrameWorkに割り込まないとダメなんじゃ?
0445デフォルトの名無しさんNGNG
>>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だと今開いているファイルは閉じられる
のでしたっけ。
0446420=434=439NGNG
>>445
おお、これは良いですねぇ。

Recent Fileにも効きますし。なるほど〜。いいなぁ。
Goodです。
0447デフォルトの名無しさんNGNG
ていうかOnCloseDocument()いらないじゃん!
同じだったら何もしないのはCWinAppの所業なんだ!

つーわけで、
CDoc::OnReOpen()
{
CString strPathName =GetPathName();
OnOpenDocument(strPathName);
}
終了!
0448440=447NGNG
>>447
あーもちろん、UPDATE_COMMAND_UIをハンドルして、何も開かれて
無いときは無効にしないと困ったことになるんでよろしく。
0449420NGNG
>>447
あ、なるほどぉ。Close要らないんだ。そーかー。

でも、これだとModifiedFlagが立ってても、有無を言わさず
ReOpenしちゃうわけですね。

455の CMyApp::OpenDocumentFileをいじる方法だと、
Modifiedだと、Saveするかどうか聞いてきます。

どっちが良いかは、
うーん...アプリの要求仕様しだいだなぁ。

ユーザがOpenで、何が起きると期待するか、という問題で、
たとえば、Editorアプリなんかで、編集結果を廃棄してReopenなら、
OnReOpenを作ればいいし、
ファイル送信ツールなんかで、Openしたら即それをどこかへ送信する
みたいなやつは、RecentFileが使えた方が便利ですよね。

今回の私のアプリは、後者のほうなんで、455さんの方がBetterでした。
0450440=447NGNG
>>449
modifiedくらい自分で引っかけれ。
ていうか、
>ファイル送信ツールなんかで、Openしたら即それをどこかへ送信する
だったら「保存して送信」ハンドラを作るのが適当かと。
0451420NGNG
>>450
>だったら「保存して送信」ハンドラを作るのが適当かと。
うーん、アプリの使い方として、Modifyする場合が多いときは、
その方が良いのでしょうが、
ファイルは加工せずにそのまま送信する、という場合は
Openしたらすぐ送信した方が、ユーザにとっては便利でしょ。
0452デフォルトの名無しさんNGNG
>>451
fool proofは?
何をどこへ送信するかによるが間違って開いてもそれだけで問答無用に
送信されるのは怖くないか?
0453デフォルトの名無しさんNGNG
hage
0454ゆうぼんNGNG
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演算で描画
したいんですけど、どうしたらいいのでしょうか?
0455デフォルトの名無しさんNGNG
a
0456デフォルトの名無しさんNGNG
>>454
CreateCompatibleBitmap(pDC, rx, ry); // pDC はクライアント領域の DC
に直してみな。
それから、DeleteObject() と DeleteDC() は不要。
0457デフォルトの名無しさんNGNG
CSpritterWndで4つの分割ウィンドウ作ったんですが
これらのウィンドウのバーの部分にメニューをつける方法を
知りたいです。メタセコイアとかマヤみたいに。
この方法をご存知の方、よければ教えてください。
0458デフォルトの名無しさんNGNG
>>457
俺は昔、CControlBarを派生させて自分でメニューバー実装してた。
CView::OnCreateでCControlBar派生クラスをcreateして、各Viewの
クライアント領域にドッキングさせるがよろし。
0459デフォルトの名無しさんNGNG
VCでデバッグしてるとたまにツールバーにマウスを持っていくだけで
落ちるような状態になってしまうんですが、これについてなんか
知っている方はいますか。

自アプリだけじゃなくて、IEとかも落ちる。
0460デフォルトの名無しさんNGNG
ビデオカードのドライバーを上げる、もしくはビデオ自体交換
0461デフォルトの名無しさんNGNG
ほかのアプリケーションを前面にして、自分がアクティブでなくなった場合と、
背面にあった自分のアプリを、前面にもってきてアクティブにした場合には、
どういったイベントを処理してやればよいのでしょうか?

ClassWizardで簡単に追加できますか?
教えてください
0462デフォルトの名無しさんNGNG
InvalidateRectは第三引数をFALSEにすると
再描画が必要な部分のみが処理されるのでチラツキが減ります。
0463デフォルトの名無しさんNGNG
>>461
WM_ACTIVATE (OnActivate)
0464457NGNG
>>458
どうもありがとうございます。早速CControlBar関係を調べて
 実装してみたいと思います。ありがとございました。
0465デフォルトの名無しさんNGNG
>>459
MFCのフレームワークは極小間隔のタイマーをまわして、マウス位置を
取得しています(ツールチップのため。またメニューのオンオフも、この
タイミングで操作している)WM_MOUSEMOVE 等ではなくタイマー使用
もちろんCFrameWnd内に完全カプセル化されています。
CCmdUIがらみでなんか不具合があるんでしょう。
0466デフォルトの名無しさんNGNG
ダイアログベースではPreCreateWindow関数をオーバーライド
できないのでしょうか?ブレークポイントを張っても
どうやら通過していないようなんですが
どなたかご教授ください
0467PohNGNG
>>459
ReleaseとDebugとで、症状かわったりしないかい?
Debugでビルドしたやつを、他のPC(*D.DLLなし)に持っていって、
そんなことが起こったことあるような。
0468PohNGNG
質問。
AppWizで作ったMFCベースのやつ
StringTableのIDR_XXXTYPEと、CFileDialogに与えられる
引数との関係教えてください。どれが、どれ?
0469デフォルトの名無しさんNGNG
なぜMSDNをみない?
0470PohNGNG
469>>
私に言ってる?
Wizが裏でやっていること、自動で対応付けられていることについての、
情報がどこにあるのか分からないです。
どこ?
0471デフォルトの名無しさんNGNG
CDocTemplate::GetDocString
が参考になるでしょう。
0472PohNGNG
>> 471
お!ありがとう。助かった。MFCのソースを眺めて、ちょうどCDocTemplateに
たどり着いたところだった。
0473競れ損NGNG
>466
メインフレームウィンドウを作っているわけではないので
ダイアログベースではPreCreateWindowは呼ばれない。
0474デフォルトの名無しさんNGNG
>>466
関数名忘れたがダイアログの場合表示前に呼ばれる関数あるよ
そっちに実装しなされ
ただしツリービューのチェックボックスの初期化以外
0475デフォルトの名無しさんNGNG
CListBoxって確か項目数の上限あったよね?
MSDNで以前見かけたんだけどみつかんない
(Win95がどうのこうのってやつ)
誰かこの記事のってる場所しりません?
0476デフォルトの名無しさんNGNG
>関数名忘れたがダイアログの場合表示前に呼ばれる関数あるよ

OnInitDialog か。
0477デフォルトの名無しさんNGNG
>>474
>>476

PreCreateWindowの引数で受け取るCREATESTRUCT& cs
を書き換えてウィンドウの属性を変更したいのです。

OnInitDialog内ではそういうのってできないですよね?
0478デフォルトの名無しさんNGNG
>>477
リソース書き換えるのは?
0479477NGNG
>>478
まとめなおすと、ダイアログでON_PAINT画面更新がかかる場合に
アニメーションをしたいので、余計な描画(消去)がかからないように
バックグラウンドをNULLにしたいのです
0480デフォルトの名無しさんNGNG
最初からそこまで言え。
0481デフォルトの名無しさんNGNG
>>479
OnEraseBkgnd を調べましょう。

>>480 激しく同意。質問の仕方も勉強しなさい。
0482477NGNG
>>480
悪かったな!
0483デフォルトの名無しさんNGNG
>>482
黙れ馬鹿
0484デフォルトの名無しさんNGNG
>>477=479=482 はプログラムより小学校の道徳の授業受けたほうが良くないか?
0485デフォルトの名無しさんNGNG
482はただの夏厨の可能性もある。
俺も偽者で酷い目にあった。
0486料理ショーNGNG
どっちもどっち
0487デフォルトの名無しさんNGNG
PNGファイルを読み込みたいのですが、
手軽なライブラリを教えてください

よろしくお願いします
0488デフォルトの名無しさんNGNG
>>487
PNGで検索しろ。腐るほどでてくる
0489デフォルトの名無しさんNGNG
>>487
http://www.libpng.org/pub/png/pngaptk.html
ここから C++ とあるものを使え。
0490デフォルトの名無しさんNGNG
InvalidateRectを呼ばないで任意領域を再描画する方法ありますか?
ON_PAINTのなかの再描画を直接行うことができればベストなのですが・・・

何が目的かというと、
InvalidateRectを呼んでしまうと、システムのどこかに更新領域の
キューが残ってしまうようで、その下にコントロールオブジェクトが
あると、勝手に更新されてチラツクので、それを防ぎたいのです。

よい方法があれば教えてください
0491デフォルトの名無しさんNGNG
>>490
GetDC で DC とってきて普通に描けば描ける。
0492デフォルトの名無しさんNGNG
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
大往生
0493490NGNG
>>491
うーん、微妙だ・・・
その場合だと、描画領域の上に他のウィンドウが乗っかっていたら
隠蔽処理が必要ですよね?
0494デフォルトの名無しさんNGNG
>>493
WS_CLIPCHILDRENがついていなければ、ね。
でもそれは WM_PAINT 時も同じだよ。
せっかく教えてあげても、「ですよね?」なんて気取った問い返しを
根拠も無くしてくる人にはもうつきあってあげない
 ↑
(勝手に返事しといて高飛車ですまんけどさ)
0495493NGNG
申し訳ございません
>>494
素人の素朴な疑問でした。言い回しが悪かったのかもしれませんが
誤解なさらないでください
気をわるくなされたのでしたら、今後きをつけます
すいませんでした
0496デフォルトの名無しさんNGNG
>>495
ゴメンですんだら警察いらんのじゃー
0497デフォルトの名無しさんNGNG
珍しくマトモそうな質問者なんだから苛めちゃダメ。
0498デフォルトの名無しさんNGNG
つーか
解決したのか?
0499PohNGNG
CRichEditCtrlについて教えて。
行番号で指定して選択したいのです。
LineIndex()で行から文字数に変換してSetSel()で
選択できるじゃん。と思ったら、LineIndexの戻り値がintなの。ちょっと足りない。
longあれば十分なんだけど、どしたらいい?
0500デフォルトの名無しさんNGNG
今の VC++ なら int も long も同じ32bitだと思うが?
0501PohNGNG
がーん!ホントだ。
CEditで足りなくなったので、CRichEditに書き直している最中。
SetSelやGetSelがlongになっていたので、あぁそうかと思ってしまったのだよ。
CEditの限界はintよりもっと小さなとこにあったのね。
はずかしいけど、助かっちゃった。。
0502PohNGNG
あ、ところで、CRichEditCtrlの限界はどこ?
そんなドキュメントどっかにある?
98以降NT4以降について知りたい。
0503デフォルトの名無しさんNGNG
CListCtrlでサブアイテムのインプレイス編集しようとしたら、
やっぱり派生クラス作って実装しないと無理??
0504デフォルトの名無しさんNGNG
インプレイス編集ってあんまり使い勝手良くないよ。
ダイアログオープンするように変えられないの?
0505デフォルトの名無しさんNGNG
>>504
そうかなぁ?
2個しか項目が無いからむしろインプレイスのが
楽そうなんだよね。
もともとは入力ダイアログにしてたけど・・・
0506503=505NGNG
なんとか出来そうっす。
0507デフォルトの名無しさんNGNG
自作ソフトのインストーラー(&アンインストーラー)をInstallShieldで
作成したいのですが、わかりやすい書籍やURLを教えてください

ちなみにプログラムはEXEとデータファイルのごくシンプルな構成です。
利用規約の表示と確認、スタートメニュー&デスクトップに配置などが
できれば大丈夫なレベルです。

よろしくおねがいします
0508デフォルトの名無しさんNGNG
>>507
とっととウィザード使えば済む話と思われ

そんなにシンプルなインストーラなら、LZH の自己解凍書庫でも作れると思われ
0509デフォルトの名無しさんNGNG
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)内にあります」というエラーが出てしまいます。

長々と書いて申し訳ないんですが,どなたか知恵を貸してくれないでしょうか?
よろしくお願いします。
0510509NGNG
自己レスです。いろいろやってみた結果,
メンバをStaticにしてやるとうまくいきました。
お騒がせいたしました。
0511デフォルトの名無しさんNGNG
はじめてInstallShiled使うのですが
初心者にもわかりやすいガイド本(またはURL)ご存知でしたら
教えてください
0512デフォルトの名無しさんNGNG
>>511
アスキーから本が出てるから、アスキーのサイトで検索してください。
(何年か前の本だから使えないかも知れないけど)
0513名無しNGNG
CString::Delete()にバグがあるような「気が」するんですけど。
VC++6.0pro SP5当ててあります

CString buf;
buf = "aa";
buf.Delete(0, 4); //仕様だとbuf==""だと思うんだが、それ以前に落ちる
0514513NGNG
書き忘れてましたが、mfc/src/strex.cppで
memcpyのcountが負になることによって起きるようです。
0515デフォルトの名無しさんNGNG
まったく仕様がない仕様ですな。
0516sageNGNG
おお、ほんとだ。
age
0517デフォルトの名無しさんNGNG
ソースを見給え
0518デフォルトの名無しさんNGNG
基本的なインストーラーを
作成したいのですが、
VCに付属のInstallShieldがよくわからなくて
Visual Studio Installerを導入することにしました

ファイル・フォルダ類は無事インストールできるのですが
デスクトップ・スタートメニューに配置する
ショートカットファイルがうまく機能しません。

インストール後に、ショートカットファイルのリンク先をチェック
すると、どうもディレクトリ階層が消えていて
実行ファイルのみになってしまいます

なにかミスしているのでしょうか
ご教授ください
0519 NGNG
>>518
それってMFCなのでしょうか。クラスは?
0520デフォルトの名無しさんNGNG
>>518
スレ立てて
しかも回答でてるのにまだマルチポストですか?

いいかげん自分で調べたら?
0521名無しさんNGNG
いきなりMFCから入った人いますか?
0522 NGNG
age
0523デフォルトの名無しさんNGNG
>>521
MFCでプログラムすると、デバッグでMFCのソースコードまで
追いかける羽目になることが多いように思う。
生APIでのプログラムをちょっとだけでもかじるのと、そうで
ないのとで、MFCのソースコードの追いかけやすさは変わるん
じゃないだろうか。
0524ななーしNGNG
SDK→MFCが王道かねえ?
0525デフォルトの名無しさんNGNG
>>521
いきなりMFCから入ったけど死んだ。
APIの知識、というかWindowsのプログラムを知っとかないと
わかんないとおもう
0526名無しNGNG
MFCをはじめようと思うのですが、ドキュメントビューアーキテクチャ
について分かりやすく説明してある本とかありますでしょうか?
できれば、実例がたくさん載ってるといいのですが、、、

一応、C++はわかるので、MFCについて詳しく載ってる本がいいです。

何かあれば教えてください。
0527pfNGNG
ヒイイイイイイイイイ!
0528デフォルトの名無しさんNGNG
>ドキュメントビューアーキテクチャ
について分かりやすく説明してある本とかありますでしょうか?

MFCのソース
0529名無しNGNG
>>528
そんないじわるなこといわないでください。
教えてください。
0530sageNGNG
>>529
scribbleのチュートリアル ヨメってばよ
0531名無しNGNG
>>530
とりあえず読んでみます。
でも、お勧め本あったらよろしくです。
0532デフォルトの名無しさんNGNG
>>531
http://www.eshopping.ne.jp/bks.svl?start&CID=BKS503&pcd=30609355&introd_id=Xmo46Wk9o3649896i81Gi1Xm66G53i6o&pg_from=u&shelf_id=03&location_id=01

どうだろ。安いし。内容はまともだが、あなたに合うかは謎。
0533デフォルトの名無しさんNGNG
SDKで書いたプログラムを、MFCに移植する上での注意点は?
0534sageNGNG
>>533
使うか使わないかを含めて、
Doc-Viewがなんたるかを理解してれば全く問題なし。

マルチスレッド対応にするなら、MFCのマルチスレッド関連の注意をよく読むこと。
そんだけ
0535デフォルトの名無しさんNGNG
>>533
SDKで作ってそれが仕様どおり動いてるんなら、
わざわざMFCにする必要はないと思うが。
その目的は?
0536534NGNG
>>535

MFCのおべんきょ(^^;
0537デフォルトの名無しさんNGNG
ちょっとあげときますか。
0538デフォルトの名無しさんNGNG
ところでMFCとWin32API直とでは、どっちが主流なんでしょ?
0539デフォルトの名無しさんNGNG
>>538
WTLが主流です。(嘘)
0540デフォルトの名無しさんNGNG
>>538
MFCor直APIだけじゃなくて
自前のクラスライブラリを使うってのも結構あるんじゃないかな?
0541デフォルトの名無しさんNGNG
自分の知識不足でしょうが、MFCの方が、SDKよりはるかに
面倒くさいなぁ。まぁ、メインに使う言語がC++とCで違うってのもあるけど。

ちょっととなりの町内会に、データをもらいに行くだけで、キャスト、アドレス、キャストぉぉ・・
となり町のファッションにいちいち着替えないと、入れてくれないんだもん(藁

MFCでスマートにコードかけない自分が悪いんだけどね。
0542デフォルトの名無しさんNGNG
画像表示の白いちらつきについて
AppWizard(exe)を使って骨組みを作ったアプリケーションで画像を表示させて
いるのですが、表示を更新するとウィンドウに白いちらつきが出て困っています。
これを消す方法をご存知の方教えていただけないでしょうか?既出のダブル
バッファを用いて1回で転送してもだめなのです。
0543デフォルトの名無しさんNGNG
InvalidateRect関数の引数にFALSE使ってもダメ?
0544 NGNG
MFCではないのですが、VC6 でリモート実行というのを設定したらデバッグサブシステムを
起動できませんといわれ 止まります。何処の設定変えるのかわかりますか?
0545542NGNG
>>543
直りました。ありがとうございました。
0546デフォルトの名無しさんNGNG
マウスのドラッグはどうやって検出すればいいのでしょうか?
0547デフォルトの名無しさんNGNG
>>546
WM_LBUTTONDOWN
SetCapture
WM_MOUSEMOVE
WM_LBUTTONUP
ReleaseCapture
0548 ◆nCjjyXhk NGNG
BSBTIJ
0549>>547NGNG
WM_CAPTURECHANGED 追加
0550デフォルトの名無しさんNGNG
>>547-549
サンクス
0551_01/09/03 00:44ID:iwqf5Q0Q
WinMain等メインループは、Win32APIベース(ATL)で
MFCのCDialogを使って、ダイアログを扱いたいんですけど
内部のAfxFindResourceHandle関数がASSERTに引っかかります。
多分CWinAppクラスのインスタンス化をしていないとか、
そのあたりが原因と思いますが、これを回避する方法はないでしょうか?
そもそもMFCのフレームワーク以外でMFCのクラスを使おうというのが
間違っているのでしょうか?
MFCのプラットフォーム以外で、MFCのクラスはどの程度まで使えるのか
そういった情報も知りたいです。
よろしくおねがいします。
0552デフォルトの名無しさん01/09/03 01:03ID:nepQwT9I
>>551
AfxWinInit()
0553_01/09/03 02:02ID:HWCzgSAM
>>552
お返事ありがとうございます。
教えていただいたAfxWinInit関数をWinMainに置き、
グローバル変数にCWinApp winApp;と置いたら
成功しました。
どうもありがとうございました。
0554デフォルトの名無しさん01/09/05 02:53ID:9DGwApwE
MDIベースで、「新しいウインドウを開く」
ときに何が起こっているのか教えてください。
ビューのインスタンスがコピーされるってことで
いいんでしょうか。
05554701/09/05 03:12ID:kiU7d71A
spy!!
0556デフォルトの名無しさん01/09/05 16:07ID:pDzmJoSY
MFC AppWizardで作成したプログラム(SDI)を
単にある処理をした後にプログラムが終了するには
どのようにすればいいでしょうか?
0557デフォルトの名無しさん01/09/05 16:29ID:iHP9cOK2
お馬鹿な質問ですみません
いまVCでチャット作ってますが、ほぼ完成したところで、マルチスレッドにしないとサーバーに
多数のクライアント繋いでる時に不具合出るって言われた。
入門書にあまり載ってないしまったく分からないので聞きたいのですが、絶対必要でしょうか?
Webでそれなりに探したがあまり詳しく説明してるところが無くて、かなり困ってます(汗
オススメの本やページありましたら教えてください m(_ _)m
0558デフォルトの名無しさん01/09/05 16:38ID:3xtzV.Hc
>>557
その条件でつないでみてそのままでいいのかどうか自分の目で判断しろ。
055955701/09/05 19:13ID:pDzmJoSY
補足:
「ユーザがオペレーションを行わないで」という事です。
056055601/09/05 19:14ID:pDzmJoSY
>>559
間違い(鬱
0561デフォルトの名無しさん01/09/05 21:05ID:yo/DrG8Y
たとえば、

[default]
PROJECT_NUM=10
LAST_UPDATE=20010905

のように、連想配列をファイルに読み書きしたいんだけど、
使えるクラスとかありますか?
0562デフォルトの名無しさん01/09/06 14:45ID:5pS2jHq6
>>558
うむ、逝ったね。
どう頑張ってもサーバー作れん。
ウツダシノウ
0563デフォルトの名無しさん01/09/06 15:11ID:lC87f1l6
>>561
http://www5.wisnet.ne.jp/~mercury/program/windows/etc/inifile.html
0564デフォルトの名無しさん01/09/06 17:00ID:DJLsxQNI
>>554
CMDIFrameWnd::OnWindowNew()
0565デフォルトの名無しさんNGNG
>>563
さんく〜♪
0566デフォルトの名無しさんNGNG
OLEドラッグアンドドロップのドロップターゲットのほうを実装しているのですが、
COleDropTarget派生クラスのOnDropで、COleDataObjectから取得した
グローバルメモリハンドルは、::GlobalFreeしなければならないのでしょうか。

いろんなサイトを見てみたのですが、解放してたりしてなかったり、果ては
COleDataSourceの方で解放していたりと、まちまちです。
0567デフォルトの名無しさんNGNG
初心者向けのメーリングリストとか無いですか?
検索してみたけど、どれがいいのかさっぱり分からないです。
0568デフォルトの名無しさんNGNG
CTreeViewを左に置いてエクスプローラ風にしようと思ったんだけど、
アイテムを右クリックでポップアップメニューを出すってのがどうしてもうまくいきません。
WM_CONTEXTMENUのハンドラで出してるんですけどうまく出ません。
誰か作ったことある人がいたら教えてください。
0569デフォルトの名無しさんNGNG
>>567
VC関連の初心者向けコミュニティーは無さそう
(普段からいろいろ漁ってるけど)
たぶん、みんなプライド高いんだろね
その点、VBは初心者サイト、腐るほどあるんだけどな
0570デフォルトの名無しさんNGNG
VCPPMLは?
なんか、嫌な感じの信仰があったりするけど、
礼儀正しくしてれば基本的に親切に接してくれます
0571デフォルトの名無しさんNGNG
VC++ML (Programming with VC++)
http://mfc.acty-net.ne.jp/ml/mfc/
0572デフォルトの名無しさんNGNG
>>569-571
ありがとうございます(ぺこり)
VCPPMLにまず入ってみました。
VC++MLも入ってみます。
0573デフォルトの名無しさんNGNG
MFCを使ったアプリケーションでネットワーク上にファイルをしていったん保存した後、変更を加えて上書きしようとするとCDocument::OnSaveDocumentでエラーになってしまいます。

CDocument::OnSaveDocument
CDocument::ReleaseFile
CMirrorFile::Close
でエラーになるのですが、ReplaceFileに失敗して、CFile::Renameを呼んで例外がスローされます。
ローカルのファイルだと、ReplaceFileが成功します。

どのような原因、対策が考えられるでしょうか?
0574デフォルトの名無しさんNGNG
age
0575デフォルトの名無しさんNGNG
ウィンドウのタイトルバーをドラッグ中に(連続して)
なんらかの処理を行いたい場合
(具体的には、ほかのウィンドウを同時にセットでMoveWindowで移動させたいのです)
どのへんを乗っ取って処理すればよいのでしょうか?

WindowProc内で、なにかメッセージを感知して、、、というのは想像
つくのですが、具体的にわかりません。

どうかご教授ください
0576デフォルトの名無しさんNGNG
>>575
WM_MOVINGとかWM_MOVEとかでは?
0577デフォルトの名無しさんNGNG
WM_ENTERSIZEMOVE
WM_EXITSIZEMOVE
05781RubyユーザNGNG
あなた達には分からないでしょうが、Rubyは素晴らしい言語です。
オブジェクト指向スクリプト言語として他のスクリプト言語を圧倒する性能と美しい言語仕様を持っています。
例えば、SchemeやSmallTalkなどは比較的美しい言語だと言われていますが、後発である優位さでRubyは
さらなる美しさと実用性を備えています。
もちろんPerlやPythonなど問題外です。
日本語との親和性ではRubyしか選択肢がないでしょう。

LinuxのディストリビューションもRubyの採用例が増えてきています。
1年後には全てのディストリビューションがRubyを標準採用するでしょう。
Rubyは未来のスクリプト言語なのです。

長くなりましたが、コピペではありません。
賛同していただける方はRubyの事を分かっていただけない人に出会ったら、
この発言をコピペしていただければ幸いです。
VC++なんて糞の極ですがね(大爆笑)
0579デフォルトの名無しさんNGNG
┏━━━━┳━━━━┓
┃      ┃      ┃
┃      ┃      ┃
┣━━━━┫      ┃
┃      ┃      ┃
┃      ┣━━━━┫
┃      ┃      ┃
┃      ┃      ┃
┗━━━━┻━━━━┛
このように分割されたウィンドウはどうすれば上手く
出来るのでしょうか?

SplitterWndをOnCreateClientでネストして使用し
・まず左右に分割
・次に左を上下に分割
・最後に右を上下に分割
とやってみたのですが、左の領域の幅が
何故かゼロ(分割線が左端に寄ってしまう)に
なってしまい、悩んでいます。

左右のどちらか一方が分割されないような三分割は
検索すると結構見つかるのですが、この形態の四分割は
参考例が見つからないので、識者の知恵をお借りしたい次第です。
0580 NGNG
>>575 クラスウイザードで適当なメッセージをFrameクラスあたりに
引いてくれば?
0581デフォルトの名無しさんNGNG
>579
Delphiならすぐ出来るんだけどね
0582デフォルトの名無しさんNGNG
>>579
分割位置を指定したいだけならCSplitterWnd::SetColumnInfo()は?
3分割が分かるんならすぐだと思うんだけどなあ。
0583 NGNG
一度分割したら次に分割する前に一度サイズ指定する、だと思う。
0584 NGNG
補足:
サイズ指定されていないウインドウを分割しようとすると

>とやってみたのですが、左の領域の幅が
>何故かゼロ(分割線が左端に寄ってしまう)に
>なってしまい、悩んでいます。

まさにその状態になります。
ちなみに私はMoveWindow()でサイズ指定してます。
0585579NGNG
左右に分割した直後にSetColumnInfoを使えば良かったのですね。
上下にも分割した後にサイズを変えようとしていたのが問題だったようです。
ありがとうございました。
0586デフォルトの名無しさんNGNG
>>579
LineToで線を引く。
0587デフォルトの名無しさんNGNG
>>579
         
Rubyはクソです。ゴミ箱逝きです。

いじょ
この発言をコピペしていただければ幸いです。
0588-NGNG
その画像ならココ
http://members.tripod.co.jp/bingo852/
0589Ruby!NGNG
>C++
>いろいろと有名なオブジェクト指向言語であるC++と
>Rubyを比較すると:

>* C++なぞ問題外.^^;;;

http://www.ruby-lang.org/ja/compar.html

Rubyを知ってもらうためにもこの文をコピペしてください。
0590デフォルトの名無しさんNGNG
―――――――――――――――――――――――
それでは次のコーナーです
__  ____________________
    .|/   ‖      ‖ ____   
        ‖      ‖ | ON AIR.|
   ∧ ∧ θ     ‖  ̄ ̄ ̄ ̄
   (,,゚Д゚)__ /[] ̄ ̄θΛ_Λ
  ||(.  つ_/    //(´∀` )/|  
  ┗┳ /      ̄/⊂    ||_/
    ┻| ̄ ̄ ̄ ̄ ̄|  (  ━┳┛      
      |_____| /ヽ」┘┻
____________|\____

「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
0591デフォルトの名無しさんNGNG
質問です
AppendMenuでダイナミックに追加したメニュー項目を処理する方法を
教えてください

あと、AppendMenuで与えるメニューIDで、Resource.hで既存のものと
ぶつからないようにするにはどうすればよいでしょうか?
(+1ずつ加算していくにしても、そもそもどこから開始させればよいのか・・)


以上、よろしくおねがいいたします
0592 NGNG
DeveloperStudioの表示>シンボルブラウザでID登録
クラスウイザードで関連付けしてソース生成
だったかなあ?

シンボルブラウザでぶつからないか確認・・・。なのかなあ?
0593デフォルトの名無しさんNGNG
>>591
Webを調べてみたら、
http://www.kab-studio.com/Programing/Codian/MFCTips/05.html

ぶつからないように、できるだけ大きい値をあらかじめ割り当てておく
って書いてあるけど、
これでほんとにいいのかな・・・
0594デフォルトの名無しさんNGNG
あげ
0595デフォルトの名無しさんNGNG
既存のMFCのソースでCSocketを使いたいのですが

#include <afxsock.h> // MFC のソケット拡張機能

と

if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}

を追加してもうまくいきません。
この他にも設定するものがあるのでしょうか?
0596sageNGNG
質問が漠然としすぎていて誰も答えられないと思われ。

1)そりゃあ、それだけじゃ動かんだろ。
2)うまくいかないって何?
0597デフォルトの名無しさんNGNG
WebBrowserオブジェクトを埋め込んでブラウザ画面をコントロールする
プログラムを作っているのですが、gifアニメや、flash動画を
任意のタイミングでロック(静止)させておきたいのです。
何かよい方法はないでしょうか?
よろしくご教授ください
0598デフォルトの名無しさんNGNG
>>595
#include <afx.h> が要るんじゃない? 試してないけど。
0599デフォルトの名無しさんNGNG

CInternetSession
のOpenURLでウェブページ(HTTP)にアクセスする際に、
URLが不正だったり、指定のURLのサービスが利用できない際に
それを知る方法はありますか?

インターネットそのものにアクセスできない場合は、例外をcatch
することでわかるようなのですが。

どうか教えてください
0600デフォルトの名無しさんNGNG
age
0601デフォルトの名無しさんNGNG
今ビットマップを表示するプログラムを作っています。
ビットマップを表示したら、ウィンドウのサイズを自動的に
ビットマップのサイズと同じにしたいと思っています
MoveWindowでビットマップの幅と高さを指定したんですが
うまくいきません。マッピングモードはテキスモードです
画面上の1ピクセルとビットマップの1ピクセルはサイズが違うのでしょうか?
0602デフォルトの名無しさんNGNG
んなわけない。
ウィンドウサイズと表示領域は確か違ったはず。
あとディスプレイ設定より大きくは出来ないはずだね。
0603デフォルトの名無しさんNGNG
>うまくいきません
これじゃわからん。
具体的にどうなったか報告しろ。
0604くだらない質問ですがNGNG
AppWizardが吐いてるコードは、なんか全てのクラスが
CxxxAppクラスを知ってる(#includeしてる)のが気に入らなくて、
それらをCxxxAppから独立させて(絶縁して)組んでます
こういうことしてる人っていますか?
0605デフォルトの名無しさん NGNG
>>604
そういうことが気になる人はAppWizardを使わないのでは?
0606601NGNG
えっと何か根本的にかんちがいしていたみたいでした・・・

そこで質問なんですが
GetClientRectで得たクライアント領域の座標を
デスクトップ上の絶対座標に置き換えるにはどうしたらいいのでしょうか?
0607デフォルトの名無しさんNGNG
CWnd::ScreenToClient()
0608デフォルトの名無しさんNGNG
>>606
俺だったら <windowsx.h> の MapWindowRect 使うぜ。
0609デフォルトの名無しさんNGNG
>>607
それは画面座標をクライアント座標に変換するの。
正解は API の ClientToScreen()
0610606NGNG
ありがとうございます
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はそれぞれ画像の高さと幅です
0611デフォルトの名無しさんNGNG
>>610 その最後の部分、移項して整理すると
w + (win.right - win.left) - (client.right - client.left),
h + (win.bottom - win.top) - (client.bottom - client.top)
ですよね。ClientToScreen(client)の必要ないと思う…。
0612デフォルトの名無しさんNGNG
「最近使ったファイル」の使用方法がわからんです。

CxxxApp::AddToRecentFileList(filename);
で登録できることは分かったんですが・・・
最近使ったファイルを選んだ時の関数OnFileMruFile1()で
どのようにそのファイル名を取得したらいいのですか?

#やっぱりOnFileOpen()を自分で実装せず
#シリアライズを素直に使うものなのでしょうか?
0613デフォルトの名無しさんNGNG
>>612
CDocument::OnOpenDocumentを引っかけるのが正解。
0614611NGNG
>610
ほんとだ。なんでこんあこときずかなかったんdろう。。。
鬱氏!
0615CEditNGNG
突然スンマセンです

SDIのスケルトンからクラスウィザードで
最上位フレームのOnCreate引っこ抜いてきて
グローバル
CEdit *e;

OnCreate(){
  :
e=new CEdit;
e->Create(.....);
  :
}
って感じでメインフレームのクライアント領域いっぱいに
CEdit貼り付けると
中身が編集できなるっす
スクロールバーつけたらそれも弄れない

んで
WS_MAXIMIZEを指定したり
e->SetWindowPos(&wndTop...);
とかでCEditをTOPに持ってくると
こんどは編集できるけど表示がおかしくなるっす

いったい、どうしたらよいのでしょう?
0616デフォルトの名無しさんNGNG
SDIスケルトンはフレームとビューの両ウィンドウが依存しあってるからなあ。
ビューウィンドウを隠して、別のCEditを表示させるなんてことは、やめたほうがいい。

AppWizardでビューウィンドウの基本クラスをCEditViewにしとくのが無難だよ。
0617616NGNG
どしてもCEditを貼り付けたいなら、フレームじゃなくて
ビューウィンドウに貼り付けるといいんじゃない。。。
0618615NGNG
なるほど、、
SDK風にはっつけても駄目っすか
もう少し素直になることにします

Thxです
0619612NGNG
>>613
ありがとうございます
おかげで一歩前へ進みました。

えっと次の問題なんですが・・・・
CMainFrame::PreCreateWindowで
cs.cx = 200;
cs.cy = 350;
としてもこの大きさになりません
cs.x = 0;や
cs.style &= ~(WS_MAXIMIZEBOX | WS_THICKFRAME | WS_VSCROLL | WS_HSCROLL);
は反映されるのに....
AppWizardでSDIで作ってます。
よろしくお願いします
0620デフォルトの名無しさん NGNG
>>619
あなたのプロジェクトのrcファイルをテキストエディタで見てご覧...

ウィンドウが出来てからSetWindowPosで変更すればOK。
0621デフォルトの名無しさんNGNG
わからないことがあって困っています。
MFC AppWizardで作成したアプリで、子ウィンドウのサイズを変更したときの
描画の更新指示はどこで行われているのでしょうか?
更新リージョン内の背景を消去しないようにしたいのです。OnSize()に記述
(Invalidate(FALSE))しても効果なしで。
0622デフォルトの名無しさんNGNG
test
0623デフォルトの名無しさんNGNG
>>621
OnEraseBkgnd、背景ブラシ ??
0624デフォルトの名無しさんNGNG
>>621
OnDrawで更新してるんでは?
僕的には、常に描画はバックバッファに対して行い、
それをBitBltして全部再描画してるけど(簡単なゲームみたいなプログラム
たしかRegisterWindowに渡す引数次第では
ずっとクライアント領域を保存しておくことができた気も。
ちなみにRegisterWindowに渡す引数は、
PreCreateWindowをオーバーライドして変更するyo
0625デフォルトの名無しさんNGNG
MFCは、
LRESULT WndProc(,,,,,,){
switch(...){

case WM_PAINT:
OnPaint();
break;
}
return DefWndProc(.,...)
}
calss a{
virtual void OnPaint()
}
こういうことをやっているのですか?
0626デフォルトの名無しさんNGNG
>>625
MFCのソース見て自分で確認しる
0627625NGNG
確認汁って、どんな汁ですか?
0628デフォルトの名無しさんNGNG
ちょっと冷めてるけどソースが多め。
一本一本ほどいて喰え。
0629625NGNG
へー、ソースが入ってるのですか。
明日、家族にその確認汁を作ってあげたいんですけどどうやって作ればいいですか。
0630デフォルトの名無しさんNGNG
VCのライセンスを家族の人数分買ってから料理しなさい。
0631625NGNG
VCのライセンスを買わないと駄目なんですか。
CD−Rに僕のVCのライセンスを譲渡しようと思うのですが駄目ですか。
0632デフォルトの名無しさんNGNG
ダメ
食べたい人の人数分ライセンスを買いなさい
0633625NGNG
食べてから売りに出していいですか
0634デフォルトの名無しさんNGNG
当店の食品はすべて使用許諾契約契約を結んでいただくことになっておりますが、
他人への譲渡は出来ない契約になっております。

買われた当人が、最後までお食べくださるようお願いします。
0635デフォルトの名無しさんNGNG
食べた後、ゲロすればおけ。>633
0636デフォルトの名無しさんNGNG
>>626-635
クソスレが急に良スレになったな。
0637デフォルトの名無しさんNGNG
CInternetSession
のOpenURLでウェブページ(HTTP)にアクセスする際に、
URLが不正やリンク切れだったり、指定のURLのサービスが利用できない際に
それを知る方法はありますか?

インターネットそのものにアクセスできない場合は、例外をcatch
することでわかるようなのですが。

どうか教えてください
0638637NGNG
637の補足なのですが、
アクセスしたURLがリンク切れだったりしても、

Not Found
The requested URL /xxx.htm was not found on this server.

のようなHTMLがゲットされてしまって、あたかも正常に
ダウンロードできたっぽい結果になるんです。
0639デフォルトの名無しさんNGNG
>>638
httpヘッダ解析しる。
ていうかまずRFC読んでhttpそのものについて勉強した方がいいど。
0640デフォルトの名無しさんNGNG
CDialogから派生させたクラスで
生成したモードレスダイアログなんですが、
アクティブな状態でエンターキーを押すと
ウィンドウが消えてしまいます。

どうやらDestroyWindow()は呼ばれていないようなのですが
実体はお亡くなりになっている気配で、これを抑止するために
OnKeyDownをオーバーライドしてみたのですがこれも
呼ばれていないようで効きません。

モードレスダイアログ特有の現象に見えるのですが、
どなたか原因&解決抑止方法をご存知の方、いらっしゃいませんでしょうか?
0641デフォルトの名無しさんNGNG
>>640
それはEndDialogが呼ばれてしまっているのです。CDialogのアホ。
解決策はCDialog::OnOk()のドキュメント読んで。
それとCDialog::OnCalcel()も。
0642デフォルトの名無しさんNGNG
>641
ありがとうございます。
でも、OnOk()もOnCancel()もPostNcDestroy()も
オーバーライド済なんです。
ウィンドウシステムメニューの閉じるボタンを押したときは
きちんとOnCancelを通ってDestroyしているようです。

試しにEndDialogをオーバーライドしてみましたが変化なしです。
一体どこでリターンキーコードを受け取って動いているのでしょうか・・・
0643621NGNG
>>623 >>624
OnEraseBkgnd()を空にして(いいのだろうか・・・)解決しました。
ありがとうございました。
0644641NGNG
おっとOnOK対処済みでしたか。そうなるとわからんなー。
ウィンドウが消えるあたり(OnClose?)にブレークポイントを入れて
止まったところでコールスタックを見たら原因わかんないかなあ。
0645デフォルトの名無しさんNGNG
>644
それらしきものは試してみたのですが、
OnClose、OnOk、OnCancel、OnShowWindow、
すべて素通りでした。しくしく
0646637NGNG
>639
ヘッダ解析は面倒ですね。やはりそれしか方法はありませんかね。

では、指定したURL下のディレクトリ(ファイル)一覧を
ゲットする方法ってありますか?
(要は普通にFTPソフト実行したときのように)

参考になるプログラムとかあれば是非教えてください
0647デフォルトの名無しさんNGNG
>>645
> OnClose、OnOk、OnCancel、OnShowWindow
実はCDialog::OnOK(OKは大文字)がオーバーライドできていない、
なんてことはないよね。
うーん。考えにくいか。
0648sageNGNG
>647
うっきゃーそれでした!!(大恥)
大馬鹿に付き合ってくださってありがとうございました・・・
逝ってきます・・・
0649デフォルトの名無しさんNGNG
しかもさげそこねてるし(二重大恥)
0650デフォルトの名無しさんNGNG
タブコントロールのタブのテキスト取得しようとしてるんですが
うまくいきません。
根本的に間違ってのでしょうか?

TC_ITEM TabCtrlItem;
memset(&TabCtrlItem,0,sizeof(TabCtrlItem));
TabCtrlItem.mask=TCIF_TEXT;

m_tabctrl.GetItem(0, &TabCtrlItem );
return TabCtrlItem.pszText;
0651デフォルトの名無しさんNGNG
>>650
pszText用のバッファは自分で用意するんでないの。
0652デフォルトの名無しさん NGNG
>>650
根本的に間違ってよ
Cからやり直したほうがイイよ
0653デフォルトの名無しさんNGNG
TabCtrlItem.pszText
は開放しなくていいのですか?

っていうか、あらかじめ確保しておかないといけない・・・。
0654デフォルトの名無しさんNGNG
>>652
この部分はCで書いても同じじゃねーかよ。アホか。
0655デフォルトの名無しさんNGNG
飛んで火にいるあほう鳥。
0656デフォルトの名無しさんNGNG
>>654
同じだからCを勉強しなおせって事だろ。
0657デフォルトの名無しさんNGNG
変数の寿命について勉強しなおすべし。
サブルーチン内の変数はサブルーチンを抜けたら保証されません。
(関数だろというつっこみは禁止)
0658ツッコミNGNG
スコープだろ?
0659うーんNGNG
CStringに 0xF6 0x85 って入れると、GetLength()が
3 返すんだけど、これってバグじゃないかい?
JIS X0208に付いてる資料だと、ユーザ定義文字領域?
0660デフォルトの名無しさんNGNG
卒研で認証画面作ってるのですが、char password[maxpass]
の所でエラーが出てしまい、上手くいきません。何か代替
手段が無いでしょうか?

//パスワード設定
CString key="PASSWORD";
int maxpass = key.GetLength();

char password[ maxpass ];
m_pass.GetWindowText(password,maxpass);
0661デフォルトの名無しさんNGNG
password は静的な確保のため、maxpass が定数でないと
エラーになる。C++の場合:
char *password = new char[....];
....
delete[] password;
とすれば動的確保になるかも。
0662デフォルトの名無しさんNGNG
>>662
あとあとのことを考えるととりあえず3日だけでも卒研を中断して
C/C++の入門書で勉強したほうがいいと思われ。
0663660NGNG
>>661
>>662
どもありがとうございます。まだ本読みながら書いてる
状態なので、もうちょい勉強してから再開してみます。
0664デフォルトの名無しさんNGNG
CStdioFileで、追加書き込みモードでファイルを扱う方法はありますか?
CStdioFile file("hoge.txt", CFile::modeWrite | CFile::modeNoTruncate);
で、オープンすると、上書き書き込みモードになってしまうようです。
0665デフォルトの名無しさんNGNG
AppWizardで2ペインのウィンドウを作ったのですが、(左がCTreeView,右がCListView)
左側のCTreeViewの中にツールバーをつけたいのですがどうやったらよいでしょうか。
CTreeViewのOnCreateでCToolBarCtrlをCreateして、
OnSizeでTreeCtrlとToolBarCtrlの位置を変更してみたのですが、
Viewの中身が描画されずうまくいきませんでした。
0666664NGNG
Seek忘れでした!
0667デフォルトの名無しさんNGNG
MFC+OpenGLでポリゴンビューアを作成しているものです。
私はVisualC++で作成をしているのですが,いままでずっと
メインウィンドウのメニューやサブウィンドウのGUIの作成&設定は
VisualC++のリソースエディタを使ってこつこつ作成してきました.

ですが、最近になってツール(ポリゴンビューア)上から
インタラクティブにサブウィンドウのGUI(テキストフィールド,ボタン等)
を変更・追加・削除する機能をつけたいと思うようになりました.

具体的に似たような機能を持つMayaを例にあげて説明させてもらいます.
(Mayaをご存知でない方申し訳ないです)
MayaのAttributeEditor(サブウィンドウ)を開いてそのメニューの
”Add Attribute”でアトリビュートを追加するとAttributeEditor
に新しい項目(アトリビュート)が追加されてGUIも更新されている、
といった感じのものを作りたいと考えています。

このようなことって実現できるのでしょうか?
リソースデータ等を無理やり書き換えるプログラムを作成するのでしょうか?
それとももっとスマートな方法が存在するのでしょうか?
分かりにくい説明かもしれませんが,ご教授のほどお願いします.
0668デフォルトの名無しさんNGNG
>>667
「追加、削除」を「表示、非表示」と考えたら比較的簡単にできます。

ボタンなどのコントロールも結局CWnd派生ですから
GetDlgItemでコントロールのポインタを取得して
ShowWindowで表示、非表示、MoveWindowで位置を動的に
調整することができます。
また、メニュー項目の追加や削除なども動的に変更できます。
CMenuあたりのヘルプを見てください。
0669デフォルトの名無しさんNGNG
質問です
procedure Tjotai_real.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 文
end;
上の文をFormCreateで呼ぼうと思っImage1MouseDown(Sender,mbLeft,ssShift,0,0);
をしたのですが「TshiftStateとEnumerationには互換性がありません」って警告が
出ます。
どうしたら良いでしょうか?
0670669NGNG
誤爆
0671デフォルトの名無しさんNGNG
CMDIChildWndから派生させたクラスで、
WS_VSCROLLとWS_HSCROLLを指定して
生成したウィンドウをスクロールさせたいのですが、
引数で渡されるCScrollBarが死んでいる様子なので
GetScrollBarCtrlを使おうとしたら、GetScrollBarCtrlは
WS_VSCROLLで生成したスクロールバーには無効と
MSDNに書いてありました(涙)

どうやって制御したらよいのでしょうか?
本も10冊近く調べ、MSDNもしつこく調べたのですが
よくわからなくて・・
どなたか教えてください!よろしくお願い致します。
0672671NGNG
「引数で渡される」と書いた関数はOnVScrollです。
0673デフォルトの名無しさんNGNG
>>671
CScrollBar::SetScrollInfo()ではなく
CWnd::SetScrollInfo()をウィンドウ自身に対して使う。
0674671NGNG
>673
ありがとうございます!
CWnd::GetScrollInfo&SetScrollInfo&ScrollWindowでなんとなく動くようになりました。
でも、クライアント領域の再描画がうまくいきません。
調べてみます。
0675デフォルトの名無しさん NGNG
>>667
あんた、ものすごく仕事の相談してるっぽいな。
ところでGUIのボタン等はMFCでクラス化されてるんだから
動的にクラスの実体を作ればいいだけのこと。
C++から勉強し直すことをオススメするよ。
0676デフォルトの名無しさんNGNG
>>668,675さん
 貴重なアドバイスありがとうございました.
 確かにC++(オブジェクト指向)の理解が足りないと思います。。
 どうもありがとうございました。
0677デフォルトの名無しさんNGNG
age
0678デフォルトの名無しさんNGNG
mfcのMDIアプリのウィンドウメニュー(重ねて表示/並べて表示/...)
に現在開いているウィンドウが、自動的に追加表示されますが、
特定のウィンドウはメニューに表示されないようにしたいのですが、
どうしたらいいのでしょうか?
0679デフォルトの名無しさんNGNG
>>678
その表示したくないウィンドウを、Doc-Viewアーキテクチャ以外
(例えばモードレスダイアログとか、MDIフレームとは独立した
ChildFrameとか)で作る。
0680678じゃないけどNGNG
な〜る
0681デフォルトの名無しさんNGNG
>>679
それでうまくいきました。どうもありがとうございました。
0682デフォルトの名無しさんNGNG
こんばんは。
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 ;
}
0683デフォルトの名無しさんNGNG
>>682
&Thread
ポインタの勉強を最初からやり直せ。
0684デフォルトの名無しさんNGNG
>>683
いやそれは別に問題なかろう。

UINT Caaa::Thread(LPVOID p)
{
//処理
return ;
}
0685デフォルトの名無しさんNGNG
>>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 ;
}

ではいけないのでしょうか?
よろしくお願い致します。
0686smatNGNG
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
{
//有効なイメージデータの処理
}
}
}
0687デフォルトの名無しさんNGNG
>>686
OnCloseDocument
0688smatNGNG
>>687さん
ありがとうございます。
でも、いきなりOnCloseDocument()を呼び出すと、
不正な処理...のDialogBox
  ↓
ハンドルされていない例外はSmatPaint2.exeにあります。:0xc0000005:Access Violation
↓
メモリウィンドウが出てくる(文字が灰色で???)

の様になってしまいます。MSDNを見る限りでは何の問題もなさそうなのですけど。
ついでに、起動時に子ウィンドウを出さない様にするにはどうすればよいのでしょうか?
 ・OnNewDocumentのインプリメントをコメントアウトしてもダメ。
 ・OnNewDocument()の中でOnCloseDocument()を呼び出ししたら氏んでしまう。
0689デフォルトの名無しさんNGNG
>>688
OnNewDocument/OnOpenDocumentが完了する前にはOnCloseDocument呼べないみたいだね。
MDI子フレームにWM_CLOSEを送ってみるってのはどうだ。
0690デフォルトの名無しさんNGNG
>>688
>起動時に子ウィンドウを出さない様にする
これは知ってます。

CxxxApp::InitInstance()の中で
CCommandLineInfo cmdInfo;
の直後に
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
を挿入。
0691smatNGNG
>>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さん
ばっちりです。ありがとうございます。
0692ビギナーNGNG
SQLサーバからデータを読み出している際にNULLが入っていると例外でおちます。

_variant_t vString;

vString = m_pRecordset->GetCollect(_variant_t("整理"));
vString.ChangeType(VT_BSTR);
s11=vString.bstrVal;

整理がNULLの場合2行目のvString.ChangeTypeで
落ちますがどう対処すればいいのでしょうか。
0693デフォルトの名無しさんNGNG
>>692
VC++のspでの修正内容一覧でそんなのを見かけた気が、、、
spのバージョンは?
0694デフォルトの名無しさん NGNG
>>692
0695694NGNG
誤爆した。

if ( vString ) で囲んでもダメなのかい?
0696692NGNG
最新パッチあててるはずです。
ただvc起動時 VBみたいに SPなんとかと出ませんが...。

カッコでくくってみます。vbでいう on error resume next みたい
のがあるといいな
0697デフォルトの名無しさんNGNG
>>696
try {
} catch (...) {
}

__try {
} __finally {
}

TRY {
} CATCH_ALL{
} END_CATCH_ALL;
0698ビギナーNGNG
なにやらヒントが。やってみます>697
0699デフォルトの名無しさんNGNG
例外キャッチしてもいいけど、バグったバージョンの bstr とか使うと
痛い目見るかも。
0700デフォルトの名無しさんNGNG
MFCを勉強しはじめです。
CTimeとかをコンポジションしたいときって
ポインタだけにして
コンストラクタでヒープ領域にとるようにすべきなんでしょうか。
0701sageNGNG
それはコンポジションでもなんでもないが、
ポインタでもメンバ変数として持ってもどちらでもよい。
0702デフォルトの名無しさんNGNG
OO用語つかいたいなら集約にしとけ
0703デフォルトの名無しさんNGNG
集約=コンポジション?
0704700NGNG
>>701
それはCTime自身がヒープ領域を取るからですか?
0705デフォルトの名無しさんNGNG
集約=アグリゲーションじゃねえの?
0706デフォルトの名無しさんNGNG
勉強し始めの頃は、どちらで持つべきかは好きにしてよい。
0707700NGNG
>>706
了解です。簡単なスタックの方にしときます。
0708デフォルトの名無しさんNGNG
>>704
ヒープにとるぶんにはまあ問題ないでしょう。
スタックだとちょっとまずい。

たとえばCTimeがメンバ変数に大きな配列を持っていて、その実体を
メンバとするクラスAを作ったとする。
このAをプログラム中でlocal変数としてインスタンス化した場合、
大量のスタック領域が消費されることになる。

まCTimeではそんなことは無いから気にしなくてもいいんだけど。
0709700NGNG
>>708
アドバイスどうもです。
CTime,CFile,CStringとかいっぱい入れてるんで
(それをコンポジションと言うと思ってた。なんて言うのだろ)
ヒープにとることにします。
0710700NGNG
ポインタにしたら
Time = CTime::GetCurrentTime();
error C2679: 二項演算子 '=' : 型 'class CTime'
の右オペランドを扱う演算子は定義されていません。
(または変換できません)
って出てしまいました。なんですかこれ?
0711デフォルトの名無しさんNGNG
*Time = 〜
0712700NGNG
>711
ああ、そうか、あれじゃポインタの置き換えになっちゃいますね。ボケてました。
0713デフォルトの名無しさんNGNG
こうして700は一つ大人になった。
0714700NGNG
ProgressCtrlを継承して独自のプログレスバーを
作ったんですけど、
OnPaintがprotected:メンバになっていて
コンパイルエラーになります。
publicにしちゃって良いですか?
0715デフォルトの名無しさんNGNG
>>714
状況がよくわからんが…、OnPaintを外から直接呼ぶ気か?
止めとけ。InvalidateRect() か何かで間接的に使うようにすべき。
0716デフォルトの名無しさんNGNG
オレ、CTime嫌いです。
0717デフォルトの名無しさんNGNG
オレ、>>716嫌いです。
0718デフォルトの名無しさんNGNG
メインフレームのフレームウィンドウを消す方法はありますか?
0719718NGNG
透明にしたり色を変えたりでもいいのでお願いします
0720デフォルトの名無しさんNGNG
>>718
Create時かPreCreateWindowでウインドウスタイルを変える。
0721714NGNG
>>715
またひとつ賢くなりました。
0722デフォルトの名無しさんNGNG
システムモニタのようなスクロールする
折れ線グラフのクラスを作りたいんですが
CPaintDCだけじゃだめでしょうか。
0723デフォルトの名無しさんNGNG
分割ウィンドウについて質問します。
メーラのBecky!を例に挙げますが、このソフトのメール一覧ビューと
本文ビューの間には、縦サイズが固定で日時情報や複数のボタンが
表示されているビューが存在します。
このビューのように、MFCで水平に3分割したビューのうち
中央のビューの縦サイズを固定し、なおかつドラッグしても
縦サイズが保持されたまま移動するビューの実現はどのように
すれば良いのでしょうか?
参考になるソースへのポインタだけでも教えて頂けると有り難いです。
0724デフォルトの名無しさんNGNG
>>720
>Create時かPreCreateWindowでウインドウスタイルを変える。

ありがとうございます。が、PreCreateWindowだとアサートされてしまうので
Create時に試してみたところ、
ModifyStyleEx(0, ~WS_EX_WINDOWEDGE);
ではまたもにクリックできないようになり、
ModifyStyleEx(0, WS_EX_TRANSPARENT);
では期待した効果が得られませんでした。具体的にはどうすればいいのでしょうか。
0725デフォルトの名無しさんNGNG
>722
http://www.codeguru.com/bitmap/Graph.html
ほれ
From CodeGuru
0726725NGNG
リンク間違えた
>>722
http://www.codeguru.com/bitmap/Graph.html
0727デフォルトの名無しさんNGNG
>>725神
このサイトいいですね。
0728smatNGNG
たびたび、お世話になります。
ショートカットの上にドラッグ&ドロップしたときにファイル名又はフォルダ名を
をGETするにはどうすればよいのでしょうか?
::DragQueryFile(...)のまねをしたいのです。
0729デフォルトの名無しさんNGNG
>>728
GetCommandLine
0730デフォルトの名無しさんNGNG
>>725
これって端っこまで行った時、画面からはみ出てしまいます。
自動的にスクロールするようなやつ、ないですか?
0731デフォルトの名無しさんNGNG
>>730
プログラマだろ?
自分でカスタマイズしろよ
0732725NGNG
>>730
http://www.codeguru.com/controls/oscope.shtml
http://www.codeguru.com/controls/histogram_control.shtml
こんなのもあるぞ
0733デフォルトの名無しさんNGNG
>>732
付き合いすぎ。
自作自演?
0734725NGNG
>>733
いやなんとなく親切したい心理状態
昨日ペイフォワードみたからな
0735smatNGNG
>>729さん
Quick Responseありがとうございます。
早速やってみました。
GetCommandLine()で大概はOKなのですが、問題があります。
その問題とは、ファイル名がMS-DOSファイル名(8.3形式)にされてしまうのと、
ファイルを複数ドロップしたときに、ファイル名がスペース区切りにされてし
まうことです。::FindFirstFile()等でMS-DOSファイル名で検索し、
WIN32_FIND_DATA構造体の中にLong file nameで格納されていれば問題なし
なのですが、まだそこまで確認できていません。
MS-DOSファイル名→Long file name変換の関数があれば何の問題もないのですが。
0736デフォルトの名無しさんNGNG
GetLongPathName()
0737デフォルトの名無しさんNGNG
自分で全部作ったから
ゴルァしようかと来て見たら
732のような天使がいて心洗われました。
0738smatNGNG
>>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);
...
0739デフォルトの名無しさんNGNG
OnInit内でのエラー処理ってどうやるんでしょう?
returnしただけだとウィンドウが残ったままです。
WM_DESTROYするとアプリケーションエラーになります。
0740デフォルトの名無しさんNGNG
VC++相談スレにも書いたのですが・・・。
二重書き込み申し訳ないです。

COleDataSource::OnRenderGlobalData
COleDataObject
の、サンプルコードがあるところを教えてください。
達人の方々、簡単なサンプルコードをいただけると幸いです。
サパーリわからなくて困り果てています。うう(泣
0741739NGNG
OnInit内でレジストリ判定とか入れてエラー処理を入れるのは
だめなんですか?
どのサイトみてもそういうサンプルがないので。
0742デフォルトの名無しさんNGNG
>>741
OnInitって何よ?
.NETの話ならスレ違い。
0743デフォルトの名無しさんNGNG
たぶんOnInitDialogだが
問題点すら明確に伝達できないやつに教えるのはばかばかしいので
さらしage
0744デフォルトの名無しさんNGNG
>>743
>returnしただけだとウィンドウが残ったままです。
>WM_DESTROYするとアプリケーションエラーになります。
ゆーてるやろもうええわ!っち。
0745デフォルトの名無しさんNGNG
起動時のエラーチェックはアプリケーションクラスでやれ馬鹿
0746デフォルトの名無しさんNGNG
>>745
>>744は元VB厨だからForm_Loadでエラーチェックするのが作法なんだよ、きっと。
0747デフォルトの名無しさんNGNG
CWinAppとCDialogの派生クラスが切り離されている意味がよく分かってないんだね。

なんとか入門の本を読んでも、その辺の構造について解説してないもんな。
0748デフォルトの名無しさんNGNG
おーい>>739どこいった?
0749デフォルトの名無しさんNGNG
>>744
MFCのフレームワークにはOnInitなんてハンドラはないんだけど。
0750739NGNG
>>745
ほんとにありがとう!
>>746
VBはやったことないです。元DOSプログラマ。
>>747
基礎がなってないのは自覚してます。
>>748
来ました
>>749
OnInitDialogでした。
0751EBINGNG
6.0で画像を90度回転させるのってどうやるの??
0752デフォルトの名無しさんNGNG
>>751
画像の回転には5.0でも4.0でも
バージョンは関係ない。

ちなみに
pDC->StretchBlt(xDest, yDest, bm.bmWidth, bm.bmHeight, &memDC,
bm.bmWidth-1, 0, -bm.bmWidth, bm.bmHeight, SRCCOPY);
このsrcの値を変えれば回転する。
0753デフォルトの名無しさんNGNG
よく見たらアプリケーションクラスにデストラクタがありません!
なんでですか?
0754jhonNGNG
>>753
デストラクタは基本クラスにあるだろ
オーバーライドしてないだけだろ
0755753NGNG
>>754
ExitInstanceで処理することにしました。
0756デフォルトの名無しさんNGNG
>>755
当たり前。
0757 NGNG
画面に出たウィンドウの特定のボタンを自動的に押す という
方法はどのようにするのでしょうか。
spyというやつでid(?)取得してどうこうするのでしょうか?途方にくれてます。
0758デフォルトの名無しさんNGNG
できないことないけど、なんでそんなことしたいの?

rocket mouse買う方が簡単でやすくつくよ
0759757NGNG
ユーザにどうしても押されたくないボタンがあるんです。
だからウィンドウがでたらキャンセルを自動的に押して
キャンセルしたいんです。
ほかの方法でもいいんですが...
0760デフォルトの名無しさんNGNG
(´-`).。oO(自爆ボタンかな?)
0761デフォルトの名無しさんNGNG
>759
WM_CREATEをフックして送られてきたハンドルからボタンのハンドルをゲットしてMESSAGE送る。
0762デフォルトの名無しさんNGNG
すなおにdisableしとけよ
0763759NGNG
その押されたくないボタンのプログラムはexeしかないんです。
0764デフォルトの名無しさんNGNG
>759
フックしなくてもよかった。
普通にWM_CREATEでSendMessage送れヴぁ?
0765759NGNG
ふーむ。なんせMFC初めて間もないので方法すら分からないのでした。
0766デフォルトの名無しさんNGNG
>>763
押されたくないボタンのあるアプリなんか使わせなければいい。
0767デフォルトの名無しさんNGNG
何のボタンなのかすげー気になる
0768757NGNG
ふむむ。努力してみます。ちなみに押されたくないボタンは顧客情報を
エクスポートするボタン。
フリーでも画面に出た特定ボタン押すというソフトあるれどこれじゃその
ソフト終了されたらおしまいだし。だから自分で偽装したやつ作る必要が
ある訳でした。
多分rocket mouseも簡単に終了できんるですよね。これいいと思ったんですが。
0769757NGNG
さげ忘れたごめんなさい。
0770デフォルトの名無しさんNGNG
VisualStudioでEXEをリソース形式で開けば
ダイアログのボタンとか削除とか、disableにできるよ。

ダイアログじゃないとか、
動的にコントロールを制御してるようだと、
駄目だけどね。
0771デフォルトの名無しさんNGNG
>>770
他人のプログラムに改変を加えて再配布というのはいろいろ問題がないか?
0772757NGNG
再配布はしません。改造したexeを内部で使うだけです。
ただ改造すら禁止しているケースもありますが。
というか、誰でもエクスポートできるように作るなと言いたい。
0773デフォルトの名無しさんNGNG
ファイルをダイアログベースのソフトに
ドラッグ&ドロップしてファイル名とパスを
取得したいんですが、よくわかりません。
どなたか、教えていただけないでしょうか。
おねがいします。
0774デフォルトの名無しさんNGNG
WM_DROPFILESのハンドラを作る。
ただしClassWizardはデフォルトではCDialog派生クラスにWM_DROPFILESを表示しないので
クラスのメッセージフィルタを"Dialog"から"Window"に変更する。
0775デフォルトの名無しさんNGNG
>>774
ありがとうございます。
まだファイル名がうまく取れませんが、ドロップは認識しました。
0776757NGNG
なんとかできそうです。ありがとうございます。
それにしてもVC(MFC)は奥が深いです。
0777 NGNG
ラジオボタンを使用するためにDoDataExchange()で
DDX_Control(pDX, IDC_RADIO1, m_radio1)
としているんですがこれって問題ありますか?
0778デフォルトの名無しさんNGNG
>>777
afxdd_hを見たところDDX_Control関数の3番目の引数が参照になってるね。
m_radio1はポインタなの?
0779777NGNG
ヘッダファイルで
CButton m_radio1;
としています。

他のコントロールならばClassWizardで追加するのですが、
グループスタイルの無いラジオボタンなので手作業で追加しました。
0780デフォルトの名無しさんNGNG
>>779
あーなるほど。グループスタイルを付けないと
ClassWizardじゃDDX変数を作れないんだ。
しかしなんでグループスタイル付けないんですか?
0781777NGNG
>>780
全部のラジオボタンにグループスタイルつけるとラジオボタンのON/OFFが
各ボタンでばらばらになってしまうからです。
例えば、

○ラジオボタン1
○ラジオボタン2

上のように二つのボタンがあったとき、1だけにグループスタイルをつけると
1をONにしたときに2が自動的にOFFになり、またその逆も可能です。
ところが両方のボタンにグループスタイルを設定してしまうと、
2は1のON/OFFとは関係無しに独立して動作します。
0782デフォルトの名無しさんNGNG
>>781
分かった。「1だけグループスタイルあり」でグループ化したとき、
グループスタイルを持たないラジオボタン2以降にも、
手作業でコントロール型のDDX変数を割り当てたいつー話?

たしかに問題ありそうな無さそうな微妙なところですな。
これはMFCのソースを見るしか。
0783デフォルトの名無しさんNGNG
RPGらしきもの作ってて、マップ情報を保存する時にクラスを2次元配列(というかvector)にしたいだが、
CArrayで2次元配列作る方法、操作などがわかりません(;´Д`)
参考してる本はSTL使ってるが良く分からないし、、
どなたか、教えていただけないでしょうか。
おねがいします。
0784デフォルトの名無しさんNGNG
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]; }
};
0785デフォルトの名無しさんNGNG
>>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;
}
0786デフォルトの名無しさんNGNG
なるほど、直接使うのではなくクラスを作るのですね。
>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習う時良く使うが、実務ではあまり使わないのでしょうか?
0787初心者NGNG
質問させていただきます。
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];
とやってみたのですが、おかしくなります。
どなたかご教授願います。
0788デフォルトの名無しさんNGNG
キャストしろや>787
0789デフォルトの名無しさんNGNG
>787
こういうことだ
BYTE buf[4];
buf[0] = 0xcc;
buf[1] = 0xbb;
buf[2] = 0xaa;
buf[3] = 0;
DWORD data = *(DWORD*)buf;
0790初心者NGNG
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;
ともやってみたんですが、やっぱりおかしくなります。
どこが間違っているのでしょうか?
0791789NGNG
だからキャストしろって>790
0792789NGNG
それと、インディアンで検索しとけ>790
0793785NGNG
>>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次元配列だから特に必須ってわけではないです。
0794790NGNG
>789
DWORD data = 0x000000;
data = ((BYTE)buf[0] * 0x010000) + ((BYTE)buf[1] * 0x000100) + (BYTE)buf[2];
で
できました!
ありがとうございます!
0795デフォルトの名無しさんNGNG
デカルチャ。
CArray< CArray< T, T& >, CArray< T, T& > > からクラス派生出来るのはちょっとデカルチャでした。
本当にプログラマとして仕事できるかどうか心配になってきた(大学3年)
なんとか使えそうです、ありがとうございました。
0796デフォルトの名無しさんNGNG
>>794
data = buf[0]<<16 | buf[1]<<8 | buf[2];
の方がコーディング量少ないぞ(藁
0797 NGNG
union.............
0798デフォルトの名無しさん NGNG
>>786
なぜint型の配列ではいけないのか小一時間問い詰めたい
0799デフォルトの名無しさんNGNG
メールソフトのサンプルプログラムってどこかにありませんか?
0800デフォルトの名無しさんNGNG
>798
同じマスに色んな情報を詰め込みたいので、クラスを使いたい
map[2][3].cell = 1 ,map[2][3].character = player ←みたいな使い方で、、
マップはサイズ変更可能なので、できればベクターのほうが使いやすい

もしかしたらとんでもない勘違いしたかな?小一時間教えてくださいm(_ _)m
0801デフォルトの名無しさんNGNG
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]; }
};
0802デフォルトの名無しさんNGNG
s/get/cell/
0803777NGNG
みなさんラジオボタンを使うとき(CButtonメンバ関数を使うとき)は
どうやってるのでしょうか
0804デフォルトの名無しさんNGNG
>>803
普通に1番目だけグループスタイルをつけてグループ化して、
整数型のDDX変数にしてる。
個々のラジオボタンを操作することはほとんどないけど、
もしやるならDDX変数を解さずに直接
GetDlgItem(ID_RADIO1)->SetCheck() とか。
0805デフォルトの名無しさんNGNG
CButton* radio1 = (CButton*)GetDlgItem(ID_RADIO1);
radio1->SetCheck(1);

というようなGetDlgItemの返り値をキャストして使うのは
状況によっては動かない場合があると聞いたのですがどうなんでしょう。
入門書によく載ってますが。
0806デフォルトの名無しさんNGNG
>>805
CButtonとCWndの継承関係から考えるに、それはだめじゃないの?

CButton* radio1 = (CButton*)GetDlgItem(ID_RADIO1);
((CWnd*)radio1)->SetCheck(1);

ならよいかも。というより、すなおに

CWnd* radio1 = GetDlgItem(ID_RADIO1);
radio1->SetCheck(1);

ではないか。
0807806NGNG
あ、SetCheckってCWndのメンバにないのか。
0808デフォルトの名無しさんNGNG
>CButtonとCWndの継承関係から考えるに、それはだめじゃないの?

でもMFCはそれを動くようにしてるそうです。

>CWnd* radio1 = GetDlgItem(ID_RADIO1);
>radio1->SetCheck(1);

SetCheck()はCWndのメンバでは無いのですが良いのでしょうか?
0809デフォルトの名無しさんNGNG
>>804
>普通に1番目だけグループスタイルをつけてグループ化して、
>整数型のDDX変数にしてる。

自分、わざわざ各ボタンでGetCheck、SetCheckしてました。
0810806NGNG
>でもMFCはそれを動くようにしてるそうです。

うがー確かに。
ソースを見るとCButtonにはメンバ変数がないようなので
(CButton*)を(CWnd*)にキャストしてもポインタがずれなくて大丈夫なのかな?
0811デフォルトの名無しさんNGNG
DDX変数で

UpdateData();
int n = m_num_radio;

で選択ボタンを判定したり

m_num_radio = 3;
UpdateData(FALSE);

で4番目のボタンを選択したりというのは定石??
0812デフォルトの名無しさんNGNG
>>806>>810
おめーえらそーに嘘教えてんじゃねーよ!!
>>805はダウンキャストの危険性についての話だろが!
CButtonはCWndをpublic継承してんだから、
CButtonをキャストなしにCWndと見なすのは全然問題ねーだろが!

>>805
C++のdynamic_castやstatic_cast、reinterpret_castについて調べみ。
いろいろ出てくるから。
0813デフォルトの名無しさんNGNG
>>805
Note that it's always safer to check for the validity of the results from GetDlgItem.
0814デフォルトの名無しさんNGNG
MFC ActiveX ControlWizardで生成したプロジェクトに
ダイアログを追加して、
その上にWeb Browserコントロールを載せているのですが
そうすると元のActiveX自体をコールできなくなってしまいます。

ちなみに、ActiveXでは無くMFC AppWizard(exe)などでやると
正常に動いてくれます。

どうしたらいいのでしょうか?
0815デフォルトの名無しさんNGNG
age
0816デフォルトの名無しさんNGNG
MFCなんて覚えても技術力は一切あがらないねぇハァ・・・・
0817デフォルトの名無しさんNGNG
VBでやるよりは困難が多いので時間は掛かるが上がると思う>技術力
0818デフォルトの名無しさんNGNG
MFCのスタティックライブラリを使ってビルドすると、
AfxLoadLibrary()、AfxFreeLibrary()
が使えないんだけど、どういうわけですか?
0819デフォルトの名無しさんNGNG
ロードしたりフリーする必要がないからなのでは?
0820818NGNG
>819
じゃ、APIの LoadLibraly、FreeLibraly使って問題ないわけですね?

ロードされる DLLでは、MFCの共有 DLL使ってるんです。で、
MSDNには、「グローバルなMFC の状態を破損するのを防ぎます」と
あるのが気になるんですが。このグローバルって...
0821デフォルトの名無しさんNGNG
あんまり詳しくないのですが、
自分はMFCスタティックで、
呼び出すDLLがMFCダイナミックだとどうなるんですかね?
リンケージがうまくいかないような気もするんですが。
0822デフォルトの名無しさんNGNG
>>821
はい。いかなくなります。スマートな解決方法は多分ありません。
0823デフォルトの名無しさんNGNG
>>821
自分も DLL な MFC を使うしかないと思われ。
逆は不可。
0824超初心者NGNG
MFCを今までやっていたんですが、DirectXもやってみたくなりました。
それで少し聞きたいんですがMFCでDirectXを取り込むような形で使えますか?
使えるとしたらどんな形でどうやるんでしょうか??
0825デフォルトの名無しさんNGNG
>>823
逆は不可とは?
DLLをスタティックに出来るなら、自分がスタティックでもいいだろ?
0826デフォルトの名無しさんNGNG
質問。

Win2000でCOleDateTimeのGetCurrentTime();をやってみたんだけど
1899年12月30日になります。

なんで?
0827デフォルトの名無しさんNGNG
2000年問題と思われw
0828826NGNG
ごめんなさい。
使い方間違ってた。
COleDateTime today;
today.GetCurrentTime();ってやってたよ・・・
正しくは
today = COleDateTime::GetCurrentTime();だった。逝っとく。
0829デフォルトの名無しさんNGNG
標準のチェックボックスCCheckListBoxに対して、ビットマップパターンを
差し替えることってできますか?
ボタンだったら、CBitmapButtonでできるのですが・・・・
0830デフォルトの名無しさんNGNG
>>829
オーナードロー
0831デフォルトの名無しさんNGNG
いつもお世話になってます、また馬鹿な質問しますがあまり怒らないで下さい(;´Д`)
SDIウインドウの下に(ステータスバーの上)に、エディットボックスを追加したいけどどうすればいいんですか?
RPGらしきもの作ってますがチャット機能も追加しょうと思って、入力できる場所を用意しないといけないが、
一々ダイアログを出してはあまり美しくないので、エンターキーを押すと下のほうにエディットボックスが出てくれると
いいなーと思って、、 宜しくおねがいします。
0832ネット初心者NGNG
チャットソフトにファイル転送の機能をつけたいのですが、なにか簡単な方法ありますか?
分かりやすいサンプルあればいいんですが、、VCのサンプル分かりにくいですね。
CSocketFileとCArchive使うまでは分かったが、なかなか実装できない。なにかヒントでも、、
0833 NGNG
>832
ファイルを開いてその内容をチャットと同じ方式で転送。
0834デフォルトの名無しさんNGNG
秀丸みたいにCRichEditCtrlにハイパーリンク付けられますか?
文字のサイズや色を変える事しかわからないっす。
厨房質問でスマソ
0835デフォルトの名無しさんNGNG
>>834
秀丸などのエディタは、RichEditは使ってないよ。

で、EM_AUTOURLDETECT
ってのがあるけど、Win2000限定かも
0836マッハNGNG
ひとつの同じコマンドボタンを一回、二回と押すごとに、線を表示させることは
できるのでしょうか?そのとき、前に表示された線はそのまま残していきたいのですが・・。
0837デフォルトの名無しさんNGNG
>>836
できるよ。
0838デフォルトの名無しさんNGNG
>>834
自分で文字列を抽出してリンク張れば出来る。
0839デフォルトの名無しさんNGNG
MFCでVBにある、Hex(number)のような、
10進数から16進数への変換関数はないでしょうか?
あるのでしたら、関数名だけでも結構ですので教えてください。
0840デフォルトの名無しさんNGNG
>>839

16進数字列にしたいの?
MFCは知らないけど、sprintf()を使えば?

str=sprintf("%X",num);

こんな感じ。
0841840NGNG
あ、numは整数値ね。
もし、10進数字列を16進数字列にしたいのなら、atoiやatolを使って数値にしておいてね。

str=sprintf("%X",atoi(dec));
  
0842デフォルトの名無しさんNGNG
>>840-841
それじゃ、コンパイルが通らない
0843840NGNG
>>842

おおっと、Perlと勘違いした(汗

sprintf(str,"%X",num);
sprintf(str,"%X",atoi(dec));

だね(汗

サンクス!!
0844844NGNG
>>845
なんとか出来そうっす。
ヒントサンクス
0845間違えた鬱だし能NGNG
間違い>835サンクス
0846デフォルトの名無しさんNGNG
839です。
>>843さん
 ありがとうございます。
 sprintfでやってみます。
0847デフォルトの名無しさんNGNG
MFCならCStringのFormat()がありますよ。

CString strResult;
strResult.Format(_T("%X"), num);
0848まいったねNGNG
こんなロジックのプログラムがあったんだが・・

MFCのダイアログベースのプログラムなんですが

1) CTestAppでTestMainという関数をスレッド使って呼び込む
2) CTestAppでCTestDlgのダイアログを表示
3) TestMainの関数内のfor(;;)で永久ループ
処理としてグローバルにある終了フラグを見続ける
TRUEならWM_CLOCEをPostして終了
4) CTestDlgのダイアログ内で終了ボタンを押したらグローバルにある終了フラグをTRUEにする

ある特定ファイルそ検索してて見つかったらなにか処理をするというプログラムなんですが
せっかくスレッドを作ってやってもその中で永久ループしてるので意味無しでした・・
おかげさまでCPU稼働率が常に100%な業務アプリです^^;

これって普通の作り方なんでしょうか?
違うと思いたい・・・
0849デフォルトの名無しさんNGNG
>>848
イベントオブジェクトでも使ったらちっとはマシになる?
0850デフォルトの名無しさんNGNG
その3が、終了フラグを見るためだけにループしてるなら、最悪。
マルチスレッドとか、それ以前の問題。
とっととイベントオブジェクト+WaitFor〜系API使え
0851デフォルトの名無しさんNGNG
>>848
それが普通かどうかはともかく、
ループの中に Sleep(0); を入れるだけで
一気に負荷が減ります。
0852まいったねNGNG
やっぱりforでループさせといて終了フラグを待つなんてのは
かなーりボトルネックなってますよね。
0853デフォルトの名無しさんNGNG
CPUが複数あるんならいいんでない?
どうせあまってんだろ。
HDDもどうせATAだろうし(藁
0854デフォルトの名無しさんNGNG
ついでに監視スレッドの優先度も一個下げとけ。

だが二度とそんなクソプログラムは世に出すな
0855まいったねNGNG
私に引き継がれたんだが、私で5人目だ・・・
考えてみれば私以外皆、MFC初心者か大学出の新卒が作った奴だった^^;

ループの前ではSetTimer使って、タイマー使用フラグを立ててるだけ・・
ループ中にファイル検索して見つかったらメイン処理を行う。
うーん、素直にWM_TIMER拾ったらファイル検索してメイン処理したほうがいいような・・

やっぱりC言語初心者のやつが作った物はこんなもんなんだろうか

Sleepは試しましたが駄目でしたね。

あと残念ながらCPUは一つしかつんでませんので。
HDDはATAでした。
0856まいったねNGNG
まぁ、どうせその業務アプリしか動かないシステム構成になってるので
他アプリとの平行稼動しないから現時点ではさほど問題になっておりません。
0857デフォルトの名無しさんNGNG
>856
おまえは一体何を相談にきたのかと小一時間問いつめるYO!
愚痴ならプログラマ板いけや。
0858まいったねNGNG
>857
うーん愚痴になってしまいましたねごめんなさい。

作り方についての意見を聞きたかったのですが。
やっぱり普通のやりかたではなかったという皆様の意見が聞けましたので・・

皆様どうもありがとうございました。
0859まいったねNGNG
ついでにsage進行だったの気づかずにageてましたね。
雰囲気読めませんでした・・

今後気を付けます。
0860デフォルトの名無しさんNGNG
質問なのですが、
MFCでWebオブジェクトにあるWeb(test.htmとする)を表示して、
それに対してGetLocationName(またはURL)すると、当然test.htmが
取得できますが、ユーザー操作(リンククリック)によって
test.htmの中にあるリンクページ(link.htm)にジャンプしてから、
GetLocationNameすると、link.htmが得られそうなのに、
test.htmが戻ってきますね。

Webオブジェクトに現在表示されている最新のURLを取得する方法はありますか?
教えてください
0861デフォルトの名無しさんNGNG
ワーカースレッドを呼び出し元スレッドから終了させるために、フラグを使って

// ワーカースレッド内
if(*flg == 0)
  return 0;

などとしていますが、

CInternetSession session;
session.OpenURL(・・・);

if(*flg == 0)
  return 0;

などのようにフラグを判定する前に時間のかかる関数などを実行すると、
関数が返ってくるまで終了できません。
このような場合でもすぐにワーカースレッドを終了させるには
どうすればよいのでしょうか。
0862デフォルトの名無しさんNGNG
フォルダを開いた時に
名前、サイズ、種類等のデータが表示されますよね
ああいうのを作りたいのですが、MFCに用意されているのでしょうか?
0863デフォルトの名無しさんNGNG
Serializeがそうだと思うが・・・。
用意され過ぎていてどうやって動いてるのか判らん・・・・。
0864デフォルトの名無しさんNGNG
>>861 http://www.microsoft.com/japan/developer/library/vcmfc/_mfc_cinternetsession.htm
0865デフォルトの名無しさんNGNG
>>864
CInternetSessionを非同期で使えということですか?
セッション途中で通信を中止させるには具体的にどうすればよいのでしょう。
0866デフォルトの名無しさんNGNG
矢印キーが押されたのを
OnCharで検出できるのでしょうか?
0867デフォルトの名無しさんNGNG
つうか、そうゆう時はprint文かなんかでコード出す。
0868デフォルトの名無しさんNGNG
spy++使って調べろ
0869デフォルトの名無しさんNGNG
MetasequiaとかMayaとかでやっている
ツール起動時にタイトルウィンドウが表示される機能を
自分のツールに実装したいと思っています。

MFCでこれを実現するための便利な関数はあるのでしょうか?
どなたかご教授ください。よろしくお願いします。
0870デフォルトの名無しさんNGNG
>>869
起動してデータやファイルをロードしているときに
ウィンドウ一つ作って絵を表示してるだけちゃう…?
MFC にそれ専用の関数があるかは知らないな…。
0871デフォルトの名無しさんNGNG
スプラッシュあたりをキーワードにして調べればいろいろ
でてくると思うが。俺は詳しくないんでそれ以上はパス。
0872デフォルトの名無しさんNGNG
>>869
コンポーネントギャラリに入ってなかったっけ? >スプラッシュ
0873デフォルトの名無しさんNGNG
MFCでWebオブジェクトにあるWeb(test.htmとする)を表示して、
それに対してGetLocationName(またはURL)すると、当然test.htmが
取得できますが、ユーザー操作(リンククリック)によって
test.htmの中にあるリンクページ(link.htm)にジャンプしてから、
GetLocationNameすると、link.htmが得られそうなのに、
test.htmが戻ってきますね。

Webオブジェクトに現在表示されている最新のURLを取得する方法はありますか?


>>869
ダイアログ作成ー>絵を表示
起動処理
ダイアログ破棄
そのままです
0874デフォルトの名無しさんNGNG
WinAppとは別のスレッドからすべてのビューを更新するにはどうすればいいのでしょうか?
スレッドが違うとCWndなどは正常に動かないようなんで、Documentの
UpdateAllViews()を呼び出しても希望どうりの動作にはなりませんよね。

メインフレームにメッセージを送ってそのハンドラでUpdateAllViews()
を呼び出すようなコードを書かなければならないのでしょうか?
0875デフォルトの名無しさんNGNG
とりあえず聞くけどCWinThreadから派生してあげてる?
0876デフォルトの名無しさんNGNG
派生してあげてます。
0877デフォルトの名無しさんNGNG
質問です。

MFCでActiveXコントロールをActiveXコンテナにする方法を
教えてください。ActiveXコントロール上にActiveXコントロール
を貼り付けたいのです。

CDialogの上で、buttonとかlistboxは貼り付けて、
使うことができるんですが、コントロールギャラリで追加した
コントロールを使おうとすると起動中でエラーが出ちゃいます。
0878デフォルトの名無しさんNGNG
リソースエディタでダイアログにラジオボタンを配置。
そのボタンに対し、CButton::SetCheck
を使いたいのですが、どうすればよいのでしょう?
0879デフォルトの名無しさんNGNG
>> 878
ClassWizardで、メンバ変数を作りましょう。
グループ化もしなきゃ。
0880878NGNG
>>879
ありがとうございます。
グループ化っていうのは「プロパティ」→「グループ」のことですか?
0881デフォルトの名無しさんNGNG
そうですね。
0882SUMIONGNG
質問なのですが、
CEditコントロールにエディタ(メモ帳など)で書いた文章を出力したい
のですが、なにかうまい方法はありますかねえ?
0883デフォルトの名無しさんNGNG
>>882
コピペ
0884SUMIONGNG
>>882
えっと、言葉が足りなかったのですが、
(メモ帳などの)ファイルから「開く」という形で
出力したいんですよ。
0885!883NGNG
>>884
だから、「ファイルを開く」というイベントを受け取ったメソッドで、
ファイル読み込んでCEditに貼り付けするように組めばいいだろ。

それともCEditに「ファイルから読み込む」なんて機能が付いてると
思ってるのか?
0886デフォルトの名無しさんNGNG
ダイアログアプリならファイルをメモリに読み込んでSetSel, ReplaceSel(かWM_SETTEXT)

Doc-ViewならCDocument::OnOpenDocumentあたりでファイルからメモリに読み込む。
んでもってCView::OnUpdateあたりでDocumentからテキストを受け取ってSetSel, ReplaceSel(かWM_SETTEXT)
0887デフォルトの名無しさんNGNG
ボタンのラベルをビットマップにしたいんですけど
なにか方法はないですか?
CBitmapButton
あたりを使えばよいと思うんですけど
0888デフォルトの名無しさんNGNG
その通りだ
0889デフォルトの名無しさんNGNG
>>887
自己完結型Q&A
0890ゴンベエNGNG
CIPAddressコントロールでカッコよくIPアドレスを入力させそう
などと考えてた(←過去形)者です。
・・・で、詰まったんですけんど、
リソースエディタでIPAddressボックスをダイアログに貼り付け、ClassWizardで
メンバ変数としてCIPAddessを割り当てました。そして実際に使おうとしたら
なぜかメンバ変数が使えません。基本クラスのメンバは使えるのですが・・・
なぜなんでしょう? 結局あきらめてCStringで代用しましたが、気になって
仕方ありません。
0891デフォルトの名無しさんNGNG
VC++相談スレにも書いたのですが・・・。
二重書き込み申し訳ないです。

COleDataSource・COleDropTargetでドラック&ドロップを行っています。
COleDropTargetを設定しているViewでドロップを行うとOnDropがコールされますが、
COleDropTargetを設定していないViewでドロップを行ったのはどーやって判断すればいいですか?
0892デフォルトの名無しさんNGNG
ファイルを転送する機能を実装したいですが、具体的にはどうすればいいでしょうか?
ヘルプ見ても、CSocket→CSocketFile→CArchiveのコンボしか書いてないが、これはオブジェクトを送る
方法ですよね?
チャットのように、CFileから一行読んで→送信→受信→ファイルに一行書き込む というやり方でいけるでしょうか?
ネット初心者教えてクンで申し訳ない。
あと、CSocketとCAsyncSocketはどこが違うのかヘルプ何回良く分かりません。だれか簡単に説明してくれると
うれしいですm(_ _)m
0893ゴンベエNGNG
>>892
私も初心者なんであまり偉そうなことはいえませんが、解る範囲で。

>チャットのように、CFileから一行読んで→送信→受信→ファイルに一行書き込む というやり方でいけるでしょうか?
いけるとおもいますよ。普通にSendかSendtoで。CStringつかうと簡単です。
私はSendしか使ったことありませんが、Sendの中身はchar[]です。

CSocketとCAsyncSocketのちがいは色々あるみたいですけど、CSocketはブロッキングモード前提で、
CAsync(非同期の意味)の方は、基本的にコールバックでブロック制御するためのものみたいです。
0894890NGNG
・・・問題は解決されました。クラス名.(ドット)とやってもメンバが出なかったので使えないと勘違いしてました。
手入力したら普通にコンパイル通りました。(動作は確認してないけど)
でもおかしいですねー?afxcmn.hに記述されてますしね・・・??
0895デフォルトの名無しさんNGNG
ソケットにCArchiveを使うときには、フラッシュを忘れるな!
0896papaNGNG
どうしても分からないので教えて頂ければ幸いです。

キーが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);

としています。この条件下で
クラス内の別関数内で検索を掛けるとキーに対応した値を持ってこないのです。

なにぶんまだ未熟ではあるので質問も的を得ていないかもしれません。
宜しくお願い致します。
0897デフォルトの名無しさんNGNG
char *の値を比較しても意味がないぞ。
当たり前だのクラッシュ
0898sageNGNG
>>897
ちょっとウケタ>当たり前だの

まあいいや。
>>896
せいぜい文字列のハッシュ値をキーにするとか?
CMapのソース見たこと無いけど内部ではハッシュだったら
高速とか言っても無理だな。
0899デフォルトの名無しさんNGNG
std::mapとstd::string使えば?
std::mapと関数オブジェクトでもいいけど
0900デフォルトの名無しさんNGNG
Dialogで作成したMS WebBrowserオブジェクトから
CWebBrowser2クラスが作成されますが、
OnBeforeNavigateをオーバーライドすることができません。
オーバーライドするにはどうしたらよいのでしょうか?(CHtmlViewを用いずに)
教えてください
0901papaNGNG
>899
どうもありがとうございます。早速やってみます。
0902デフォルトの名無しさんNGNG
>>900
>OnBeforeNavigateをオーバーライドすることができません
OnBeforeNavigate2のこと?CHtmlViewメンバだけど・・・?
0903デフォルトの名無しさんNGNG
>893
ありがとうございます、とりあえず実装してみます。
0904デフォルトの名無しさんNGNG
質問あります
integerの値を stringに変えることは可能なのでしょうか?

string get_string(int value)
このようなfunctionで intの値を stringで戻したいのですが
おねがいします
0905デフォルトの名無しさんNGNG
sprintf(str,"%d",value);
でいいのでは。
0906デフォルトの名無しさんNGNG
#include <string>
#include <sstream>

std::string get_string(int value)
{
 std::stringstream ss;
 ss << value;
 return ss.str();
}

こんなの?
0907デフォルトの名無しさんNGNG
>>904
テンプレートクラスカヨ・・・
MFC限定のはずが・・・
CStringじゃ駄目なの?
0908デフォルトの名無しさんNGNG
ありがとうございました
まさにそれがやりたかったことです
string streamの 使い方がよく分からなかったので 助かりました
0909900NGNG
>>902
CHtmlViewメンバなのはわかっていますが、
Dialogで作成したMS WebBrowserオブジェクトから作成される
CWebBrowser2クラスには「OnBeforeNavigate2」が含まれていませんよね。

ヘッダで、
CWebBrowser2の親クラスをCWndではなく、CHtmlViewにしても
無事コンパイルはできたのですが、ブレークポイントを立てると、
オーバーライドした「OnBeforeNavigate2」は通過していません。

どなたか知恵をかしてください
0910デフォルトの名無しさんNGNG
>>904
get_string()じゃなくてto_string()とかにしてくれ
0911デフォルトの名無しさんNGNG
>>909
「Dialogで作成した」っていうのはダイアログにブラウザコントロールを貼り付けたって意味か?
OnBeforeNabigate2()はブラウザコントロールの親ウィンドウ(つまりダイアログ)につくるんじゃないの?
0912デフォルトの名無しさんNGNG
EXEファイルの小さいアイコンの変更の仕方を教えて下さい。
どうしてもMFCのアイコンになったまんまなのですが…。
0913デフォルトの名無しさんNGNG
>>912
上の方のコンボボックスをいじるべし。
0914デフォルトの名無しさんNGNG
>>913
上の方とはどこの事なんでしょうか?すいません、初心者で…
0915デフォルトの名無しさんNGNG
>>912
リソースエディタでアイコンを直接変更するのはダメなの?
それともこういうこと?
http://www.ylw.mmtr.or.jp/~akky/mfc/dlgicon.html
0916デフォルトの名無しさんNGNG
一つのアイコンファイルに複数のサイズの絵がおけることを知らないんだよ、きっと。
0917デフォルトの名無しさんNGNG
>>916
あぁそういうことか。
リソースエディタを開いて「32×32」とか
書いてあるコンボボックスを選択すればよいってことね。
0918デフォルトの名無しさんNGNG
(ノ゜O゜)ノおぉ〜!
上のコンボボックスの意味がやっとわかりました。
リソースのアイコンファイルの編集の時の話だったんですね。
僕はてっきりダイアログの設定でアイコンを指定すると
アイコンを自動的に小さく縮小しているものだと思ってました(汗)
小さいアイコンを作って解決出来ました。ありがとうございます。
0919909NGNG
>>911

まじですか?ブラウザコントロールの親(ダイアログ)となると
CDialogを継承しているだけなので、CHtmlViewの関数である
OnBeforeNabigate2()は呼び出せないと思いますが。

それとも、この親(ダイアログそのもの)をCHtmlViewから継承させる
ということですかね?

うーーん
0920デフォルトの名無しさんNGNG
>>919
いやそうじゃなくて ブラウザコントロールの「これからなびげーとするよ」メッセージのハンドラがOnBeforeNabivage2()ってことだろ。

CHtmlViewとブラウザコントロール(IWebBrowser2だっけか)の関係をよく考えてみろ。
0921デフォルトの名無しさんNGNG
ダブルクリックに対応するメッセージってあるんですか?
0922少しは調べろよNGNG
>>921
WM_LBUTTONDBLCLK
CWnd::OnLButtonDblClk
0923デフォルトの名無しさんNGNG
SDI+MFCで生成したウィンドウのテキストエリアにある
スクロールバーを消すにはどうしたらよいでしょうか?
0924デフォルトの名無しさんNGNG
>>922
ゴメン、サンクス
0925デフォルトの名無しさんNGNG
モーダルレスダイアログでユーザーにデータ入力して、メインウインドウの内容を変えるようにしたいんですが、
モーダルレスダイアログはどうやって呼び出す側にメッセージ与えるんですか?
例えば元のクラスの関数呼びたいときとか、、
いまは呼び出す側のポインタも貰って使ってるが、そうすると相互includeしてたまにおかしくなる。
クラス宣言の前にincludeするクラスを書いておけば通るが、なんか危なそうなので、、
0926デフォルトの名無しさんNGNG
>>925
ユーザ定義メッセージ
0927デフォルトの名無しさんNGNG
ああ、、(;´Д`)その手があったのか←逝って良し
closeのときメインの方にポストするんですか?
よーくわからないからヘルプ見てみる、、、
サンクス!
0928デフォルトの名無しさんNGNG
>>922
実はいい人
0929900,909NGNG
>>920

最近きづいたことなのですが、まず、自分のアプリはウィザードから
「ダイアログベース」として作成して、Webオブジェクトを貼り付けて
コントロールしています。

もしかして、CHtmlViewって、「SDI,MDI」ベースのアプリじゃないと
利用できないっぽくないですか?
こちらだと、問題なく、OnBeforeNavigate2はオーバーライドできますが・・・

問題点をまとめると、ダイアログベースのアプリで、あるWebオブジェクト
に対するCWebBrowser2クラスで「OnBeforeNavigate2」と同じことを
やりたいのです。

どなたかどうか知恵をかしてください
0930デフォルトの名無しさんNGNG
質問でございます。
WIN32(NT SP5)で、VC6のMFCで作成されたモジュールが実行されている環境です。
VCから起動している8つ程度のスレッドがおのおの
VBモジュールを呼び出し、そこで1個の名前付セマフォを取得しているような状態で、
VCから起動されたスレッドがランタイムエラーを出したときに、
VBが獲得した名前付セマフォが開放されず残っているようなのです。
そこでVBがつかんでいるセマフォを開放する手段はあるでしょうか?
ReleaseSemaphoreは自分がつかんでいるセマフォしか開放できないのでしょうか?

詳しい方教えてください。
0931デフォルトの名無しさんNGNG
>>929
だからぁ
ダイアログクラスで、ウエブブラウザコントロールの「これからナビゲートします」メッセージのハンドラを作ればいいだけじゃないの?

CHTMLViewクラスは内部にウェブブラウザコントロールを持っていて、「これからナビゲートします」メッセージのハンドラとしてOnBeforeNavigate2()が書かれているわけだろ?
君の場合はCHTMLViewがダイアログに変わるだけの話だろ?。

だまされたと思ってクラスウィザードで ダイアログクラスにウェブブラウザコントロールの「これからナビゲートします」メッセージのハンドラを作ってみてくれ。
それで何が不満なのか教えてくれ。

それともウェブブラウザコントロールの派生クラス自身でどうしてもやりたいのか?それならCHtmlViewの話がでてくるのはおかしくないか?

それとも俺はからかわれているだけなのか?
0932デフォルトの名無しさんNGNG
>>930
そのクソOCXを捨てなさい。
0933デフォルトの名無しさんNGNG
>CHtmlView
Viewはウィンドウではないのでメッセージはポストされません。
なのでダイアログの派生元をCHtmlViewにしてもメッセージハンドラは
呼ばれません。
0934900,909NGNG
>>931
いろいろありがとうございます。決してからかっていません。
それから、動作報告も必ずします。

これから試してみますが、933さんのような意見があると、ちょっと不安・・・
931さんを信じてみます
0935デフォルトの名無しさんNGNG
ダイアログベースのアプリケーションで
エディットコントロールなどを貼り付けてしまうと、
WM_CHARやWM_KEYDOWNなどがダイアログクラスで受け取れなく
なってしまいますけど、
いい対処法ってありますか?
0936900,909NGNG
>>931
やっぱり駄目でした

>だまされたと思ってクラスウィザードで ダイアログクラスに
>ウェブブラウザコントロールの「これからナビゲートします」メッセージの
>ハンドラを作ってみてくれ。

class CTestDlg : public CDialog
{
}
ダイアログクラスはこんな感じですが、
やはり、ClassWizardでは、OnBeforeNavigate2メッセージハンドラは
生成できないですね。

CDialogを継承するだけでは無理ぽい気もしますが・・・
かといって、

class CTestDlg : public CDialog,public CHtmlView
{
}

も駄目でしたし。
0937デフォルトの名無しさんNGNG
>やはり、ClassWizardでは、OnBeforeNavigate2メッセージハンドラは
>生成できないですね。
ClassWizardがないと、何もできない人のようですね:)
CHtmlViewくらい、改造してしまえばいいのに。
0938デフォルトの名無しさんNGNG
どうしてCHtmlViewのソースを見ないんだろう…
0939デフォルトの名無しさんNGNG
>>936
お前には本当にいらいらさせられるな。
ダイアログにブラウザコントロールを貼り付けるだろ。
クラスウィザードでダイアログのクラスを選択して オブジェクトIDでブラウザコントロールを選択するだろ。
そうするとそのブラウザコントロールのメッセージとしてBeforeNavigate2というのがあるだろ。
そのメッセージのハンドラを作れって二日前から延々言ってんだよ。

ダイアログベースのアプリなんだからCHtmlViewは全然関係ない。

メッセージハンドラを作るんだぞ!。オーバーライドじゃないぞ!。わかるか??
0940結構初心者NGNG
すいません。質問です。
文字列の内容を判断して実行させる、インタープリタもどきな機能をもたせたアプリケーションを
作りたいのですが、文字列の判断にif elseを連発して、いまいち見栄えがよくありません。
良い方法があったらどなたかレスお願いします。
0941デフォルトの名無しさんNGNG
>>940
yacc&lex
flex&bison
あたりをキーワードに何か探してみなさい
0942デフォルトの名無しさんNGNG
関数オブジェクトをstd::mapに入れる。見た目だけはいいぞ。トロいが。
0943デフォルトの名無しさんNGNG
>>939
なんつーか・・・なんだかんだで教えてやってるお前・・・優しいな
惚れちまいそうだ(ぽっ
0944940NGNG
>>941
>>942
ありがとうございいます。調べてみます。
ただ、トロいのには抵抗あります。トロさにもよりますが・・・。
0945942NGNG
>>944
多少のオーバーヘッドはあるにせよ、総当りでif elseを繰り返すよりは
比較回数減る分速いとは思うが、結局文字列比較繰り返してることには
変わらないからトロい。hash_mapならもうちょっと速いが標準じゃないし。

まぁ、yacc&lex使う根性がなくて、速度を求めないならアリって程度。
0946デフォルトの名無しさんNGNG
MFCならCMap?
0947940NGNG
>946
CMap!?
ザッツサウンドナイス(訳:根性なくてもできそうな響き♪)!!
それも見てみます。
0948デフォルトの名無しさんNGNG
VCでActiveXdll作った時、どこにコード書けばいいの?
0949デフォルトの名無しさんNGNG
>>942
遅いかどうか以前に、yacc と比べると受け付ける言語のクラスが限定されるのが痛いと思われ。
手で状態遷移を計算できる程度だと LR(1) なんて論外でしょ。
0950936NGNG
>>939
なるほど
うまくいきました。自分で間違って思い込みしていたところがあって、
ClassWizard立ち上げても見過ごしていました。
デバッガでも万事うまく通過しました!!
ありがとうございました
0951デフォルトの名無しさんNGNG
ちょっと失礼!

age。
0952デフォルトの名無しさんNGNG
言葉は汚いが、優しい人だ
>>936
0953デフォルトの名無しさんNGNG
どーせジサクジエンだろ?
俺は認めないぞ!
0954デフォルトの名無しさんNGNG
ちょっと教えてください
CBitmapButtonで管理している任意のビットマップボタンを
操作不能(マウスオンに反応せずノーマルボタン状態の画像が表示されたまま)
にするのはどうしたらよいのでしょうか?
EnableWindow(FALSE)だと、ボタンの画像すら描画されないですし。
0955デフォルトの名無しさんNGNG
>>954
EnableWindowでできますよ。
ボタンに割り当てる画像(操作不能時)のリソースIDを
"hogehogeX" にしてますよね?
0956デフォルトの名無しさんNGNG
>>1
そろそろ新スレたてるべきかと。
もういないかもしれないけど・・・
0957デフォルトの名無しさんNGNG
>>1じゃないけど

■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/test/read.cgi/tech/1008031675/
0958みゆNGNG
VC++6.0で
新規作成で
MFC AppWizard→ダイアログベース→***App
を選択したもので

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

このときダイアログのウィンドウクラス名をBに設定し
親のウィンドウクラス名をAにする方法もおしえてください
0959デフォルトの名無しさんNGNG
VC++6.0でNetscapeプラグイン形式のものを
IE6で動作させるためにActiveX化したいと
思っています。
機能は、ファイルアップロード、ダウンロードです。
お勧めの開発方法、書籍などあったら教えてください。
0960デフォルトの名無しさんNGNG
質問です。

あるスレッドを使ったプログラムをCOM化すると、
WaitForSingleObjectのところで応答が返ってきません。
どうやらスレッドが終了していないようなのですが、原因不明です。
COM化してない場合は問題なく動くのですが、
なにかご存知の方、いらっしゃいますでしょうか?
0961デフォルトの名無しさんNGNG
>>959-960
新スレ逝ってください。ageないでください。
http://pc.2ch.net/test/read.cgi/tech/1008031675/l50
レス数が950を超えています。1000を超えると書き込みができなくなります。