2013は知らないけど、CSplitterWndがあったと思う。
動的にすると勝手にスクロールするキモいやつにできる。
> もし無い場合、皆さん、自作するのでしょうか?
ネットで検索したら大体似たものは見つかってたけど最近は知らない。
Win7-64bit+VS2010(SP1)で開発してるんだが、
1ヶ月前あたりからこんな現象が頻発するようになったんだが、同じ症状の人いる?
ttp://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+201205/12050011.txt 今まで問題なかった昔のソースを実行してみても同じ現象になるのよね。
条件はDebugモード、MFCスタティック、CFileDialogを連続して2回以上使う、bVisualStyleを変更しても出る。
CFileDialog使ってから数十秒〜数分の間で出る時もあるし出ない時もある。
出力ログを見るとCOM自動開放時に例外0xC0000005でしくじってる模様(ole.dllがエラー出してる)
OSのFileDialog仕様が変更されたのか、セキュリティのせいなのかよく分からん
>>723 CFileDialog CoInitialize でググったら幸せになれるかな?
Win95のころダイアログ使うとVCのログウインドウによく出てたような気がする。
NT系では出なかった気がする。
プログラム強制終了するわけじゃなかったし原因がわからなかったから放置してたな。
これと一緒かどうかは知らないけど。
726 :
デフォルトの名無しさん:2015/02/19(木) 10:48:51.10 ID:mAv7fs9q
MFCのプログラムでウィンドウのないタスクトレイ常駐プログラムを作っていて
起動時にSetTimerを設定したいのですが、ネットで調べてもウィンドウの初期化時にセットしているものばかりなのですが、
SetTimerはウィンドウがないと使えないでしょうか
ウィンドウはなくてもいいがメッセージループは
廻す必要がある
728 :
デフォルトの名無しさん:2015/02/19(木) 12:10:50.17 ID:mAv7fs9q
起動時にSetTimerを設定する場合はOnInitDialog()の中で行うという解説が多いのですが
ウィンドウがなければOnInitDialog()もないと思うのですが、ウィンドウがない場合はどこにSetTimerを入れるべきでしょうか
そのプログラムがタイマーが必要なタイミングで通るとこに置けばいい
いつからいつまで必要なの?
起動から終了までずっとです
>>730 InitInstanceでSetTimerしてExitInstanceでKillすればいいと思うよ。
あーでもタスクトレイのアプリ作った時はトレイからの通知受け取り用に
表示しないままのウィンドウ作ってたけどな、あまりに昔の話なので
今の状況知らないけど。
>>724 ありがとう。
(*´∀`*)幸せになれた。
2006年頃はAcrobat 7.0が何かしらやらかしてたらしいけど、今回はなんだろうね?
OnTimerは重い処理をさせるときは一度解除したほうがいいんですか?
どうも処理が積み重なっているように感じるのですが
はい
シングルスレッドであれば、タイマーが重い処理を呼び出しているとして、その呼び出しが重複することはないよ。
まあ動作環境知らんけど、再入が気になるなら
フラグとかで対策しとけ
フラグ立てるとatomicな処理とかでまた詰まるんですね
741 :
デフォルトの名無しさん:2015/02/21(土) 06:55:40.51 ID:ZprzlED+
ありがとうござます。
742 :
デフォルトの名無しさん:2015/02/22(日) 23:00:32.38 ID:bfA7aDbz
基本的なことをお聞きしますが、MFCのプログラムを作っていて
ヘッダーファイルで
public:
static const float VAL;
とやってcppのほうで、
CHoge::CHoge()
{
const float VAL = 0.1;
}
とやっているのですが、LNK2001のリンクが未解決というエラーになります。
constの定義はほかにもあるのですが特定の何個かだけエラーになってまして
意味がわかりません、どなたかわかる方教えてください
>>742 const float CHoge::VAL = 0.1;
>>743 あざす
通りました。でもなぜ通るのかわかりません。
どういう意味の違いがあるのでしょうか
一方は関数内ローカル変数になる
746 :
デフォルトの名無しさん:2015/02/23(月) 06:38:22.60 ID:5y2BF+sm
const float ::VAL = 0.1;
ありがとうございます。まだ完全に理解できてませんがスコープが原因ということで調べてみます
748 :
デフォルトの名無しさん:2015/02/23(月) 07:41:28.89 ID:AjFb9vvE
ヘッダに書いてinlineにしてしまえ
C#やJavaと違って、C++は自動でインスタンスフィールド
→クラスフィールドみたいには追いかけてくれない。
……だっけ?
勝手に追いかけてもらったら困る
MFCのクラスの中でstd::mapを使おうとするとアクセス違反で逮捕するってエラーが出るんですが
mapはクラス内で使ってはダメなんでしょうか
どう書いたらどんなエラーが出たのさ?
empty()ではじいたらエラーにならなくなりました。お手数おかけしました
>>751 アクセス違反で逮捕で笑ってしまった。私は懲役だろうなー
755 :
デフォルトの名無しさん:2015/03/01(日) 05:32:10.55 ID:LYwpGVQL
自演つまらん
MFCって.NETと比べるとコントロールが馬鹿に少なくないですか?
こんなんじゃ何も作れないと思うんですが・・・
コントロールやコントロールのようなものをMFCで作るか
ActiveXコントロールならATL(たぶんMFCでも)で作って使えばいいし
むしろDVアーキテクチャなら一般的なコントロールは
ちょっと使いにくいというか、いちいち値を入れたり出したりが
面倒だったりレスポンスが悪くなるような気がする。
.netはコントロールにしないと使えないからでは。
MFCは貧弱だからなぁ
MFCだけじゃなく、C++は標準ライブラリにも恵まれなかったし
.netはその辺の反省も生きているのでは
.netはJavaの真似でしょ。
javaはC++の反省が生かされてるから、
間接的には影響しているんだろうけど。
C++とJavaの反省を生かしているかと
そうはいっても、Windowsアプリ普及期でのMFCの存在はかなり大きかったとおもうよ
APIで書いてた頃のめんどくささったらなかったもの
>>756 作ってたんだよ。必要なコントロールは自分でね。買ってくる時もあるけど。
元々Win32 APIで、C言語での大変な開発に対して、
C++でWin32 APIをラップして使いやすくしたMFCが登場し、
Javaが登場するが、ちょっと理想論的なところが使い難かった、
という反省を踏まえて.NETが登場したという時系列だから
.NETの方がコントロールが多い、便利というのは当たり前
VB6おじさんですねわかります
MFCの設計思想は、名前の通り「ファンデーション」だったんだよ。
APIやメッセージハンドラなどを薄くカプセル化。
今ではだいぶ厚化粧になったけど、根幹は変わっていない。
そうか?
MFCは重ね塗りには向いてなかった設計だが
そもそもMFCってそんなに便利か?
個人的にはWin32APIを直接呼び出すスタイルと比べて、
大差ないと思うんだが。
だから便利じゃんじゃん
大差あったら、いちいちその呼び出しスタイルを覚えなきゃいけないんだぜ
つーか、
>>765 にも
>APIやメッセージハンドラなどを薄くカプセル化。
って書いてるし
>>770 こんなの決まった書き方だから関数化するなりコピペするなりすればよいし。