MFC相談室 mfc23d.dll [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
Docを無視してViewだけ使うってのは俺もよくやるw >>640-644
うーむ・・・
結局、MFCが提供する仕組みを無視しないと自由にプログラムを組めないのか。
しかも安全に無視するにはMFCの仕組みを熟知しないといけないと。
そんなこと組込一筋の自分にはできそうにないなあ。
今作りたいプログラムを作ったらMFCを使うことは二度となさそうだし、やはりMFCは回避するべきだろうか・・・
頭痛いよ >>645
というか、「Doc,Viewは かくあるべき」という設計思想が難しいし、
それを守っても余り良いこと無いので、無視してよい、ということ。
なにも、アメリカ人の考えた思想に従う必要は無いのだから。
その当時の彼らはそれが理想だと考えたかも知れないが、それも
どんどん変化しているし、別の勢力はまた別の設計思想を持っているのだから。 >>645
いやいや、別に邪道なことをしているわけではない
Docを使う/使わないを任意に選べるようになっているというだけ >>645
無駄に覚えることが増えるし
しかもバッドノウハウで
他に何の役にも立たん
深入りする意味が無い >>646-647
>>640に「そうなると、MFCの標準の処理をいろいろオーバーライドすることになるので、内部の仕組みを理解する必要が出てくる。」と書かれているので、難しいはずです。簡単に無視できないはず。
そもそも組み込みの技術者なので、PCのプログラミングは「ついで」的にしないといけない。
PCのプログラミングに力を入れると評価が下がってしまう。
そうなると知識量が必要なMFCは避けないといけない。やはりWin32にするべきか。
>>648
バッドノウハウ=MFCってことですか? >>649
> SDIやMDIを好きに変更できるようにならないと業務に使えないのだが。
こう言ってた人が
> PCのプログラミングに力を入れると評価が下がってしまう。
> そうなると知識量が必要なMFCは避けないといけない。やはりWin32にするべきか。
こう言い出す意味がよくわからんのだが
組み込みが本業の人がMFCを何に使うんだろう
基板から送られてくるデータを可視化とか?
シミュレーションや回路設計は専用ソフト使うだけだし >>650
要は力を入れないで業務で使えるGUIのプログラミングをしないといけないということです。
何も分かっていない上司に言われてやっているので、仕方がないのです。
>組み込みが本業の人がMFCを何に使うんだろう
企業秘密なので、詳細は書けない。
データの可視化の一種と言っておく。 >>651
でも、プロジェクト作成時に「Visual Studio」を選ぶと、プロジェクトを作製した直後から、TreeViewが既に出ているよね。
それをいじくれば、TreeViewは制御できる。
後はメニューに対するハンドラの書き方さえ分かれば、アプリは作れる。 個人的にはGUIは不要だと思っているのですけどね。
現場で働く派遣社員や外注などのレベル低下でCUIのツールが受け入れられなくなっているってだけでGUIのプログラミングをやるはめになった。 >>653
裏でCUIツールを起動するだけ、みたいのだとダイアログベースで充分じゃね? いちおーSDI用のスケルトンを使って
内容的にはダイアログベースなやつにするとか
ログを記録したり終了時に使用状態をファイルに記憶させるのにDoc使いましたよって >>657
そこまでは知識不足で判断できません。
どちらにしても>>640の言うように使わない機能を無視するのも簡単ではないようですが。 ダイアログベースがダメだと言うなら、>>640の言うように、
Doc/Viewを使わないSDIで、CChildViewに処理を全部入れてしまうのが一番シンプルでは? >640の前段は「ドキュメント/ビューの仕組みを使ったら」だ
ドキュメント/ビューを一切使わないのは簡単
使わないだけ
ダイアログにメニューも普通に付く
「ダイアログ メニュー」でggr
そんなにWin32API直でやりたいならそうすればいいけど
どっちにしろ、猫でものWindows SDK編でも一通りやっといた方がいいよ
MFC使うにしても、「ドキュメント/ビュー」とかのMFC独自のとこ以外は
よく言われるようにWin32APIの薄いラッパだから >>659
そこまで判断する知識はまだなくて
>>660
>ダイアログにメニューも普通に付く
そんなことが可能なのですね。
https://www.kazetest.com/vcmemo/dialogmenu/dialogmenu.htm
それならダイアログベースでも可能かもしれません。
Win32についてはそこである程度勉強したのですが、部品を組み立てるような感覚で自由にできるので、下手にMFCに手を出すよりはマシかと思ったわけです。 >>658
別に、Doc/Viewモデルを使っていても、ファイルは好き勝手に読み書きできるよ。
勝手にfopen()して、一部だけ読み込んだりとか普通にやってる。
Doc/Viewモデルを使うとしても、
CDocument::OnOpenDocument(const char *pszFilename)
が呼び出されたときに、fopen()して、fread()して、どこか好きな場所に
データを読み込めばよい。
CDocumentの中に読み込まなくても、グローバル変数に読み込んでも、
CViewの中に読み込んでも、好きなクラスの中に読み込んでも良い。
本当に読み込んだかどうかは、MFCのフレームワークは全く感知しないので、
好き放題出来る。 >>661
MFCも、本等は好き放題出来る。
個人的には、大改造して使ってる。 >>662
>>663
お二人のようになれればいいのですけどね >>641
単一ドキュメント複数ビューはできないわけじゃないよ。
DocTemplateを派生させる必要があるというだけ。 >>664
「MFCによるWindowsプログラミング」ISBN 475611749X
首都圏在住なら国会図書館で見てこい
ttps://iss.ndl.go.jp/books/R100000002-I000002930291-00
田舎住まいなら尼(ISBNで検索)で\32,580で売ってるから上司に頼んでこれ買ってもらえ >>641
> 1つのDocに対して複数のViewなどをしたくても多分、設計上は出来ない。
CDocumentには、UpdateAllViews()という名前の関数があるように、
複数のビューを関連付けられるぞ。
>>662
わざわざDoc/Viewを選んでおいてDocクラスを放置するくらいなら、
印刷プレビューでも使わない限り、Doc/Viewを使わない形式で
CMainFrameとCChildViewだけを使うほうが楽だと思うけどな。 MFC は、数十年前w
Jeffrey Richter とかの時代
Win32 API を、クラスにまとめたもの。
メニューバーも作れる
MFCって、まだ存在するのか WindowsでC++とVisual Studioを使ってデスクトップのプログラムするなら、
今でもMFC以外の選択肢はほぼ無いはずだが、 かんたん Visual C++[改訂2版]、堀義博、2017
この本では、.net か、managed C++ か、interop か何かを使っていた。
でも結局、このやり方も、流行らなかったのか
MFC ではなかった気がする >>667
> > 1つのDocに対して複数のViewなどをしたくても多分、設計上は出来ない。
>CDocumentには、UpdateAllViews()という名前の関数があるように、
>複数のビューを関連付けられるぞ。
スマソ。記憶違いがあった。
1つのDocに対して複数のViewは、一応は関連付けられる。
しかし、それはどれも1つのCFrameWndの中に入れておかないといけなくなって
しまっているため、WzEditorの「テキストの二重化」のように、
1つのテキストファイルの別の場所を複数のFrameWndの中に表示するという
ようなことが、MFCでは基本的に出来ないハズ。 CTreeCtrlクラスでツリー表示の文字色を部分的に変えたいけど、Windows SDKみたいにカスタムドローしないと無理ゲー? 実際にウィンドウ上に表示している画面をBitmapに画像保存するんじゃなくて、
表示させないで、データだけを元に、連続的に画像保存するってどうやるのかな?
例えば、ボタン1つで、円の位置を連続的に動かしたデータを、
それらをわざわざ画面に表示させないで、連続的に画像に保存したいんだけど、
やり方がわからない。 >>674
CreateCompatibleDC(NULL)とCreateDIBSectionだろう。DIBビットマップオブジェクトを作成し、DCでそれを選択し、DCで描画する形になる。 >>675
ありがとう、教えてもらったキーワードをググってみます。 DialogにCMFCFontComboBoxを張り付け
プロパティの「フォントを使用して描画」をTrueにすると
コンボボックスの行の高さを無視して大きく描画されます。
XX明朝とXXゴシックが縦に重なって描画される感じです。
(ディスプレイ設定で拡大表示している場合のみ)
以前は普通に表示されていた気がするのですが。
良いアイデアがあればお願いします。 >>439
> C++Nativeの今風なGUIライブラリ作って欲しいわ
禿しく同意 WinUI3ってc++で書かれてるからc++ nativeじゃね?? >>679
それだけのことなのにそれをやらないマイクロソフト 昔あったCFrameWndのLoadBarStateとSaveBarStateは
何に置き換わったのでしょうか?
CMF…系のツーツバーやステータスバーでは保存&復元されないようです。 MFCより先進的なGUIフレームワークを使いたいならQtとかwxWidgetsを使えってことなのかねえ? >>683
m_pszProfileNameを初期化してる? >>685
レスサンクス
明示的には初期化はしていませんが
CWinApp::SetRegistryKey(...
を呼んでるのでその中でm_pszAppNameがセットされているようです。 >>683
CWinAppEx::LoadStateやCWinAppEx::SaveStateが勝手に呼ばれるはずだけど 解決しました
VS2005で作ったソースをVS2019に移植する際
CWinAppをCWinAppEx
CToolbarをCMFCToolBar
のような作業をやったんだけど
CMainFrameからCFrameWnd::(Exなし)の関数を呼んでたのが原因でした
お恥ずかしい。レスくれた方、ありがとうございました。 >>684
WinUI 3がネイティブ
XAMLの部分はC++コードになる bamlになるだけでコードを吐いたりはしないと思うが?.xaml.cs と混同してる? BCGのほうはダイアログや埋め込みスクロールバーもダークテーマにできるんだよなぁ BCGはロシアのセンペテロブルグだったね。
ドル建てで売ってるからウクライナ侵攻の対ロ経済制裁の影響を受けて倒産とかはなさそうだな。 >>697
VisaやMasterのカード決済ができなくて、売れないのでは? ロシア国外のWeb
サイトで決済して、ドルをロシアへ送金しようにも、SWIFTからの排除で銀行間
送金もできないし。 >>698
それもそうか〜。次の更新料支払いまで10ヵ月近くあるけど、どうなるのかなぁ。
BCGライブラリはMFCでアプリ作るならやっぱり便利だし、メンテ続けてほしい。 BCGは次のバージョンでPer Monitor DPIに対応すると予告していて、ちょっと興味ある BCGは新バージョンのベータ版アナウンスしたし、経済制裁の影響は大してないのかも。 マイクロソフト社がフライドチキン業界に進出したらどんな略称になるんだろう? mfcのactivexコントロールの良書教えて下さい MFCで画像閲覧ソフトを作成しています。
ウィンドウのサイズを変更すると画像が消えてしまいます。
なぜなのかさっぱり検討が付きません。
https://ideone.com/Gn0AsK
ウィンドウのサイズを変更したときにOnPain()が呼ばれることは確認済みです。
また、OnPaint()内の
cbmp = CBitmap::FromHandle(m_image);
の部分を
CImage image;
image.Load("画像データ");
cbmp = CBitmap::FromHandle(image);
のように決め打ちで画像データを表示すると画面サイズを変更しても画像が消えません。
なにか良い手はないかご提示宜しくお願い致します。 すいません、環境を書くのを忘れていました。
Windows 10 Home 22H2 (64bit)
Microsoft Visual Studio Community 2019 Version 16.11.20
何卒宜しくお願い致します。 「mfc onpaint WM_PAINT」で検索してみれば?
MFC とか、こういうのは初心者がやるものじゃない。
たぶん、仕組みを理解するだけでも、10年以上掛かる 良い手も何も、そういうものだと思うしかない
OnPaint()で描けばいいだけ
いつウインドウがinvalidateされるのか、アプリケーションプログラマが完璧に把握することはたぶんできないし
しても意味はあまりない >>708->>10
レスありがとうございます。
そういうものなのですね。
そういうものだと思って諦めます。
ありがとうございました。 >>706
そもそも、
cbmp = CBitmap::FromHandle(m_image);
で取得したものを
cbmp->DeleteObject();
で破棄しているのが原因では。
これだと1回目の描画のときにm_imageが破棄されて、
2回目以降は描画されないかと。 ■ このスレッドは過去ログ倉庫に格納されています