■MFC相談室 mfc11.dll■

このエントリーをはてなブックマークに追加
938933:04/09/28 22:41:17
どもです。
同じ系統のメッセージの順番のみが問題ですんで、他のメッセージの割り込みは問題にならないです。
とりあえず大丈夫なものとしてやってみます
939デフォルトの名無しさん:04/09/29 00:24:05
>>936
へ?
940デフォルトの名無しさん:04/09/29 19:53:29
BITMAPINFOに256カラーのビットマップ、256色のグレースケールのパレットを用意しました。
このBITMAPINFOとビットマップの高さが増すにつれパレット番号を増加させるデータをもちいて
CreateDIBitmapにセットしてグラデーションのビットマップを作りました。(作ったつもり。)

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

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

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

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

それがわかるまで先に進むな
一歩たりとも
947デフォルトの名無しさん:04/09/30 03:16:40
>>9
MFCなんか嫌いだぁ

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

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

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

>>947
引っ込め。
950デフォルトの名無しさん:04/09/30 12:29:16
>>947
これほど的外れな回答も珍しいな。
951デフォルトの名無しさん:04/09/30 20:41:04
ピクチャーボックスに表示されている画像を取り込んで保存しているのですが
どうも一回目は保存されなく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);
952デフォルトの名無しさん:04/09/30 20:43:55
MFCをこれから勉強しようと思っていますが
オススメの書籍等あれば教えていただけませんでしょうか?
953デフォルトの名無しさん:04/09/30 20:52:37
>>951
・1回目に保存処理が走っているのか確認
・各APIの戻り値を確認
954デフォルトの名無しさん:04/09/30 21:00:54
>SetFilePointer(hfile,bmfh.bfOffBits,NULL,FILE_BEGIN);
これ?
955デフォルトの名無しさん:04/09/30 22:23:05
>>952
VCそのものを全く知らん状態で始めるならとりあえず入門書として
林晴比古の本なんかを薦めてみるが、取っ掛かりだけ掴めれば
後は余程専門的な事をやらない限りはネットで調べた方が早いし
詳しい情報が載ってる。
MFCアプリウィザードで作ったダイアログについて。
CDialgを継承したクラスに
WaitForSingleObject()を使って
常に特定のイベントがシグナルか監視する
独立した関数を作りたいのですが
良い方法はありませんか?
良かったら教えてください。
957デフォルトの名無しさん:04/09/30 22:59:47
スレッド。
958デフォルトの名無しさん:04/09/30 23:34:27
>>951
関係ないけどFILE_SHARE_WRITEはやめといた方が・・・
959デフォルトの名無しさん:04/10/01 07:54:32
>>952

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

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

みなさま、ご意見ありがとうございました。
966デフォルトの名無しさん:04/10/02 17:19:53
タイヘン恐縮なのですがみなさまご教授ねがいと思います

ピクチャーボックスの枠を消去したいのですがネットで方法を
探しているのですが見つかりません
どなたかおしえてくださいませ
967デフォルトの名無しさん:04/10/02 17:24:35
>>966
ビットマップスタイル
968sage:04/10/02 17:37:10
ビットマップスタイル?
969デフォルトの名無しさん:04/10/02 17:41:26
ビットマップTypeか
970デフォルトの名無しさん:04/10/02 17:58:32
>>965
>FILE_SHARE_WRITEはやめといたほうがいいといいますがそれはどういうこと

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

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を使ってます。
宜しくお願いします。

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

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