Microsoft Foundation Classライブラリ専用スレです。
■MFC相談室 mfc21d.dll■
http://hibari.2ch.net/test/read.cgi/tech/1250919279/l50
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(v=VS.100).aspx
探検
MFC相談室 mfc23d.dll [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2016/09/21(水) 00:20:48.44ID:OfO+mYkd137デフォルトの名無しさん
2017/12/26(火) 20:03:16.51ID:U4eSFsG2 CMFCVisualManagerでたぶんあっています。
mfcのコンパイルオプションをUnicodeモードにすると、ラジオボタンの見た目が変わることは分かったのですが、ANSI(ShiftJIS)モードでコンパイルしたいのです。
今気になっているのは、manifestファイルを追加してみようと思います。
http://gurigumi.s349.xrea.com/programming/visualcpp/sdk_luna.html
mfcのコンパイルオプションをUnicodeモードにすると、ラジオボタンの見た目が変わることは分かったのですが、ANSI(ShiftJIS)モードでコンパイルしたいのです。
今気になっているのは、manifestファイルを追加してみようと思います。
http://gurigumi.s349.xrea.com/programming/visualcpp/sdk_luna.html
138デフォルトの名無しさん
2017/12/26(火) 20:28:21.70ID:SQt/8UlT139デフォルトの名無しさん
2017/12/26(火) 21:53:49.91ID:lgrMwj5m マルチバイト文字モードでコンパイルした場合の見た目の違いです。DDXControlで左はCButton右はCMFCButtonとひもづけました。
https://i.imgur.com/4qA7an3.jpg
https://i.imgur.com/4qA7an3.jpg
140デフォルトの名無しさん
2017/12/26(火) 22:19:37.75ID:lgrMwj5m やはりmanifestファイルのようです。マニフェストファイルでラジオボタンは変化しました。
マニフェスト適用後
https://i.imgur.com/JqRoqH4.jpg
マニフェスト適用前
https://i.imgur.com/lC9fLyO.jpg
マニフェスト適用後
https://i.imgur.com/JqRoqH4.jpg
マニフェスト適用前
https://i.imgur.com/lC9fLyO.jpg
141デフォルトの名無しさん
2017/12/30(土) 19:20:54.71ID:W7MN//Qp このスレはVisualStudioの使い方、
質問はアプリケーションの作り方
微妙に違うといえば違う。
かといって誘導出来る適当なスレは見当たらない
MFCのスレくらいかな
質問はアプリケーションの作り方
微妙に違うといえば違う。
かといって誘導出来る適当なスレは見当たらない
MFCのスレくらいかな
142デフォルトの名無しさん
2017/12/30(土) 20:06:14.31ID:k3f51DlY mfcのスレでmfcのクラスに関する質問をしていますよ。
143デフォルトの名無しさん
2018/01/06(土) 20:47:11.78ID:wtVvXwwo Excelでキャレットの無い状態から日本語入力をするとテキストボックス?が現れて文字が未確定状態で表示されますが
同様な動きををCViewとCEditでやろうとしています。
以前はViewのOnCharからCEditにWM_CHARをポストすることで普通に動いていたのですが、OSの仕様が変わったのか
最初の1文字が確定状態で表示されてしまいます。ATOKもMS-IMEも同じです。
何かヒントがあれば教えてください。
同様な動きををCViewとCEditでやろうとしています。
以前はViewのOnCharからCEditにWM_CHARをポストすることで普通に動いていたのですが、OSの仕様が変わったのか
最初の1文字が確定状態で表示されてしまいます。ATOKもMS-IMEも同じです。
何かヒントがあれば教えてください。
144デフォルトの名無しさん
2018/01/11(木) 02:22:52.84ID:azQtlc4c excelでキャレットの無い状態というのがわかりません。^が無い状態で入力を開始するのでしょうか?
145デフォルトの名無しさん
2018/01/11(木) 22:28:59.70ID:nH81YmjO146デフォルトの名無しさん
2018/01/11(木) 22:30:38.90ID:nH81YmjO 文字入力時に点滅する「I」のような記号がキャレットです。
147デフォルトの名無しさん
2018/01/12(金) 22:01:33.38ID:mgMC0phM 回答になっているかどうか分からないのですが、CViewクラスではない場合でCListCtrlクラス内にCEditを貼り付けて、そのCEdit上で編集をする例は有ります。
CView上にCEditを張り付けているような応用にもかなるかもしれませんので、例を上げます。
http://www.softist.com/programming/listctrl-edit/listctrl-edit.htm
CView上にCEditを張り付けているような応用にもかなるかもしれませんので、例を上げます。
http://www.softist.com/programming/listctrl-edit/listctrl-edit.htm
148デフォルトの名無しさん
2018/01/13(土) 18:52:00.81ID:CyFncowx149デフォルトの名無しさん
2018/01/29(月) 00:24:27.95ID:lYpQ/Knz すみませんお助けください
親ウインドウにテキストボックスとボタン、ボタンを押すとdomodalでウインドウが呼び出されます
その子ウインドウにはリストボックスがあって、そこには親のテキストボックスに入力された文字が表示される
そういうものを作ろうとしています
親テキストボックスの変数名がm_input
setvalueでプライベートにしてるリストボックス変数にそれを格納しています
ですがこれですとウインドウは表示されてもリストボックスはからっぽです。
一体何が悪いのでしょうか
void 親ウインドウクラス名::OnBnClickedButton1()
{
PopupDlg pdlg;
UpdateData(TRUE);
pdlg.setValue(m_input);
pdlg.DoModal();
UpdateData(FALSE);
}
親ウインドウにテキストボックスとボタン、ボタンを押すとdomodalでウインドウが呼び出されます
その子ウインドウにはリストボックスがあって、そこには親のテキストボックスに入力された文字が表示される
そういうものを作ろうとしています
親テキストボックスの変数名がm_input
setvalueでプライベートにしてるリストボックス変数にそれを格納しています
ですがこれですとウインドウは表示されてもリストボックスはからっぽです。
一体何が悪いのでしょうか
void 親ウインドウクラス名::OnBnClickedButton1()
{
PopupDlg pdlg;
UpdateData(TRUE);
pdlg.setValue(m_input);
pdlg.DoModal();
UpdateData(FALSE);
}
150デフォルトの名無しさん
2018/01/29(月) 09:13:09.91ID:TsZXtod4151デフォルトの名無しさん
2018/01/30(火) 19:55:15.15ID:JKI/Ug3X すっかり遅くなったけど申し訳ない
oninitdialogに処理書いたらなんとかなりました
oninitdialogに処理書いたらなんとかなりました
152デフォルトの名無しさん
2018/02/08(木) 23:58:28.60ID:/8AuktPL MDIウィンドウの場合で、メニューのフォントとフォントサイズは変えられますか?
ツールバーの右端に出てくるボタンの表示非表示を無くすことは出来ますか?
ツールバーの右端に出てくるボタンの表示非表示を無くすことは出来ますか?
153デフォルトの名無しさん
2018/02/09(金) 09:43:56.52ID:DYanFj/G >>152
MFC Feature Packのメニューやツールバーのことなら、
> メニューのフォントとフォントサイズ
CMFCMenuBar::SetMenuFont
> ボタンの表示非表示
CMFCToolBar::EnableCustomizeButton
MFC Feature Packのメニューやツールバーのことなら、
> メニューのフォントとフォントサイズ
CMFCMenuBar::SetMenuFont
> ボタンの表示非表示
CMFCToolBar::EnableCustomizeButton
154デフォルトの名無しさん
2018/02/09(金) 22:24:50.30ID:n0NVuMox ありがとうございます!試してみます。
155デフォルトの名無しさん
2018/02/10(土) 15:55:33.49ID:AljsEXlF あれ?
CListViewなくなったん?
ウイザードにないw
CListViewなくなったん?
ウイザードにないw
156デフォルトの名無しさん
2018/02/10(土) 19:51:23.23ID:kahd5R/F SDIかMDIを選んでいれば、ウイザードの最後の項目でViewを選択できるはずです。選ぶ中にCListViewは有るはずです。
157デフォルトの名無しさん
2018/02/10(土) 20:30:44.41ID:9BceoeeN ないんだなーこれが
158デフォルトの名無しさん
2018/02/10(土) 23:11:10.45ID:tnD/bf0m そんなわけ無いだろうと思ったけど、無いね..
CListViewは存在するけどウィザードでは選択できなくなったのか
結構便利なクラスだと思うんだけどな
CListViewは存在するけどウィザードでは選択できなくなったのか
結構便利なクラスだと思うんだけどな
159デフォルトの名無しさん
2018/02/10(土) 23:55:46.38ID:9BceoeeN だろー
昨日から三回も再インストールしてる
昨日から三回も再インストールしてる
160デフォルトの名無しさん
2018/02/11(日) 00:27:35.71ID:Abk6WT5B 確かに2017communityでは、無くなっています。2013Communityには有るようです。
161デフォルトの名無しさん
2018/02/11(日) 14:12:45.40ID:TT4/yggk 一応、MSに連絡
162デフォルトの名無しさん
2018/02/11(日) 17:09:15.62ID:NeODdjx3 まぁこのへんの仕組みはもう変わらないだろうし、
適当なものを選んでから書き直しても問題ないけどな。
適当なものを選んでから書き直しても問題ないけどな。
163デフォルトの名無しさん
2018/02/12(月) 00:23:21.23ID:gJKrDJtj TreeViewぐらいで
164デフォルトの名無しさん
2018/02/16(金) 06:26:23.85ID:W1XJdyx1 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
165デフォルトの名無しさん
2018/02/17(土) 09:44:17.48ID:skmHixeO ウィザードのCListViewの話
去年にはもうあった話題やん
もうちょっと頑張ってくれよ
https://developercommunity.visualstudio.com/content/problem/135607/vs-1541-vcmfc-application-wizard-cant-select-listv.html
去年にはもうあった話題やん
もうちょっと頑張ってくれよ
https://developercommunity.visualstudio.com/content/problem/135607/vs-1541-vcmfc-application-wizard-cant-select-listv.html
166デフォルトの名無しさん
2018/02/28(水) 17:21:10.04ID:C00JEheo167デフォルトの名無しさん
2018/02/28(水) 18:28:27.62ID:8m4UvZqy ソースが付いてるんだから読みなよ
168デフォルトの名無しさん
2018/03/01(木) 12:14:56.76ID:AHCBMzq/ >>166
とりあえずこんな感じで書けば変わる。
ただ、あまり大きくすると、縦にドッキングしたときに文字が欠ける。
最新バージョンなら直っているのかもしれないけど、
自分のアプリではメニューは上部固定なので、深くは調べていない。
> メニューのフォントとフォントサイズ
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(metrics);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0);
LOGFONT lfMenu = metrics.lfMenuFont;
_tcscpy_s(lfMenu.lfFaceName, _T("MS P明朝"));
lfMenu.lfHeight = -24;
CMFCMenuBar::SetMenuFont(&lfMenu);
lfMenu.lfOrientation = 900;
lfMenu.lfEscapement = 2700;
CMFCMenuBar::SetMenuFont(&lfMenu, FALSE);
> ボタンの表示非表示
m_wndToolBar.EnableCustomizeButton(TRUE, -1, _T(""), FALSE);
もしくは、EnableCustomizeButtonを呼ばない。
とりあえずこんな感じで書けば変わる。
ただ、あまり大きくすると、縦にドッキングしたときに文字が欠ける。
最新バージョンなら直っているのかもしれないけど、
自分のアプリではメニューは上部固定なので、深くは調べていない。
> メニューのフォントとフォントサイズ
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(metrics);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0);
LOGFONT lfMenu = metrics.lfMenuFont;
_tcscpy_s(lfMenu.lfFaceName, _T("MS P明朝"));
lfMenu.lfHeight = -24;
CMFCMenuBar::SetMenuFont(&lfMenu);
lfMenu.lfOrientation = 900;
lfMenu.lfEscapement = 2700;
CMFCMenuBar::SetMenuFont(&lfMenu, FALSE);
> ボタンの表示非表示
m_wndToolBar.EnableCustomizeButton(TRUE, -1, _T(""), FALSE);
もしくは、EnableCustomizeButtonを呼ばない。
169デフォルトの名無しさん
2018/03/01(木) 13:10:39.24ID:txqdSq4Q 軽く煽ると答えを書いてくれるこのスレはチョロいよねw
170デフォルトの名無しさん
2018/03/01(木) 18:59:24.33ID:5P8YUW6k 自演じゃなければ
171デフォルトの名無しさん
2018/03/01(木) 21:28:45.70ID:qsUh1R3q 質問に答えると負けなんだろうか。
他のスレでも、質問に「答えない」ってだけのしょうもないマウントとりにくる人を見かけるね。
他のスレでも、質問に「答えない」ってだけのしょうもないマウントとりにくる人を見かけるね。
172デフォルトの名無しさん
2018/03/01(木) 22:57:24.75ID:txqdSq4Q >>171
君が質問に答えてあげればいいじゃん
君が質問に答えてあげればいいじゃん
173デフォルトの名無しさん
2018/03/04(日) 03:39:37.81ID:dAX9rxSb174デフォルトの名無しさん
2018/03/22(木) 07:47:15.16ID:QjvVr0xE 温度情報などをグラフにしてFormView上に描画できないか考え込んでいます。自前でCDCに描いていくのではなく、描くのに適しているmfcのライブラリは無いものか、探しています。どなたか目盛りのついたグラフ描画に良いクラスはご存じないでしょうか?
175デフォルトの名無しさん
2018/03/22(木) 10:15:31.03ID:Q2/ylW7b matlab
176デフォルトの名無しさん
2018/03/22(木) 12:52:08.54ID:nhBJfAJ/ >>174
MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
https://www.bcgsoft.com/featuretour/tour270.htm
http://www.codejock.com/products/chart/
無料ならこのへんのソースを読んでみるとか
https://www.codeproject.com/KB/miscctrl/#Charting+Controls
MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
https://www.bcgsoft.com/featuretour/tour270.htm
http://www.codejock.com/products/chart/
無料ならこのへんのソースを読んでみるとか
https://www.codeproject.com/KB/miscctrl/#Charting+Controls
177デフォルトの名無しさん
2018/03/22(木) 18:20:31.23ID:gaCTtyVy matlabはおそらく有料ライセンスですよね。
178デフォルトの名無しさん
2018/03/22(木) 18:22:47.87ID:gaCTtyVy >>176
> >>174
> MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
> https://www.bcgsoft.com/featuretour/tour270.htm
>
グラフとして、このようなグラフが描けると良いなとは思います。 http://www.codejock.com/products/chart/
>
> 無料ならこのへんのソースを読んでみるとか
> https://www.codeproject.com/KB/miscctrl/#Charting+Controls
ちょっと調べてみます。ありがとうございます。
> >>174
> MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
> https://www.bcgsoft.com/featuretour/tour270.htm
>
グラフとして、このようなグラフが描けると良いなとは思います。 http://www.codejock.com/products/chart/
>
> 無料ならこのへんのソースを読んでみるとか
> https://www.codeproject.com/KB/miscctrl/#Charting+Controls
ちょっと調べてみます。ありがとうございます。
179デフォルトの名無しさん
2018/03/22(木) 18:25:07.36ID:gaCTtyVy 昔の話で何ですが、DOSの時代にはMSCなどにグラフ描画ライブラリが付いてきていたような記憶があります。mfcには無さそうですよね。
180デフォルトの名無しさん
2018/03/22(木) 19:42:36.73ID:lw2+9AAf >>179
最新版は知らないが、昔のMFCには無かったと思う。
(昔の) MSDN Library をよく見ているが、発見してない。
でも、グラフ描画って、LineTo() だけでも大体いけると思うんだけど。
最新版は知らないが、昔のMFCには無かったと思う。
(昔の) MSDN Library をよく見ているが、発見してない。
でも、グラフ描画って、LineTo() だけでも大体いけると思うんだけど。
181デフォルトの名無しさん
2018/03/23(金) 11:19:28.52ID:WP/XswCx OLE2使ってExcel呼べばいいんじゃね?
MFC関係ないのでスレチだけど
MFC関係ないのでスレチだけど
182デフォルトの名無しさん
2018/03/23(金) 12:29:30.45ID:S2qLyUZS >>180
MSC = Microsoft CというDOS用のコンパイラです。1990年代のお話です。
MSC = Microsoft CというDOS用のコンパイラです。1990年代のお話です。
183デフォルトの名無しさん
2018/03/23(金) 13:06:50.13ID:5/36eG7n >>182
知ってるけど
知ってるけど
184デフォルトの名無しさん
2018/03/23(金) 18:21:05.39ID:GtydX90K185デフォルトの名無しさん
2018/03/24(土) 13:11:04.87ID:1MnVHuF+ .NETのChartコントロールをユーザーコントロールに置いてMFCダイアログでホストってのをやったことあるよ。
MFCビューでのやり方もMSDNに書いてあるからその通りやればできると思う。
MFC、Windowsフォーム、辺りで検索すれば見つかるはず。
MFCビューでのやり方もMSDNに書いてあるからその通りやればできると思う。
MFC、Windowsフォーム、辺りで検索すれば見つかるはず。
186デフォルトの名無しさん
2018/03/24(土) 13:59:14.06ID:5hh+Vua5 .NET使いたくないって話では
187デフォルトの名無しさん
2018/03/25(日) 01:41:05.54ID:AJM/AyB8 .netはちょっと重いです。それでも参考になります。ありがとうございます。。
188デフォルトの名無しさん
2018/04/03(火) 23:45:10.59ID:aZg1mfkw mfcとexcelの連携が全然分かんない……COM?何それ?みたいな
msdnとかstackoverflowとかいろいろ漁ってもだめ。っていうかそもそもmfc、windowsってよくわかんないクラスとか変数とか多すぎじゃない
もっと簡単にプログラミングさせてよ!って思う
msdnとかstackoverflowとかいろいろ漁ってもだめ。っていうかそもそもmfc、windowsってよくわかんないクラスとか変数とか多すぎじゃない
もっと簡単にプログラミングさせてよ!って思う
190デフォルトの名無しさん
2018/04/04(水) 02:52:52.55ID:h2UR4/YM >>188
馬鹿には無理
馬鹿には無理
191デフォルトの名無しさん
2018/04/04(水) 23:16:43.35ID:EgkZfqJG 昔、MFCに慣れてきた頃、趣味でMACのプログラミング勉強しようとして挫折したことがある。
Excel連携なら、その箇所だけでもVBでやるのがお勧め。
Excel連携なら、その箇所だけでもVBでやるのがお勧め。
192片山博文MZ ◆T6xkBnTXz7B0
2018/04/05(木) 15:58:24.24ID:7o7fJyTF193デフォルトの名無しさん
2018/04/06(金) 12:26:46.99ID:sTfZcU1Y MFC使わなくてもCで良いのに
194片山博文MZ ◆T6xkBnTXz7B0
2018/04/06(金) 16:14:35.30ID:eB6IhESG まずは、OleViewを起動してな。
195デフォルトの名無しさん
2018/04/20(金) 12:34:59.85ID:r2H2v4t5 折れ線グラフをMovetoとLinetoで描くことにしました。線分を引くに当たって、GDI+とGDIでの描画速度を検証してみました。
32bit win7 corei5で24×1,024本の線分を描きましたところ
GDI+ drawLine 7300ms
GDI Moveto Lineto 350ms
という結果になりました。
mfcのMoveto Linetoは速いですよね。画面のサイズによって速度はだいぶ変わるようです。
32bit win7 corei5で24×1,024本の線分を描きましたところ
GDI+ drawLine 7300ms
GDI Moveto Lineto 350ms
という結果になりました。
mfcのMoveto Linetoは速いですよね。画面のサイズによって速度はだいぶ変わるようです。
196デフォルトの名無しさん
2018/04/20(金) 12:38:07.74ID:r2H2v4t5 c#などのASP.net環境では、グラフを生成するAPIが有るようですね。サーバ上で簡単にグラフを生成し、クライアントのブラウザから見られます。
197デフォルトの名無しさん
2018/04/20(金) 22:27:08.54ID:yO6TKb25 >>195
検証おつ。少数派かもしれませんがこういうの好きです。
検証おつ。少数派かもしれませんがこういうの好きです。
198デフォルトの名無しさん
2018/04/25(水) 12:53:36.78ID:4obztnoR CFormView内でOnMouseWheelを使っていたのですが、コンボボックスを配置したところ、OnMouseWheelのイベントに飛んでこなくなりました。
今のところ、コンボボックスを継承して、コンボボックス内のOnMouseWheelイベント内で、親クラスへSendMessage(WM_MOUSEWHEEL )する事で動かせるようにしました。
この先、ほかのコントロールが追加されたら、またOnMouseWheelイベントを拾えなくなると思い、もっと良い方法があればと思っています。どなたか良い解決策をご存じですか?
今のところ、コンボボックスを継承して、コンボボックス内のOnMouseWheelイベント内で、親クラスへSendMessage(WM_MOUSEWHEEL )する事で動かせるようにしました。
この先、ほかのコントロールが追加されたら、またOnMouseWheelイベントを拾えなくなると思い、もっと良い方法があればと思っています。どなたか良い解決策をご存じですか?
199デフォルトの名無しさん
2018/04/25(水) 13:44:01.27ID:jrjO5Mdd >>198
CFormView派生クラスのPreTranslateMessage()で横取りしてしまうのが簡単かと
CFormView派生クラスのPreTranslateMessage()で横取りしてしまうのが簡単かと
200デフォルトの名無しさん
2018/04/26(木) 22:30:35.34ID:tB5nNnhP 確かに横取りで解決できました。ありがとうございます。
コンボボックスをドロップダウンリストに設定した場合のフォーカスについても伺いたいのですが、
CFormViewクラス内にドロップダウンリスト型のコンボボックスを配置すると、キーボードのフォーカスがコンボボックスに設定されてしまいます。
CFormViewに対してSetFocus()を呼び出しても、フォーカスがコンボボックスから外れません。
コンボボックスが青く塗りつぶされて選択状態になっているのを解除する方法をご存知ないですか?
コンボボックスをドロップダウンリストに設定した場合のフォーカスについても伺いたいのですが、
CFormViewクラス内にドロップダウンリスト型のコンボボックスを配置すると、キーボードのフォーカスがコンボボックスに設定されてしまいます。
CFormViewに対してSetFocus()を呼び出しても、フォーカスがコンボボックスから外れません。
コンボボックスが青く塗りつぶされて選択状態になっているのを解除する方法をご存知ないですか?
201デフォルトの名無しさん
2018/04/27(金) 09:24:02.21ID:V1X+E9CJ >>200
CFormViewのソースを見るとわかるけど、SetFocus()を呼んでも、
OnSetFocus()の中で最後の位置に復元される。
その動きを別なものにしたいのなら、
OnSetFocus()をオーバーライドして、なにかしらの対応が必要かと。
なにもしないようにしてフォーム自身がフォーカスを持ってしまうとか、
サイズ0のダミーのボタンでも置いておいて、毎回そこにフォーカスを移すとか。
CFormViewのソースを見るとわかるけど、SetFocus()を呼んでも、
OnSetFocus()の中で最後の位置に復元される。
その動きを別なものにしたいのなら、
OnSetFocus()をオーバーライドして、なにかしらの対応が必要かと。
なにもしないようにしてフォーム自身がフォーカスを持ってしまうとか、
サイズ0のダミーのボタンでも置いておいて、毎回そこにフォーカスを移すとか。
202デフォルトの名無しさん
2018/04/27(金) 20:15:49.15ID:Q5E/Se8d ありがとうございます!
203デフォルトの名無しさん
2018/04/27(金) 20:26:32.52ID:Q5E/Se8d ダブルバッファリングについて質問しても良いですか?
ピクチャーコントロールのダブルバッファリングを行いたいと思っているのですが、画面のサイズを大小いじられ続けると、GDIリソースを食いつぶして、アプリケーションが落ちます。
色々試して、画面サイズ変更イベント内のCreateCompatibleBitmapのところで確保したGDIリソースが DeleteObject();されるときに、GDIリソースを一つ多く確保し続けるようです。
CBitmap test;
test.CreateCompatibleBitmap(ピクチャーコントロールのdc,-,-); //GDIリソースが+2される
test.DeleteObject(); //GDIリソースがー1される
差し引きGDIリソースの確保量が+1になります。
そのうち線を書けなくなり、アプリケーションがクラッシュします。
使い方がどこか良くないのだと思うのですが、パラメータ等が良くないのかな。などと考え込んでいます。解決策をご存知ないですか?GDIリソースの確保量はタスクマネージャの設定でGDIリソースを表示できるようにして確認しています。
ピクチャーコントロールのダブルバッファリングを行いたいと思っているのですが、画面のサイズを大小いじられ続けると、GDIリソースを食いつぶして、アプリケーションが落ちます。
色々試して、画面サイズ変更イベント内のCreateCompatibleBitmapのところで確保したGDIリソースが DeleteObject();されるときに、GDIリソースを一つ多く確保し続けるようです。
CBitmap test;
test.CreateCompatibleBitmap(ピクチャーコントロールのdc,-,-); //GDIリソースが+2される
test.DeleteObject(); //GDIリソースがー1される
差し引きGDIリソースの確保量が+1になります。
そのうち線を書けなくなり、アプリケーションがクラッシュします。
使い方がどこか良くないのだと思うのですが、パラメータ等が良くないのかな。などと考え込んでいます。解決策をご存知ないですか?GDIリソースの確保量はタスクマネージャの設定でGDIリソースを表示できるようにして確認しています。
204デフォルトの名無しさん
2018/04/27(金) 21:30:38.89ID:V9eZGmhL CreateCompatibleBitmapの前後5行ぐらいに原因がありそうな気がする
205デフォルトの名無しさん
2018/04/28(土) 06:46:29.77ID:7taUW+bg >>203
自分で開放しないといけないのを忘れてるだけじゃないかな
自分で開放しないといけないのを忘れてるだけじゃないかな
206デフォルトの名無しさん
2018/04/28(土) 13:43:55.18ID:RCDKOgRU リソースの解放はDeleteObject();ではないのですか?
CreateCompatibleBitmapの前は、CreateCompatibleDCを呼び出しています。
CreateCompatibleDCのDCパラメータをNULLに設定すると、GDIリソースの浪費は無くなりますが、今度は出てくる画面が白黒になってしまいます。
CreateCompatibleBitmapの前は、CreateCompatibleDCを呼び出しています。
CreateCompatibleDCのDCパラメータをNULLに設定すると、GDIリソースの浪費は無くなりますが、今度は出てくる画面が白黒になってしまいます。
207デフォルトの名無しさん
2018/04/28(土) 15:02:19.62ID:7HtEIURB >>206
ピクチャーコントロールのDCをGetDC()で取得してしてるのでは
ピクチャーコントロールのDCをGetDC()で取得してしてるのでは
208デフォルトの名無しさん
2018/04/28(土) 15:36:31.72ID:K6dn8QZh スタック上でCBitmap test;とやった場合
関数を抜けるときに勝手にデストラクタでDeleteObjectされると思う。
もう少しコード晒さないと判らない。
関数を抜けるときに勝手にデストラクタでDeleteObjectされると思う。
もう少しコード晒さないと判らない。
209デフォルトの名無しさん
2018/04/28(土) 20:43:45.95ID:RCDKOgRU CreateCompatibleDCでは、ピクチャーコントロールのDCを取得させています。
ピクチャーコントロールのDCを渡すと、CreateCompatibleBitmap時にGDIリソースを消費する量が2となるようです。
CreateCompatibleDCにNULLを指定した場合(確か)CreateCompatibleBitmap時のGDIリソース消費量ばかり1となります(以後の描画は白黒になります)。
今しばらく書いているコードをみられません。
CreateCompatibleDCやCreateCompatibleBitmapをOnSize時に破棄させてはサイズを変えて再生成させると、GDIリソースが消費されて減っていくので、
アプリケーション生成時に画面の最大サイズでCreateCompatibleDCさせておき、あとはCreateCompatibleDCしないように変更することも考えております。
アプリケーション生成時に画面のサイズ分のCreateCompatibleDCさせるようにすると、マルチモニタ環境の時などの動作が正常に動作しないかもしれないと思い、
可能ならOnSize内でDeleteObject();させてCreateCompatibleDCさせたいと思っています。
なお、OnSizeから抜けてもGDIリソース消費量は下がってくれないようです。
ピクチャーコントロールのDCを渡すと、CreateCompatibleBitmap時にGDIリソースを消費する量が2となるようです。
CreateCompatibleDCにNULLを指定した場合(確か)CreateCompatibleBitmap時のGDIリソース消費量ばかり1となります(以後の描画は白黒になります)。
今しばらく書いているコードをみられません。
CreateCompatibleDCやCreateCompatibleBitmapをOnSize時に破棄させてはサイズを変えて再生成させると、GDIリソースが消費されて減っていくので、
アプリケーション生成時に画面の最大サイズでCreateCompatibleDCさせておき、あとはCreateCompatibleDCしないように変更することも考えております。
アプリケーション生成時に画面のサイズ分のCreateCompatibleDCさせるようにすると、マルチモニタ環境の時などの動作が正常に動作しないかもしれないと思い、
可能ならOnSize内でDeleteObject();させてCreateCompatibleDCさせたいと思っています。
なお、OnSizeから抜けてもGDIリソース消費量は下がってくれないようです。
210デフォルトの名無しさん
2018/04/28(土) 21:09:49.29ID:K6dn8QZh 207が言っているのは
bitmap.CreateCompatibleBitmap(pict->GetDC(), rc.Width(), rc.Height())
してるんじゃないかって事。これだとリークします。
bitmap.CreateCompatibleBitmap(pict->GetDC(), rc.Width(), rc.Height())
してるんじゃないかって事。これだとリークします。
211デフォルトの名無しさん
2018/04/29(日) 02:54:49.07ID:4Tl9MZgN ReleaseDC
212デフォルトの名無しさん
2018/04/29(日) 22:23:44.07ID:dUB73wKv >>212
> 207が言っているのは
> bitmap.CreateCompatibleBitmap(pict->GetDC(), rc.Width(), rc.Height())
> してるんじゃないかって事。これだとリークします。
しています。その上でどのように直すべきか察しが付きません。やはりReleaseDCで直りますか?
> 207が言っているのは
> bitmap.CreateCompatibleBitmap(pict->GetDC(), rc.Width(), rc.Height())
> してるんじゃないかって事。これだとリークします。
しています。その上でどのように直すべきか察しが付きません。やはりReleaseDCで直りますか?
213デフォルトの名無しさん
2018/04/29(日) 23:00:49.09ID:azFTonkH ReleaseDCで直る。
私なら 解放不要なCDC::FromHaqndleを使う。
私なら 解放不要なCDC::FromHaqndleを使う。
214デフォルトの名無しさん
2018/04/30(月) 09:00:09.82ID:N15MwktU215213
2018/04/30(月) 13:12:38.67ID:3QBGre+r スマソ勘違いだった
216デフォルトの名無しさん
2018/04/30(月) 14:30:59.80ID:s7QfKdrQ >>216
CompatibleDCの引数はピクチャーコントロール内のDC
memDC.CreateCompatibleDC(ピクチャーコントロール.GetDC(),ピクチャーコントロールのx,y);
だったと思います。
GetDC()でピクチャーコントロールのDCを取得していたか、GetSafeDCでピクチャーコントロールのDCを取得していたかちょっと思い出せません。
CompatibleDCの引数はピクチャーコントロール内のDC
memDC.CreateCompatibleDC(ピクチャーコントロール.GetDC(),ピクチャーコントロールのx,y);
だったと思います。
GetDC()でピクチャーコントロールのDCを取得していたか、GetSafeDCでピクチャーコントロールのDCを取得していたかちょっと思い出せません。
217デフォルトの名無しさん
2018/04/30(月) 14:32:37.77ID:s7QfKdrQ CreateCompatibleDCのパラメータはDC一つだけでしたね。ごめんなさい。
218片山博文MZ ◆T6xkBnTXz7B0
2018/04/30(月) 14:34:44.36ID:4AJ8oS6Z GetDCの返り血はReleaseDCしないといけない。
219デフォルトの名無しさん
2018/04/30(月) 19:49:57.15ID:fTg4MTz+ 返り血こわ
220デフォルトの名無しさん
2018/05/01(火) 13:59:06.30ID:eD8/BCAz ReleaseDCではGDIリソースがー1になりますが、createCompatibleBitmapで+2消費したぶんのすべては解放されてくれません。
releaseDCはおこなっていますが、GDIリソースの消費量は依然として+1になってしまいます。
releaseDCはおこなっていますが、GDIリソースの消費量は依然として+1になってしまいます。
222デフォルトの名無しさん
2018/05/07(月) 12:52:31.69ID:axInvDCA 原因わかりました。
memBmp.CreateCompatibleBitmap(picctrl.GetDC(),x,y);
が良くなかったようです。
GetDC()でGDIリソースを1消費し、解放出来なくなります。
CDC *pDC;
pDC->picctrl.GetDC();
memBmp.CreateCompatibleBitmap(pDC,x,y);
DeleteObject(memBmp);
ReleaseDC(pDC);
に直したところ、ちゃんとGdIリソースが戻りました。
memBmp.CreateCompatibleBitmap(picctrl.GetDC(),x,y);
が良くなかったようです。
GetDC()でGDIリソースを1消費し、解放出来なくなります。
CDC *pDC;
pDC->picctrl.GetDC();
memBmp.CreateCompatibleBitmap(pDC,x,y);
DeleteObject(memBmp);
ReleaseDC(pDC);
に直したところ、ちゃんとGdIリソースが戻りました。
223デフォルトの名無しさん
2018/05/07(月) 12:55:07.54ID:axInvDCA pDC=picctrl.GetDC();
に修正します。
解答いただいた方々、ありがとうございます。
に修正します。
解答いただいた方々、ありがとうございます。
224デフォルトの名無しさん
2018/05/07(月) 14:56:30.49ID:QMgv+0U5 >>222-223
最初からみんなそう言ってたのに
最初からみんなそう言ってたのに
225デフォルトの名無しさん
2018/05/08(火) 19:14:19.80ID:c2nzYwoQ > CDC *pDC;
> pDC=picctrl.GetDC();
> ReleaseDC(pDC);
picctrl.GetDC()したものを親がReleaseDC()しているのが気持ち悪いが、
これでも正しく動くのか?
> pDC=picctrl.GetDC();
> ReleaseDC(pDC);
picctrl.GetDC()したものを親がReleaseDC()しているのが気持ち悪いが、
これでも正しく動くのか?
226デフォルトの名無しさん
2018/05/11(金) 20:03:19.69ID:AvqrI8lf GetDC()したらReleaseDC()する必要があるのだと思う。CDC*はデストラクタ処理に入れないからReleaseDCする必要がある。
VC++.net CLRとかなら自動でやってくれるのだろう。
VC++.net CLRとかなら自動でやってくれるのだろう。
227デフォルトの名無しさん
2018/05/12(土) 17:30:06.38ID:r7l6NWuz228デフォルトの名無しさん
2018/05/14(月) 21:41:18.68ID:8B23ox7k そうなんだ。φ(`д´)メモメモ...
229デフォルトの名無しさん
2018/05/23(水) 19:28:52.23ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
HQL0Y
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
HQL0Y
230デフォルトの名無しさん
2018/05/24(木) 10:17:50.97ID:0MNYvz/l バイナリデータ(buf)を受け取ってピクチャーコントロール(m_picture)に
描画したいのですがBitBltのところで
"Debug Assertion Failed!"
が発生してしまいます。
何が悪いのか教えていただけないでしょうか?
PAINTSTRUCT ps;
CBitmap bitmap;
CImage image;
CDC *pDC;
pDC = m_picture.BeginPaint(&ps);
pDC->SetBkMode(TRANSPARENT);
pDC->SetStretchBltMode(COLORONCOLOR);
bitmap.CreateBitmap(width, height, 1, 8, (void*)&buf);
HBITMAP hBitmap = HBITMAP(bitmap.GetSafeHandle());
image.Attach(hBitmap);
image.BitBlt(pDC->GetSafeHdc(), CRect(0, 0, image.GetWidth(), image.GetHeight()), CPoint(0, 0));
image.Detach();
image.ReleaseDC();
m_picture.EndPaint(&ps);
描画したいのですがBitBltのところで
"Debug Assertion Failed!"
が発生してしまいます。
何が悪いのか教えていただけないでしょうか?
PAINTSTRUCT ps;
CBitmap bitmap;
CImage image;
CDC *pDC;
pDC = m_picture.BeginPaint(&ps);
pDC->SetBkMode(TRANSPARENT);
pDC->SetStretchBltMode(COLORONCOLOR);
bitmap.CreateBitmap(width, height, 1, 8, (void*)&buf);
HBITMAP hBitmap = HBITMAP(bitmap.GetSafeHandle());
image.Attach(hBitmap);
image.BitBlt(pDC->GetSafeHdc(), CRect(0, 0, image.GetWidth(), image.GetHeight()), CPoint(0, 0));
image.Detach();
image.ReleaseDC();
m_picture.EndPaint(&ps);
231デフォルトの名無しさん
2018/05/24(木) 10:22:02.55ID:fftgGS82 頭
232放置された蟻人間 ◆T6xkBnTXz7B0
2018/05/24(木) 19:30:21.07ID:lMOj7i3d ASSERT(IsWindow(m_picture)); してみれ。
233デフォルトの名無しさん
2018/05/25(金) 08:35:43.69ID:0miZfrjS234デフォルトの名無しさん
2018/05/25(金) 11:28:17.31ID:XVxgp9wt まず"Debug Assertion Failed!" が出ているのならちゃんと再試行を押そうよ。
それだけで原因そのものはわかる。
それだけで原因そのものはわかる。
235デフォルトの名無しさん
2018/07/04(水) 22:49:24.38ID:gFgZc5FG EQ8
236デフォルトの名無しさん
2018/07/06(金) 12:25:50.03ID:uTPDH9XV EQ8
237デフォルトの名無しさん
2018/07/07(土) 16:23:50.25ID:BnawPcHi CListCtrでレポート表示のFullRowSelectをカスタムドローを弄ってます。
マウスがアイテムの上に来たら色を変えたいけど、カスタムドローのイベントハンドラだけできますか?
OnMouseMoveでどこにあるか判定してカスタムドローで描画が必要?
ビットマップを3番目のSubItemだけに貼るとか、16x16のSmallサイズ以外だとうまくいかないとか、癖が凄い。
マウスがアイテムの上に来たら色を変えたいけど、カスタムドローのイベントハンドラだけできますか?
OnMouseMoveでどこにあるか判定してカスタムドローで描画が必要?
ビットマップを3番目のSubItemだけに貼るとか、16x16のSmallサイズ以外だとうまくいかないとか、癖が凄い。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 広島・廿日市、おこめ券配布せず 全市民に3000円現金給付へ [どどん★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪★2
- じゃあ何券だったら、日本人は満足したんだよ [452836546]
- 石破「日中関係は最新の注意払うべき」ヤフコメ大激怒してしまう [163661708]
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 朝日新聞記者「中国軍のレーダー照射はこめかみに銃を突きつけられたのと同じ。僕なら反撃して撃墜してる」高市 [931948549]
- 維新議員、キャバクラマネー返金へ→「今回は返金する」「ポケットマネーでやるには限界がある」 [834922174]
