トップページ⇒tech
1001コメント291KB

■MFC相談室 mfc11.dll■

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/

関連リンクは >>2-10 の辺り。
0910デフォルトの名無しさんNGNG
バグかなぁ?
VC.NETじゃちゃんと同じになるんだけど・・・
0911デフォルトの名無しさんNGNG
>>907
ウィザードで作った後、手作業でデフォルト引数書くとかするしかないんじゃないかなぁ。
デフォルト引数のある関数にジャンプしないのは俺もよくある。
近くの関数にジャンプしてからスクロール…っていつもしてる。
こういう仕様なんだとあきらめてるよ。
0912デフォルトの名無しさんNGNG
>>909
同じ環境でやってみたけど、CLASS VIEWがおかしいみたい。
コンパイルは通る。
0913デフォルトの名無しさんNGNG
クラスビューは、あくまで作業の参考・手助け。
見た目が破損しててもコンパイル・ビルド作業への影響は一切ない。
0914907NGNG
>>910-913
意味は分かりませんがやっぱり仕様ですかねえ。
とりあえずUNICODEは使わないのでconst char *
でやっときます
0915デフォルトの名無しさんNGNG
CStringの中のTabSpaceの見分け方を教えて下さい。
削除したくて、Trimで色々やってみたのですが、うまいこといきません、
教えてエロイ人。
0916915NGNG
CString::Remove( '\t' );
で、解決しました・・・。
Trimに拘った、私が悪かったみたいです。
ご迷惑おかけしました〜。
0917デフォルトの名無しさんNGNG
VC6だったら、CString::Remove はバグあるから気をつけてね
0918デフォルトの名無しさんNGNG
どういうバグ?
0919デフォルトの名無しさんNGNG
>>918
2バイト文字が考慮されないっていうやつだろ、多分。
0920デフォルトの名無しさんNGNG
流れを壊すようですいません。
MFCはじめたばかりの初心者です。
質問ですが、ウインドウの背景を画像ファイルとして保存するにはどうすればいいのでしょうか。
いろいろ調べたのですが結局分かりませんでした。
環境はこのとおりです
OS:WindowsXP SP1
VC++.NET 2003

お願いします。どなたか教えてください。
0921デフォルトの名無しさんNGNG
>>920
読み出しなら ::LoadImage でできるが
書き込みのサポートはないから、思いっきり自力で書くことになる。

http://pc5.2ch.net/test/read.cgi/tech/1092524669/883-
0922デフォルトの名無しさんNGNG
>>920
CImageにアタッチすれば、CImage::Save()で保存出来るよ。
今ホットなGDI+を使うことになるけど。
0923デフォルトの名無しさんNGNG
>>921-922
ありがとうございました m(_ _)m
0924デフォルトの名無しさんNGNG
MFC ActiveX Controll WizardでActiveXコントロールを作っています.
作成したコントロールはVBでFormなどに貼り付けて使う予定です.
コントロールは実行時に他のDLLやファイルなどを読み込む必要があり,
ターゲットとなるexeのカレントパスを取得してファイルなどを読み込む処理を
コントロールのクラスのOnCreateメソッド(?)に書きました.
しかし,OnCreateではVBなどでコントロールをFormに貼り付けた時点で
実行されてしまうため,実行時のexeのパスを取得する部分を利用して
ファイルなどを読み込む処理でエラーが起きてしまいます.
プログラムが実行されるときに
一度だけ処理されるメソッドやイベントはあるば教えて頂きたいのですが.

環境 VC6.0 VB6.0 WinXP

0925デフォルトの名無しさんNGNG
>>924
DllMain()でやればいいんじゃないの。
0926924NGNG
>>925
なんか,あまり一般的では無さそうですね>DLLMain
「DLLmain OCX」でぐぐってみましたが,50件も出てきませんでした.
0927デフォルトの名無しさんNGNG
>>926 (;´Д`)・・・
0928デフォルトの名無しさんNGNG
mfc-mlで同じ質問・・・
0929デフォルトの名無しさんNGNG
デバッグ版とリリース版ってメモリ領域の確保(解放)の仕方が違うんですかね?

new演算子で確保したメモリ領域を解放する処理は明示的に行っているんですが、
デバッグ版⇒CWinApp::Exitinstanceが実行される前に(明示的記述したタイミングで)、
      メモリ解放処理が完了する。
リリース版⇒CWinApp::Exitinstanceが実行された後に、メモリ解放処理が完了する。
上記のような動きをしているみたいなんです。

メモリ解放処理後に、終了コードを各プロセスを管理しているプロセスに通知しているため
リリース版では管理プロセスが終了コードを受信した時にも、
対象のプロセスが動き続けていることになってしまいます。

こんな現象に関してご存知の方いらっしゃいましたらぜひご教授をお願いします。
0930デフォルトの名無しさんNGNG
パス
0931デフォルトの名無しさんNGNG
>>929
ソース読んでみれば?
0932デフォルトの名無しさんNGNG
>>929
デバッグ版 DEBUG_NEW を定義せず
リリース版 最適化全てオフ
でテストしてみそ
0933デフォルトの名無しさんNGNG
PostMessage()でメッセージを順番に送るとき、受け取る側で順番が入れ替わったり
する事はありますか?
0934デフォルトの名無しさんNGNG
キューなんだからそんなことないはず。
0935デフォルトの名無しさんNGNG
>>933
あるらしい

>>934
メッセージにも優先順位があるらしく、マウスイベントが
他のイベントより優先される場合もあるらしいよ
0936デフォルトの名無しさんNGNG
>>935
マウスイベントはメッセージキューを通らないで直接ウィンドウプロシージャへ行くメッセージじゃないか?
0937デフォルトの名無しさんNGNG
>>936
そうかも
「PostMessageでは試したことないけど」って言うの忘れた
0938933NGNG
どもです。
同じ系統のメッセージの順番のみが問題ですんで、他のメッセージの割り込みは問題にならないです。
とりあえず大丈夫なものとしてやってみます
0939デフォルトの名無しさんNGNG
>>936
へ?
0940デフォルトの名無しさんNGNG
BITMAPINFOに256カラーのビットマップ、256色のグレースケールのパレットを用意しました。
このBITMAPINFOとビットマップの高さが増すにつれパレット番号を増加させるデータをもちいて
CreateDIBitmapにセットしてグラデーションのビットマップを作りました。(作ったつもり。)

これをメモリデバイスコンテキストでSelectObjectしてからディスプレイ(24bit)のDCにBitBltしたのですが、
この場合256カラー(パレットあり)を変換して24bitカラーのビットマップになってくれるとおもったのですが
どうもパレットデータはシステム内部のものをつかって描画してるっぽいんですがなぜですか?
そういうものですか?
0941デフォルトの名無しさんNGNG
「つもり」の部分が間違っていると思われ。
0942デフォルトの名無しさんNGNG
ビットマップの中のDLLを呼び出したいんですが、

HINSTANCE hInst;
hInst = LoadLibrary("Graphics.dll");

HBITMAP hBitmap;
hBitmap = LoadBitmap(hInst, "IDB_BITMAP1");

とやっても、hBitmap == NULLになってしまってビットマップを読み込めません。
僕のどこが間違ってるんでしょうか。
0943デフォルトの名無しさんNGNG
dllはMFC用のやつですハイ
0944デフォルトの名無しさんNGNG
>>942
全体的に間違ってると思います。1行目とか。
その DLL には本当に "IDB_BITMAP1" というビットマップが入ってますか?
MAKEINTRESOURCE(IDB_BITMAP)の間違いではないのですか?
0945デフォルトの名無しさんNGNG
>>944
1行目書きなおしたら変になってしまいました
自分で作ったDLLなんで IDB_BITMAP1 が入ってるのは間違いないはずなんですが、どうもそれだと読みこめなかったみたいで、
MAKEINTRESOURCE(1000);
と直接リソースIDで指定してもう一度やってみたら読み込めました。
なんでこれだとできるのか分かりませんが、とりあえず解決したみたいです。ありがとうございました。
0946デフォルトの名無しさんNGNG
>なんでこれだとできるのか分かりませんが

それがわかるまで先に進むな
一歩たりとも
0947デフォルトの名無しさんNGNG
>>9
MFCなんか嫌いだぁ

>>933
キューの中では順序通りでも PeekMessage で優先して取り出せるでしょ
DispatchMessageが中で何してるかは知るか。

>>940
パレットは別に CreatePaletteとSelectObjectでセットするんだったような
GDI+への対応はいつになるんだ?

>>945
まず無理だろうが、Graphics.dllのソースの中にある resource.h をインクルードしてみるといい。
これがMFCというやつだ。
0948デフォルトの名無しさんNGNG
>>947 初心者のかたは、回答はお控え下さい。
0949デフォルトの名無しさんNGNG
>>945
断言していい。
入ってない。
そういうあいまいな認識でコード書くと周りに甚大な被害を及ぼすからやめてくれ。

>>947
引っ込め。
0950デフォルトの名無しさんNGNG
>>947
これほど的外れな回答も珍しいな。
0951デフォルトの名無しさんNGNG
ピクチャーボックスに表示されている画像を取り込んで保存しているのですが
どうも一回目は保存されなく2回目から保存されます。
いろいろと設定しているですがうまくいきません
どなたか教えてくださいませ
ソフト visualstadio 6.0
OS  win xp

ビットマップインフォを作成する
DDBを作成してウィンドウからビットマップをコピー
メモリ割り当ててビットマップからデータを取得
ビットマップファイルヘッダーを作成
データをファイルへセーブ の手順でやっています
hfile = CreateFile(fn,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
WriteFile(hfile ,&bmfh,sizeof(bmfh),&tmp,NULL);
WriteFile(hfile,&pbmi->bmiHeader,sizeof(pbmi->bmiHeader),&tmp,NULL);
if(pbmi->bmiHeader.biBitCount <= 8)
{
WriteFile(hfile,pbmi->bmiColors,sizeof(COLORREF)*(1<<pbmi->bmiHeader.biBitCount),&tmp,NULL);
}
SetFilePointer(hfile,bmfh.bfOffBits,NULL,FILE_BEGIN);
WriteFile(hfile,pbits,pbmi->bmiHeader.biSizeImage,&tmp,NULL);
CloseHandle(hfile);
0952デフォルトの名無しさんNGNG
MFCをこれから勉強しようと思っていますが
オススメの書籍等あれば教えていただけませんでしょうか?
0953デフォルトの名無しさんNGNG
>>951
・1回目に保存処理が走っているのか確認
・各APIの戻り値を確認
0954デフォルトの名無しさんNGNG
>SetFilePointer(hfile,bmfh.bfOffBits,NULL,FILE_BEGIN);
これ?
0955デフォルトの名無しさんNGNG
>>952
VCそのものを全く知らん状態で始めるならとりあえず入門書として
林晴比古の本なんかを薦めてみるが、取っ掛かりだけ掴めれば
後は余程専門的な事をやらない限りはネットで調べた方が早いし
詳しい情報が載ってる。
0956デフォルトの名無しさん NGNG
MFCアプリウィザードで作ったダイアログについて。
CDialgを継承したクラスに
WaitForSingleObject()を使って
常に特定のイベントがシグナルか監視する
独立した関数を作りたいのですが
良い方法はありませんか?
良かったら教えてください。
0957デフォルトの名無しさんNGNG
スレッド。
0958デフォルトの名無しさんNGNG
>>951
関係ないけどFILE_SHARE_WRITEはやめといた方が・・・
0959デフォルトの名無しさんNGNG
>>952

>>955に同意。
ただし、MFC入門書は良書が多いので問題ないけど、
その後をどう進むかだね。
C++の専門書(入門書でなくSTLに触れていて、テンプレート関連が充実)
を読むのが良いかも。
0960デフォルトの名無しさんNGNG
質問

環境:WinNT、VC6.0
でMFC使ってる者です
BOCのFlexGrid使ってるんですが
これのツリービューを作っているんですが
状態の保持が上手く出来ません
ツリーのオブジェクトを削除したり置換したりすると
縮めたオブジェクトが展開されてしまいます
0961デフォルトの名無しさんNGNG
>>960
BOC(現GrapeCity)ならサポートが丁寧だから向こうに聞いたら?
Gridでなんでツリーなのかよく判らんが。
0962デフォルトの名無しさんNGNG
>>960
で、質問は何なの?
0963デフォルトの名無しさんNGNG
MFC用のDLLはVisual Basicからも呼び出せます
0964デフォルトの名無しさんNGNG
か?
0965デフォルトの名無しさんNGNG
どうも951です
現在2chブラウザ使えないの状況下なのでこうなってます
>>958さん
FILE_SHARE_WRITEはやめといたほうがいいといいますがそれはどういうこと
ですか?
>>954さん
一応命令は削除してみましたが変化は見られませんでした
>>953さん
APIはすべて確認したところすべて正常でした
自分の考えでは再描画系に問題があったのではないかと判断しております

みなさま、ご意見ありがとうございました。
0966デフォルトの名無しさんNGNG
タイヘン恐縮なのですがみなさまご教授ねがいと思います

ピクチャーボックスの枠を消去したいのですがネットで方法を
探しているのですが見つかりません
どなたかおしえてくださいませ
0967デフォルトの名無しさんNGNG
>>966
ビットマップスタイル
0968sageNGNG
ビットマップスタイル?
0969デフォルトの名無しさんNGNG
ビットマップTypeか
0970デフォルトの名無しさんNGNG
>>965
>FILE_SHARE_WRITEはやめといたほうがいいといいますがそれはどういうこと

denyじゃなくてshareだぞ。
複数の書き込みオープンを許すんだぞ。
0971デフォルトの名無しさんNGNG
WS_EX_CLIENTEDGE
0972デフォルトの名無しさんNGNG
>>966ピクチャーボックスじゃなくて CPictureHolder
0973デフォルトの名無しさんNGNG
CSplitterWndを動的分割ウィンドウで使う場合は
ネストって出来ないんでしょうか?
ネストした子側のウインドウサイズが0x0になっていて
うまく動作しませんでした。
親側のビューをDeleteView()やGetPane()->DestroyWindow()などで
削除してみたりしたんですが変わりませんでした。
よろしくお願いします。
0974デフォルトの名無しさんNGNG
こちらの方が適当と誘導されたので、再度質問させてください。

707 名前:デフォルトの名無しさん[sage] 投稿日:04/10/02 19:32:00
質問です。
メインのダイアログ(MainDlg)にタブコントロールを貼り付けて
PropertySheet(CPage3)を作成し、その上にRadioButton(IDC_RADIO1)を貼り付けました。

で、CPage3.hのメンバ変数に
public:
CButton *m_pButton1;
と書いて
CPage3.cppに
CPage3::CPage3()
: CPropertyPage(CPage3::IDD)
{
m_pButton1=(CButton*)GetDlgItem(IDC_RADIO1);

}
と書きました。
で、MainDlg.cppのOnInitDialog()
に、m_pPage3->m_pButton1->SetCheck(1);
と書きました。
ちなみにこの動作を入れなければ、タブコントロールもきちんと動いてますし、他のコントロールへの操作も出来てます。
しかしこれを入れると、実行時に不正な処理を行いました。 と言われます。
何故でしょうか?
VC++.NET2003でMFCを使ってます。
宜しくお願いします。

0975デフォルトの名無しさんNGNG
>>973
やったことあるので出来ると思います。
CSplitterWnd のソースだかどっかにうんこのようなASSERTが入ってた気がするので
オーバーライドとかで回避しないとデバッグ時に死ぬ。
0976デフォルトの名無しさんNGNG
すごい、簡単なことかもしれませんがあえてお聞きします
CString型 に改行文字を入れることは可能なのか
CString型 に改行文字を入れた状態でファイル書き込みWriteFileを
行った場合改行されるものなのですか?
自分はやってみたのですが無理でした
CString a="aiueo"+'\n';
すいませんが教えてください。
0977デフォルトの名無しさんNGNG
CString a="aiueo"+'\n';
↑なんじゃこりゃ

・・・ポインタと整数の足し算だからエラーも警告も出ないのか・・・。
0978デフォルトの名無しさんNGNG
>>976
可能。
Windowsでは改行を "\r\n" の2文字であらわしているので、
CString a="aiueo\r\n";
0979973NGNG
>>975
情報ありがとうございました。
さっそくやってみます。
0980デフォルトの名無しさんNGNG
>>978
バッファにいれとく限りにおいては、「\n」だけで良いんじゃないか?
テキストモードにしとけば、ファイルへの出力の時に内部処理で\r\nになる。
0981デフォルトの名無しさんNGNG
WriteFileにテキストモードなんかあったっけ?
0982デフォルトの名無しさんNGNG
>>978さんどもです
そのとおり実行できましたー
ありがとうございます
0983デフォルトの名無しさんNGNG
>>981
CStdioFile使う手はある。
0984デフォルトの名無しさんNGNG
またまた質問で申し訳ないのですが
CFileDialogを使って任意でファイルを保存するようにしているのですが
すでにあるファイルを、上書きしようとしたら警告がでません。
拡張子をつけた状態では警告文はでるのですがわざとファイル名から拡張子を
消してみると今度は警告がでません。おそらくファイル名の文字列が
違うので警告文がでないのは承知なのですが拡張子は同じはずなので
警告がでてほしいのですが、対処方法がわかりません、すいませんがご教授
お願いいたします
CFileDialog myDLG(FALSE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"ビットマップ(*.bmp)|*.bmp||");
if(myDLG.DoModal() != IDOK) return;
0985デフォルトの名無しさんNGNG
コモンダイアログ使っておきながら myDLG ですか?
0986デフォルトの名無しさんNGNG
>>985
いいからもう寝ろ。
0987デフォルトの名無しさんNGNG
>>974
コンストラクタではタイミング的に早すぎて、
GetDlgItem(IDC_RADIO1)が成功しないんだと思う。
OnInitDialog()内で行ってみては?

0988デフォルトの名無しさんNGNG
OFN_FILEMUSTEXIST
0989デフォルトの名無しさんNGNG
上書きしか許さないとは斬新なUIだな
0990デフォルトの名無しさんNGNG
OPENFILENAME構造体を直接指定する生のAPI使えばいいのに・・・。
GetOpenFileName()、GetSaveFileName()あたりを参照。

MFCのCFileDialogはAPI並に面倒くさいわりに得られるメリットが薄く、
ぶっちゃけ必要ないクラスのひとつ。
下位互換のための存在だと思って差し支えない。
そんなわけで素直にAPI使っとけ。
0991デフォルトの名無しさんNGNG
次スレまだ〜
0992デフォルトの名無しさんNGNG
まだかよ
0993デフォルトの名無しさんNGNG
まだだよ
0994デフォルトの名無しさんNGNG
質問です。
ダイアログベースのアプリにタブコントロールを配置して、PropertySheetを挿入してるのですが
途中でもう一度新しくPropertySheetのインスタンスを生成して、タブコントロールに挿入したいのですが
追加と言う形になってしまいます。
どうすれば全部破棄した後、挿入出来るのでしょうか?

宜しくお願いします。
0995デフォルトの名無しさんNGNG
>>994
無理
0996デフォルトの名無しさんNGNG
age
0997デフォルトの名無しさんNGNG
埋め
0998デフォルトの名無しさんNGNG
梅
0999デフォルトの名無しさんNGNG
梅尾
1000デフォルトの名無しさんNGNG
ヨン様
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。