■MFC相談室 mfc18d.dll■
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/08/01(水) 06:23:280002デフォルトの名無しさん
2007/08/01(水) 12:02:21■MFC相談室 mfc17d.dll■
http://pc11.2ch.net/test/read.cgi/tech/1164073111/l50
0003前スレ986
2007/08/02(木) 21:54:390004デフォルトの名無しさん
2007/08/10(金) 21:12:33例えばVCLでいうStringGridみたいなもの作りたいとき
MFCだけでやろうとするとListBoxとかListViewとかをベースに
しこしこつくっていくわけなんすかね
0005デフォルトの名無しさん
2007/08/10(金) 21:44:32StringGridって割と便利みたいだし、誰かMFCで実装した奴いるんじゃね?
いなけりゃ、自前で実装して公開すれば皆に喜ばれるよ。
0006デフォルトの名無しさん
2007/08/11(土) 09:45:34独自のコントロールを置きたいのですが、
・CWndの派生クラス(カスタムコントロール)として作成
・CStaticの派生クラスとして作成
この両者で作り勝手などに違いはありますか?
どちらが妥当な方法でしょうか?
0007デフォルトの名無しさん
2007/08/12(日) 03:00:57よく分からんけど
ttp://www.codeproject.com/miscctrl/gridctrl.asp
ttp://support.microsoft.com/kb/196833/ja
ttp://forums.belution.com/ja/vc/000/098/43s.shtml
こんなん使ったらアカンのか?
0008デフォルトの名無しさん
2007/08/14(火) 06:33:44CDocumentに、オブジェクトの配列obj[10]を作って、それを配列の引数順にリストに表示させているのですが、
リストでソートしたときに、リストの表示とCDocumentのリンクのさせかたが分かりません。
つまり、リストのどの行に、オブジェクト配列obj[10]の何番目が入っているのか、どうやってリンクさせればいいんでしょうか?
0009デフォルトの名無しさん
2007/08/14(火) 06:55:17CListCtrl.SetItemDataでインデックス・ポインタ等を関連付けておく。
UI上でのインデックスは、GetItemData用と割り切って考えるといい。
0010デフォルトの名無しさん
2007/08/14(火) 07:21:23レス有難うございます。
やってみたのですが、SetItemDateは、 LVITEM 構造体の lParam メンバの値を設定するもののようなのですが、
で、ソートするときに、このlparamの値を、itemの値と同じ通し番号にしているので(他から引っ張ってきたソート用
のコードで、なんでこうしているのかわからないのですが・・・)、
初めにセットしたlParamの値がソートすることで消えてしまいます。
ソートのコードがおかしいのでしょうか?
どうすればよいのでしょう。
0011デフォルトの名無しさん
2007/08/14(火) 07:36:31CompareFuncの中もobjを使って比較すればよいのですね。
わかりました。
ありがとうございました。
0012デフォルトの名無しさん
2007/08/14(火) 08:11:07ちゃんと頭を使ってドキュメントを読めば、そんな引っ張ってきたロジックに頼らずに
自分でソートくらい書けるようになりますよ。
尤も、SetItemDateなんてTypoやっているようじゃお郷が知れますがね。
0013デフォルトの名無しさん
2007/08/14(火) 09:10:370014デフォルトの名無しさん
2007/08/14(火) 09:34:54スレ汚し勘弁
0015デフォルトの名無しさん
2007/08/14(火) 23:24:41lParamの値からFindItemを使ってアイテムのIndexを取得してソートに利用
すれば良いでしょう。そうすれば、後からソートをし直してもIndexは
変わってもlParamの値は変わらないので、配列に関連付けて使う事が可能です。
この場合lParamはアイテム挿入時に一度セットしたら後から変えないで下さい。
0016デフォルトの名無しさん
2007/08/16(木) 20:44:02テキストエディタとかにルーラー(目盛り)ついてますが
あれと同等のことをやりたいです。下にスクロールしても常に表示するみたいな
CScrollViewと CDC::IntersectClipRectつかってもうまく行きそうにない・・・。
CViewとIntersectClipRectでスクロールは自前でやるしかないのでしょうか?
# CSplitterWndでルーラー部と本体部の2つのViewってのもありでしょうか・・・
0017デフォルトの名無しさん
2007/08/16(木) 21:57:04試してみます thx
0018デフォルトの名無しさん
2007/08/17(金) 00:39:30その程度のものなら自前で作ってもたかがしれてる
ドキュメント読んで使い方を覚えるほうが面倒だよ
0019デフォルトの名無しさん
2007/08/17(金) 01:00:02ダイアログのクラスの名前を間違えたので、
ダイアログのクラスを一旦削除して、同じ名前のダイアログのクラスを再度作成すると以下のエラーがでます
error C2374: 'classCDialogXXXX' : 再定義されています。2 回以上初期化されています。
'classCDialogXXXX' の宣言を確認してください。
error C2084: 関数 'CRuntimeClass *CDialogXXXX::GetRuntimeClass(void) const' は既に本体を持っています。
'GetRuntimeClass' の前の定義を確認してください
・・・
grepしてもclassCDialogXXXXは一箇所しか見つかりません・・・
同じ名前のクラスを再度作るにはどうすればいいですか?
0020デフォルトの名無しさん
2007/08/17(金) 01:13:13単に、消し忘れた場所があるだけのような気もするが……
リビルドとかいう基本的な話じゃないよな?
0021デフォルトの名無しさん
2007/08/17(金) 11:28:49メニューバーはありで、ツールバーは使いません。
ドキュメントを1つ扱います。
ビューでは、8割がボタンなどで、2割が独自の描画をします。
ビューの一部だけを独自描画の時に、どちらを選ぶのが適切か教えて下さい。
0022デフォルトの名無しさん
2007/08/17(金) 17:32:08画面の一部のみ独自で描画したいというだけなら
DialogでもSDIでもどっちでも構わない。
メニューありでボタンが一杯という所を見る限り
自分ならSDIでViewの種類をCFormViewにする。
0023デフォルトの名無しさん
2007/08/17(金) 22:57:420024デフォルトの名無しさん
2007/08/17(金) 23:34:25大体、CViewから派生させ、すべて自前で描画したほうが
客の理不尽な要求に応じれる。
0025デフォルトの名無しさん
2007/08/18(土) 00:49:360026デフォルトの名無しさん
2007/08/18(土) 04:41:410027デフォルトの名無しさん
2007/08/18(土) 10:29:110028デフォルトの名無しさん
2007/08/18(土) 10:52:49>ダイアログの何が便利なのかさっぱりわからん
ビューとドキュメントをわざわざ分離するまでもない場合、コード量が減る。
0029デフォルトの名無しさん
2007/08/18(土) 22:57:02その程度のプログラムを作成する必要があるのかしらん?
0030デフォルトの名無しさん
2007/08/19(日) 01:28:23プログラムの規模とその必要性に関連は無いし。
MFCで小規模アプリ組むの禁止〜!
ってな決まりもないしね。
0031デフォルトの名無しさん
2007/08/19(日) 02:36:15MFCは大規模アプリケーションには向きませんよ
0032デフォルトの名無しさん
2007/08/19(日) 02:50:20あれだろ?
MSの仕様から逸脱した仕様を希望する馬鹿な客だろ?
そういうの刎ねちゃって問題無い場合がほとんどだぜ
そいつの好感度上げてもなんもいいことねーし
やったからって次の仕事がくるかどうかも全然関係無い場合が多い
俺はタブフォーカスやショートカットの類は全部高額な金額ふっかけて刎ねてる
やりたきゃ自分のところでやれと
正直、やるだけ無駄、全く意味無し
0033デフォルトの名無しさん
2007/08/19(日) 05:50:13MFCは今後は.NETに取って代わられるというような話を聞きました。
実際どうなんでしょ?
0034デフォルトの名無しさん
2007/08/19(日) 06:30:35.NETってなーに?
0035デフォルトの名無しさん
2007/08/19(日) 06:38:50でも.NET FrameworkってC++で使えるの?
0036デフォルトの名無しさん
2007/08/19(日) 11:43:23まあ、単純で簡単な.NETに移っていくのはしょうがないんじゃね。
VSの機能も、明らかにC++よりC#に力入れてるし。
MFCがなくなることはないだろうけど、使う機会はゆっくり減っていくかと。
0037デフォルトの名無しさん
2007/08/19(日) 12:25:21MFC+C++の形を保ってくれないと困る
ソース流用できねーじゃん
基本理念(オブジェクト指向)が変わらないのに
新しい言語なんて無駄に作るんじゃねぇといいたくなる
0038デフォルトの名無しさん
2007/08/19(日) 13:50:400039デフォルトの名無しさん
2007/08/19(日) 14:10:15C++/CLI
>>37
>組み込みプログラムとそのツール
GUIとファイル処理、通信部でも作っとけば、
ちょっとした組み合わせと改造で事足りるんじゃないか?
その程度だったら、2ちゃん回ってる時間を少し割けば、速効で作れるだろ
VC、VBだろうが、OOPがどうとか目くじら立てるほどのもんかね?
組み込みでアーキテクチャやOSやらが変わったり、
実績のないボード動かしたりするほどの手間でもないだろ
0040デフォルトの名無しさん
2007/08/19(日) 20:01:19客先から見たら、.NETであることによるメリットってなにもないよね?
しかも、.netは遅いなんてことも浸透してるから・・・
0041デフォルトの名無しさん
2007/08/20(月) 00:32:37MFCほどわからんもんはない
0042デフォルトの名無しさん
2007/08/20(月) 00:47:01なんだろうなあれ?
なんであんな糞動作するんだろか?
スクリプトで動作してんのかな?
Vistaといい動作の糞なアプリが多くなったな
0043デフォルトの名無しさん
2007/08/20(月) 06:16:33糞動作の意味がわからん
中間言語で動いてるんだから初回起動は遅いのがあたりまえだろ
もっさりしているが 異常動作してるわけじゃない
さらにVistaをアプリと分類する頭も逝かれてるな
0044デフォルトの名無しさん
2007/08/20(月) 09:28:570045デフォルトの名無しさん
2007/08/20(月) 09:31:230047デフォルトの名無しさん
2007/08/20(月) 11:38:51ヒント
1年目マでも使える
開発期間
ASP.NET
0048デフォルトの名無しさん
2007/08/20(月) 17:14:01if (pApp != NULL)
return pApp->DoMessageBox(lpszText, nType, nIDHelp);
else
return pApp->CWinApp::DoMessageBox(lpszText, nType, nIDHelp);
0049デフォルトの名無しさん
2007/08/20(月) 22:29:14やっぱ、もっさりしてるんじゃんw
これが糞動作でなくてなんなんだと聞きたい
俺等は.Netをサポートしてバージョンをわざわざアップしてやるのに
動作はもっさりすんのか?
お前等なんて一生もっさりしてればいいんだ
0050デフォルトの名無しさん
2007/08/20(月) 22:36:34CDC::SelectObjectの戻り値を最後に戻す方法に比べて、
なにかデメリットってありますか?
こっちのほうがずっと簡潔に書けると思うのだけど。
0051デフォルトの名無しさん
2007/08/20(月) 23:15:09でもまあ今時のPCならデメリットと言えるほどのものではないだろう。
0052デフォルトの名無しさん
2007/08/21(火) 20:45:43どっちでもいい
0053デフォルトの名無しさん
2007/08/22(水) 12:37:48やっぱりSaveDCとRestoreDCのほうが便利ですよね。
なんでこの方法って広く浸透していないんだろう。
卑怯な方法みたいに書かれているところもあったし。
>>52
これはどういうことでしょうか?
SaveDCはスタック的に何回でもコールできるみたいですけど。
0054デフォルトの名無しさん
2007/08/29(水) 20:40:42CViewのOnDrawで再描画行いたいんですけど
CView::GetDocumentのような
GetViewみたいなの無いですか?
OnDrawするような再描画コマンドでもいいです。
0055デフォルトの名無しさん
2007/08/29(水) 21:18:28Viewの更新は、基本的にCDocument::UpdateAllViewsで通知する
GetFirstViewPosition/GetNextViewを使って、
関連付けられたViewの取得もできなくはないけど。
0056デフォルトの名無しさん
2007/08/29(水) 23:47:13CMyView* pView = (CMyView*)AfxGetMainWnd()->GetActiveView();
pView->InvalidateRect(NULL, FALSE);
0057デフォルトの名無しさん
2007/08/29(水) 23:49:32誰か詳しいページ知ってる人いませんか?
コードGruruしかない?
0058デフォルトの名無しさん
2007/08/30(木) 14:55:47C#かBCBやりなさい
0059デフォルトの名無しさん
2007/08/30(木) 23:16:51ダイアログに貼り付けたWeb Browserコントロールで
下記のようにNavigate2したいのですが、どうすればできるでしょうか?
CWebBrowser2* wb = (CWebBrowser2 *)GetDlgItem(IDC_EXPLORER1);
wb->Navigate2(url,NULL,NULL,NULL,NULL・・・);
0060デフォルトの名無しさん
2007/08/30(木) 23:34:590061デフォルトの名無しさん
2007/08/31(金) 09:07:23MFCはドッキングツールバーがあるから
ドッキングウインドウは簡単だけど?
0062デフォルトの名無しさん
2007/08/31(金) 14:57:46なら教えてやれよ。
0063デフォルトの名無しさん
2007/08/31(金) 17:12:58http://www.codeproject.com/docking/sizecbar.asp
0064デフォルトの名無しさん
2007/08/31(金) 23:11:460065デフォルトの名無しさん
2007/09/01(土) 11:35:46hMap = CreateFileMapping( hFile, 0, PAGE_READONLY, 0, 0, NULL); // MAP名なし
if( hMap <= 0 )
{
return false;
}
pPointer = (char*)MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, 0); // 全サイズ
↑のようにとするとhFileの内容が数1G超とかの場合、無謀になるような気がしますが
MapViewOfFileEx等で数ページ分を部分的に割り当てていくしかないでしょうか?
1Gぐらいのファイルを試してみるとpPointerがNULLでした。
0066デフォルトの名無しさん
2007/09/01(土) 11:40:580067デフォルトの名無しさん
2007/09/01(土) 12:14:26CDockBarとかCDockContextとかMSDNドキュメントにも載ってないしソース読むしかないもんな
でも.NETだと最初からリサイズ可能ドッキングバーがあるんだよなー・・・なぜMFCも拡張せん!ヽ(`Д´)ノ
0068デフォルトの名無しさん
2007/09/01(土) 14:53:090069デフォルトの名無しさん
2007/09/01(土) 17:48:35.NETマンセー時代は来るんですか?
0070デフォルトの名無しさん
2007/09/01(土) 23:55:430071デフォルトの名無しさん
2007/09/02(日) 00:18:120072デフォルトの名無しさん
2007/09/02(日) 00:23:31.NETに比べたら100倍はいいと思うが?
0073デフォルトの名無しさん
2007/09/02(日) 00:28:050074デフォルトの名無しさん
2007/09/02(日) 11:58:330075デフォルトの名無しさん
2007/09/02(日) 14:27:02現在、WINでGUIを作成するなら最強だと思う。
MFC無い時代はWINアプリを書くのはしんどかった。
最近C#なんてあるが、所詮インタプリタみたいなもんだからおもちゃw
0076デフォルトの名無しさん
2007/09/02(日) 15:24:090077デフォルトの名無しさん
2007/09/02(日) 15:43:12現在、WINでGUIを作成するなら最強だと思う。
.NET無い時代はWINアプリを書くのはしんどかった。
昔MFCなんてものがあったが、所詮遺産みたいなもんだからガラクタw
0078デフォルトの名無しさん
2007/09/03(月) 00:22:510079デフォルトの名無しさん
2007/09/03(月) 00:48:28ダウンしてみ。
.NETなんざ使う気しなくなるぞ
0080デフォルトの名無しさん
2007/09/03(月) 01:45:520081デフォルトの名無しさん
2007/09/03(月) 03:31:470082デフォルトの名無しさん
2007/09/03(月) 11:39:24後のメンテナンス性を考慮して、ダイアログエディタではなく
プログラム内の初期化処理にて生成したいのですが、
どういう関数を使えばいいのですか?
よろしくお願いします。
0083デフォルトの名無しさん
2007/09/03(月) 12:42:25CButton::Create
0085デフォルトの名無しさん
2007/09/03(月) 20:50:30C with class でしかないじゃん、C++と言うより
0086デフォルトの名無しさん
2007/09/03(月) 20:58:27"C with class"であることの何が悪いのか知らんけど、クラス継承もあるし、オペレータオーバロードもある。
新しいMFCならテンプレートも使っているね。
0087デフォルトの名無しさん
2007/09/03(月) 23:46:56ダイアログの表面色を塗りつぶしてるんですけど、
タブコントロールのタブが並んでいる部分の横の余った空間や、
タブコントロールの周囲の微小な背景がグレーのままです。
ここを塗るにはどうしたらいいんでしょうか。
塗るでもいいし、背景を透過にできればいいんですけど。
0088デフォルトの名無しさん
2007/09/03(月) 23:53:19場所は↑この方が説明してるのと同じです。
0089デフォルトの名無しさん
2007/09/04(火) 21:26:42SetRegisterAsDropTarget(TRUE)をしてもダメだった
0090デフォルトの名無しさん
2007/09/04(火) 23:03:190091デフォルトの名無しさん
2007/09/04(火) 23:12:42WM_DROPFILESのイベントハンドラ追加のみで出来ました。
ショートカットだけじゃなく、htmlファイルやtxtファイルも表示可。
0092デフォルトの名無しさん
2007/09/04(火) 23:36:090093デフォルトの名無しさん
2007/09/05(水) 00:33:26通常のCHtmlViewではドロップできませんでした
MFCのバージョンが関係あるかもしれないでしょうか?
自分はVisual Studio 2005 Standard Edition SP1を使ってます(WinXP&IE6)
>>91
OnCreateでDragAcceptFiles()してWM_DROPFILESを追加したら、
ローカルのファイルはドロップできるのですが
IEからのURLのドラッグ&ドロップはできませんでした・・・
IEからのURLのドロップをしたいのです
0094デフォルトの名無しさん
2007/09/05(水) 09:49:06指定した位置にちゃんと描かれず、ネットで使用例を漁ってみたところ、
dc.LPtoDP(&rect);
dc.DrawDragRect(rect, Last_draw_size, NULL, CSize(0, 0));
という記述がありました。
これに倣ってLPtoDP()してみたらちゃんと描かれたんですけど、
LPtoDP()するということはデバイス座標ですよね?
MSDNの「論理座標」というのはどういう意図なんでしょうか?
CDC::Rectangle()のほうにも論理座標と書かれていて、
こっちはLPtoDP()は必要無いんですけど。
0095デフォルトの名無しさん
2007/09/05(水) 14:55:19MSDNの説明が間違っているな、これ。英語版でも駄目だな。
VS2005のCDC::DrawDragRectのコードだと、
矩形描画の範囲を指定するのにSelectClipRgnを使っているが、
この関数はデバイス単位での指定を仮定しているにも関わらず、
単位変換無しでそのまま渡している。
0096デフォルトの名無しさん
2007/09/05(水) 23:49:14ステータスバーをスレッド中から参照しようとすると、
Assertion Failedで怒られてしまいます。
ダイアログに変数で CStatusBar m_statubar を追加して
OnInitDialog でCreate、ペインの初期化を行い
ダイアログのコンストラクタで外部変数で定義した CStatusBar *m_sb に
m_sb = &m_statusBar でアドレスを渡してスレッドで参照しているのですが
どこがいけないのでしょうか?
0097デフォルトの名無しさん
2007/09/05(水) 23:55:33解析情報ありがとうございます。
やっぱりCDC::DrawDragRect()ってデバイス単位で渡すのですよね。
昔からある関数なのにドキュメント修正すらされてないのか…。
0098デフォルトの名無しさん
2007/09/05(水) 23:59:24ちゃんとMSに言えば多分直してくれるよ。
0099デフォルトの名無しさん
2007/09/06(木) 00:11:21メインスレッド以外からコントロールを操作してはいけないからと思われ。
0100デフォルトの名無しさん
2007/09/06(木) 00:13:46http://msdn2.microsoft.com/ja-jp/library/h14y172e(VS.80).aspx
0101100
2007/09/06(木) 00:14:5199じゃなくて96宛です。
0103デフォルトの名無しさん
2007/09/06(木) 01:28:16作り方によってはタイマー監視でもいいけど、同期オブジェクト使った方がいいかも
スレッドプログラミングをタイマーで監視するプログラムは安易でいいけど嵌ることもあるから
0104デフォルトの名無しさん
2007/09/06(木) 01:32:44タイマーで良いや
0105デフォルトの名無しさん
2007/09/06(木) 07:34:25何を監視するんだか。
0106デフォルトの名無しさん
2007/09/06(木) 08:20:53さぁ、ドキュメントのフィードバックをしよう
0107デフォルトの名無しさん
2007/09/07(金) 23:14:58DLLを作成し、そこからAfxBeginThreadでスレッドを複数立ち上げているのですが、
メモリリークが起こってしまいます。 同様のコードをDLL経由でなく、EXEから直接動かすとリークしません。
恐らく、何らかの初期化処理が足りてないためと思っているのですが、心当たりのある方がいらっしゃいましたら、教えてください。
//--- 以下ソース
#pragma once
#include "TestThread.h"
class CThreadManager
{
public:
CThreadManager() {
m_pThreads = NULL;
}
virtual ~CThreadManager() {
delete [] m_pThreads;
}
void Run() {
if (m_pThreads == NULL) {m_pThreads = new CTestThread[50];}
for (int i = 0; i < 50; i ++) {
if (m_pThreads[i].IsEnable()) {
m_pThreads[i].SetEnable(FALSE);
m_pThreads[i].Run();
return;
}
}
}
private:
CTestThread* m_pThreads;
};
0108デフォルトの名無しさん
2007/09/07(金) 23:15:43#pragma once
class CTestThread
{
public:
CTestThread()
{
m_pThread = NULL;
m_bEnable = TRUE;
}
virtual ~CTestThread(void)
{
EndThread();
}
void Run()
{
EndThread();
m_pThread = ::AfxBeginThread(TestProc, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if (m_pThread != NULL)
{
m_pThread->m_bAutoDelete = FALSE;
m_pThread->ResumeThread();
}
}
0109デフォルトの名無しさん
2007/09/07(金) 23:16:15BOOL IsEnable() {return m_bEnable;}
void SetEnable(BOOL bEnable) {m_bEnable = bEnable;}
private:
void EndThread()
{
if (m_pThread != NULL)
{
m_bEnable = -1;
::WaitForSingleObject(m_pThread->m_hThread, INFINITE);
delete m_pThread;
m_pThread = NULL;
}
}
static UINT TestProc(LPVOID pParam)
{
for (int i = 0; (i < 50) && (((CTestThread*)pParam)->m_bEnable == FALSE); i ++) ::Sleep(5);
((CTestThread*)pParam)->m_bEnable = TRUE;
return 0;
}
CWinThread* m_pThread;
BOOL m_bEnable;
};
0110デフォルトの名無しさん
2007/09/07(金) 23:16:58108,109は一つのファイルを分割しています。
それと、掲示板に登校するサイズを減らすためにヘッダファイルのみで書いてみました……
よろしくお願いします。
0111デフォルトの名無しさん
2007/09/07(金) 23:44:11CThreadManager::Run(); 関数をタイマーで何回も呼ぶと、どんどんメモリが消費されていくという現象です。
確認は[管理ツール]→[パフォーマンス]から行い、一日ほど回し続けました。
0112デフォルトの名無しさん
2007/09/09(日) 00:28:50初心者です、質問させてください。
OnFileNewなどMFCが用意してくれた関数の中身(=ソースコード)って
見る事ができないのでしょうか?
もしできるのなら、その方法を教えてください。
よろしくお願いします。
0113デフォルトの名無しさん
2007/09/09(日) 00:55:010114デフォルトの名無しさん
2007/09/09(日) 01:54:18もっと簡素化したソースで検証したほうがいいんでねえの?
あと、”何らかの初期処理”ってのが、DLLの初期処理ではないとか、
メモリリークが発生しているかどうかをどのように見極めているとか、
メモリリークは、1スレッドあたりどの程度発生しているとか、記載すべきことがあるんでねえの?
>>112
どのクラスのOnFileNewだかしらねーけど、MFCのソースはインストールされてんの?
されてんなら検索すればいいだろう。 されてねーならインストールすればいいだろう。
0115デフォルトの名無しさん
2007/09/09(日) 01:56:480116112
2007/09/09(日) 02:15:39「OnFileNew」をキーワードに、下記フォルダを検索したら探せました。
ありがとうございました!!
C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc
0117デフォルトの名無しさん
2007/09/09(日) 02:24:10最近MFCを始めました。
MFCってすごく難しく感じます。
実際どうなんですか?
0118デフォルトの名無しさん
2007/09/09(日) 02:25:59あなたにとって難しい。それだけのことです。
0119デフォルトの名無しさん
2007/09/09(日) 03:16:30平然と並列でないものを並べられると、頭がグラグラする。
漢文、英語、中国語とやってきて、
最近2ch語を始めました。
2ch語って凄く難しく感じます。
とかそんな感じか?
0120デフォルトの名無しさん
2007/09/09(日) 03:24:08リーク検出できなかったな
1日実行してみて、どれくらいリークしてるの?
0121デフォルトの名無しさん
2007/09/09(日) 08:17:53win32の経験があるのなら、mfcはそんなに難しくないと思うが。
0122デフォルトの名無しさん
2007/09/09(日) 13:15:43の考え方ができればいける。
0123デフォルトの名無しさん
2007/09/09(日) 13:48:24もっと簡素化したソースについては今から作る事にします。
>あと、”何らかの初期処理”ってのが、DLLの初期処理ではないとか、
何らかの初期化処理というのは、単にスレッドを起こす前に、おまじない的なものが必要なのかと思って書いただけです。
また、DLLMain関数はMFC側で作っているものを使っているので、こちらの初期化処理については不明です。
>メモリリークが発生しているかどうかをどのように見極めているとか、
管理ツールからパフォーマンスモニタを開きまして、そこでプロセスを選択して、15秒おきにワーキングセットを監視しています。
直接のメモリリークではないと思いますが、exeとの比較により、ワーキングセットの増え方があまりに異常なので問題かと……
>メモリリークは、1スレッドあたりどの程度発生しているとか
1スレッドあたりのリークは調べていませんが、15秒おきのワーキングセット増加値は平均で23kBほどです。
これは、CThreadManager::Run();をタイマーで、90msごとに動かした結果です。
一日動かしたときは、これよりも間隔をあけて1000msでやりました。割合は減りますが、同じようにリークします。
なお、1000msで一日動かしたときの、一日のリーク量は1MBほどです。
>>120
1000ms間隔で1MB程度です。
ちなみに、事情がありまして、DLLエクスポートの部分は少々特殊かなぁ……と。
そこのソースも書いてみます。
0124デフォルトの名無しさん
2007/09/09(日) 13:49:25__declspec(dllexport) void CreateThreadManager(DWORD** ppObject)
{
*ppObject = (DWORD*)(new CThreadManager());
}
__declspec(dllexport) void RunThread(DWORD* pObject)
{
((CThreadManager*)pObject)->Run();
}
__declspec(dllexport) void DeleteThreadManager(DWORD* pObject)
{
delete (CThreadManager*)pObject;
}
//アプリ側の使用部分
#include "stdafx.h"
#include "ThreadTest.h"
#include "ThreadTestDlg.h"
#include "ThreadDll.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CThreadTestDlg::CThreadTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CThreadTestDlg::IDD, pParent)
{
m_pManager = NULL;
m_nTimerEvent = 0;
}
// 続く
0125デフォルトの名無しさん
2007/09/09(日) 13:50:08BEGIN_MESSAGE_MAP(CThreadTestDlg, CDialog)
ON_WM_TIMER()
ON_WM_DESTROY()
END_MESSAGE_MAP()
BOOL CThreadTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
::CreateThreadManager(&m_pManager);
m_nTimerEvent = SetTimer(1, 89, NULL);
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}
void CThreadTestDlg::OnTimer(UINT_PTR nIDEvent)
{
if (m_pManager)
{
RunThread(m_pManager);
}
CDialog::OnTimer(nIDEvent);
}
void CThreadTestDlg::OnDestroy()
{
CDialog::OnDestroy();
if (m_nTimerEvent != 0)
{
KillTimer(m_nTimerEvent);
}
DeleteThreadManager(m_pManager);
}
0126デフォルトの名無しさん
2007/09/09(日) 13:51:26もうちょっと空けてやらないと、マシンスペックの弱いPCだと落ちてしまうのではないかと……
0127デフォルトの名無しさん
2007/09/09(日) 13:59:38そうですか?
BCBやVC#と比べると何をどうしていいのかまったく分からん
0128デフォルトの名無しさん
2007/09/09(日) 14:11:26>何をどうしていいのかまったく分からん
たとえば、何をどうしたいのかな?
よほど難解なことをしようとしてるのか。それともごく標準的なGUIツールも作れないのか。
0129デフォルトの名無しさん
2007/09/09(日) 14:18:07ぶっちゃけ、すぐ上のサンプルコードは動かせる?
0130デフォルトの名無しさん
2007/09/10(月) 00:10:07とりあえず、そのもたないと思われる状態で一日動かしてみるべき
0131デフォルトの名無しさん
2007/09/12(水) 10:16:49Serializeでないファイル読み書きに
CArchiveを使ってしまってよいものでしょうか?
virtual void LoadData(CArchive& ar);
virtual void SaveData(CArchive& ar) const;
こんな感じのメンバ関数を用意しようかと思っているんですけど。
それとも、CFile*を引数にしてしまうべきですか?
0132デフォルトの名無しさん
2007/09/12(水) 18:42:47シリアル化にIMPLEMENT_SERIALを使わないなら、
CObject派生の意味は殆ど無いし、良いんじゃないかな。
結局は単純なバイト列の読み書きなのだし。
0133デフォルトの名無しさん
2007/09/13(木) 09:47:20ありがとうございます。
自作データクラス群は大元の親クラスが純粋仮想クラスで、
また、自分自身がCObjectから派生することに慣れていないため、
この形のままCArchiveだけ使えないかなと思いました。
このデータクラス群の一つが内部でCArrayのメンバを持っているのですが、
これを保存するためにCArray::Serializeを呼ぼうとすると、
SaveDataはconstにはできないですね…。
まぁconstを取り外してしまえば、とりあえず動きそうですが、
SaveDataの中でMFCクラスメンバのSerializeをコールというのが
かなりまずい構造なのかなぁ。
0134デフォルトの名無しさん
2007/09/13(木) 10:05:42MFC - 概念 - シリアル化 - シリアル化 : オブジェクトのシリアル化
- アーカイブを通じた CObject の格納と読み込み
0135デフォルトの名無しさん
2007/09/13(木) 22:03:21CDialogの派生クラスを作成して、そのダイアログに
CButtonやCStaticなどのコントロールを貼り付けています
そのコントロールの上に色々描画したいんですが
やり方が解りません。どうすればいいでしょうか?
OnPaintを作ってその中で
CPaintDC dc(this);
dc.MoveTo(*,*);
dc.LintTo(**,**);
としてみましたが、コントロールの上でなく背後に描画されてしまいます
0136デフォルトの名無しさん
2007/09/13(木) 22:57:38ダイアログを派生させるまで分かって、
コントロールを派生させることに思いつかなかったってことでいいの?
0137デフォルトの名無しさん
2007/09/13(木) 23:53:45CStaticを派生させてそのOnPaintを処理したら
キャプションが表示されなくなりました。
やりたいことはCStaticのコントロールがあれば、そのコントロールに
縁取りして線を描いたり、コントロールの上にビットマップを表示したり
したいんです。その時CStaticの文字を表示する機能はそのまま活かしたい。
イメージとしてはダイアログを表示してそれをビットマップで保存し、
その上に落書きする、みたいな。
0138デフォルトの名無しさん
2007/09/14(金) 12:06:25char Buff[1000];
int nRet = ((PT_FUNC)*m_fpFunc)( Buff, sizeof(Buff) );
1行目でBuff領域を確保した後、
2行目のDLLをコールするとBuffのアドレス値が変化してしまいます。
しかもthis変数の値も変化してしまい、エリアの破壊が起きている感じです。
DLL側(自作)では無処理のreturn としています。
2行目のBuff宣言を static char Buff[1000] とすると正常に動作します。
DLL関数には 静的なバッファしか渡せないという事なんでしょうか?
教えて下さい
0139デフォルトの名無しさん
2007/09/14(金) 12:26:52m_fpFuncの中身をさらせ
0141デフォルトの名無しさん
2007/09/14(金) 12:53:40FARPROCやめて実体と同じ型で宣言してみ
引数と戻値が呼び出しと実体で違っててスタックを壊してるだけだと思うぞ
0143デフォルトの名無しさん
2007/09/15(土) 17:31:24> やりたいことはCStaticのコントロールがあれば、そのコントロールに
> 縁取りして線を描いたり、コントロールの上にビットマップを表示したり
> したいんです。その時CStaticの文字を表示する機能はそのまま活かしたい。
CStaticのOnEranseBkGroundって作れるっけ? 作れるんなら、そこで処理してみたら?
作れないなら、無理っぽい。
0144143
2007/09/15(土) 17:34:21○OnEraseBkgnd
0145デフォルトの名無しさん
2007/09/15(土) 19:40:30結局CStaticから派生してOnPaintの中で
DrawTextとかFrameRectとかを使用するようにしました
今OnEraseBkgndでFrameRectを使ってみましたが、
これでも出来そうな気がします
しかし、テキストの描画時にFrameRectで描いた枠が消されて
しまうようで他にも幾つかいじらなければいけないっぽいですね
一応解決です、皆さんアリガト
0146デフォルトの名無しさん
2007/09/16(日) 14:26:04CHtmlView::Navigate2のエラー検知を行いたいのですが、
どうすれば良いのでしょうか?
どなたか教えてください。
0147デフォルトの名無しさん
2007/09/16(日) 14:49:26m_pcDebugDlg->Create(IDD_TEST);
を実行すると、
ERROR: Cannot find dialog template with IDD 0x36B1.
というエラーが発生します。
何かの設定が足りないのでしょうか?
よろしくお願いします。
0148デフォルトの名無しさん
2007/09/16(日) 15:25:030149147
2007/09/16(日) 17:25:10IDD_TEST は resource.h に定義されていました。
プロジェクト/プロパティ/MFCの使用を「共有DLLでMFCを使用する」から
「スタティックライブラリでMFCを使用」に変更したら、ダイアログが表示される様になりました。
ただし、客先からは「共有MFC」でと指示があります。
何が悪いのでしょうか?
0150デフォルトの名無しさん
2007/09/16(日) 17:33:080151デフォルトの名無しさん
2007/09/16(日) 17:44:40.rc ではどうなってますか
まあ>>150でおkだと思うけど
0152147
2007/09/16(日) 18:02:30IDD_TEST DIALOGEX 0, 0, 250, 170
という記述がありました。
リソースをビルドという方法がよくわからなかったのですが、
ソリューションのリビルド
. rcファイルのコンパイル
の両方とも、現象は変わりませんでした。
リソースのビルドって、他のやり方でしょうか?
0153デフォルトの名無しさん
2007/09/16(日) 18:10:280154147
2007/09/16(日) 18:43:56DLL関数の先頭に
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
を追加したらうまくいきました。
どうもありがとうございました。
0155デフォルトの名無しさん
2007/09/19(水) 17:46:56プログラムが正常終了してしまいます。
プログラムを終了させたくないのですが、どうすればいいのか教えて下さい。
よろしくお願いします
0156デフォルトの名無しさん
2007/09/19(水) 18:47:04つ[OnOK()]
0157デフォルトの名無しさん
2007/09/19(水) 19:23:590159デフォルトの名無しさん
2007/09/19(水) 20:57:01OnOK()の意味をちゃんと考えるべき。
そして「Enterキーを押したときにダイアログを終了させない」という仕様の意味をちゃんと考えるべき。
するとどうやって実現するのが正しい形かわかるでしょ。
面倒でも、何事も正しい形ってものを常に意識して作っておかないと後悔するよ。大袈裟だがw
0160デフォルトの名無しさん
2007/09/19(水) 21:19:33元のダイアログにはそんな機能ない
0161デフォルトの名無しさん
2007/09/19(水) 22:50:34よりは
リターンキーが押される→OnOK()を呼ばないようにする
の方がスマート。
よってPreTranslateMessageを推奨するよ。
他の用途にも使えるし覚えといて損はない。
0162デフォルトの名無しさん
2007/09/19(水) 23:14:48メッセージ発生するごとにPreTranslateMessage呼ばれるのも気にした方がいいよ
OnOKよりはるかにオーバヘッドになってるはず
0163デフォルトの名無しさん
2007/09/20(木) 12:46:43Okボタンがデフォルトボタン形状なのはUI的にまずい。
0164デフォルトの名無しさん
2007/09/20(木) 17:56:11レイヤー情報などを表示するウィンドウがあるんですが、
それをCDialogで作ろうと思っているんです
m_dlg.Create( CTestDialog::IDD , this );
m_dlg.ShowWindow( SW_SHOW );
で、一応表示されるんですが、
ダイアログにフォーカスが写ると、
メインウィンドウのタイトルバーが灰色になるのです。
正しい、子ウィンドウの作り方ってありますか?
0165デフォルトの名無しさん
2007/09/20(木) 19:38:140166デフォルトの名無しさん
2007/09/21(金) 12:26:58PreTranslateMessageでEnterキーを弾いてしまうと、
OKボタン以外のボタン上でEnterキーを押したときにも無視されてしまいます
(そのときにはそのボタンが押されるべき)。
もちろん、PreTranslateMessageでフォーカス位置を調べてもいいけど、
そこまで面倒なことをするのなら、
OKボタンをDisable・非表示にしたほうが早いです。
OKボタン自体は残しておきたいのであれば、
なにもしない非表示ボタンをデフォルトにすればよいです。
PreTranslateMessageの方法だと、デフォルトボタン枠が出ているのに
Enterキーが効かないというGUI上の矛盾もあります。
0167392
2007/09/21(金) 21:55:41> なにもしない非表示ボタンをデフォルトにすればよいです。
デフォルトボタンは何ですか、と問われたときに、ありませんと答える方が良いかと。
0168デフォルトの名無しさん
2007/09/22(土) 18:03:04・CStaticを派生させる。SS_BITMAPとSS_NOTIFYを設定する。
・OnMouseMoveでカーソルが乗ったらSetCaptureなどして降りるまでハイライト用のビットマップをSetBitmapする。
・カーソルが降りたらReleaseCaptuerして通常のボタン用ビットマップをSetBitmapする。
・OnLButtonUpで親ウインド(CDialog)にWM_COMMAND,BN_CLICKEDをPostMessageする。下記ソース参照。あと押された時のビットマップをセットする。
CMyButton::OnLButtonUp
{
WPARAM w = MAKEWPARAM(id,BN_CLICKED);
::PostMessage(hParent,WM_COMMAND,w,0);
ごにょごにょ
}
すると確かにLボタンを押下すると親のダイアログに通知されます。
しかしながら親ダイアログではON_BN_CLICKEDマクロで登録したハンドラが2回呼ばれます。
一回目は不明。2回目は私の作ったCMyButton::OnLButtonUpから。
誰が一回目のBN_CLICKEDを送るの?CStaticの規定クラス??
0169392
2007/09/22(土) 22:02:59#define STN_CLICKED 0
#define BN_CLICKED 0
0170デフォルトの名無しさん
2007/09/22(土) 22:19:04ありがとうございます。
0171デフォルトの名無しさん
2007/09/22(土) 23:31:42とにかく、GUIを作るのが難しすぎに感じます。
VC#なんて超簡単にGUI作れるのに・・・
まだまだ、VC+++MFCはデファクトスタンダードなんですかね?
0172デフォルトの名無しさん
2007/09/23(日) 00:33:02MFCは欠陥製品だと思う
対抗するボーランドがコケちゃったんでMSの一人天下になっていますが
これに付き合わされる開発者はたまらない
C#を使いましょう
0173デフォルトの名無しさん
2007/09/23(日) 00:42:51VC#が簡単に、作れるって言っても例えばテキストエディタを作る場合
商用を考えたら標準のTextBoxなんて使い物になりません。
一から書くことになります。
だったら、WIN32APIを手間なく呼べるVC++に利がある。
VC#だと使う、WIN32APIをいちいち宣言しなくてはいけない。
0174デフォルトの名無しさん
2007/09/23(日) 01:58:19使わなくて言い環境なら、C#でやればいいだろう。
何故このスレで愚痴るのか理解できない。
0175デフォルトの名無しさん
2007/09/23(日) 23:52:49MFCの習得に挫折した人がMFC叩きしてるだけ。
穏やかになだめてあげてください。
0176デフォルトの名無しさん
2007/09/24(月) 00:10:51よく、Cはポインタで躓いたなんて人いるけど似たようなもん
0177デフォルトの名無しさん
2007/09/24(月) 01:45:06なんでもかんでもメッセージって逆に面倒臭いだけだったんじゃないだろうか・・・
0178デフォルトの名無しさん
2007/09/24(月) 02:17:59.NETなんて皆無では???
0179デフォルトの名無しさん
2007/09/24(月) 02:47:39だって糞おせぇし
0180デフォルトの名無しさん
2007/09/24(月) 02:54:450181デフォルトの名無しさん
2007/09/24(月) 03:10:20それって普通に作ってた奴の方が遅くなったんでしょ?w
0182デフォルトの名無しさん
2007/09/24(月) 05:07:52本来仕組みなど知らなくても簡単に使用できるのが隠蔽化だが
MFCには仕組みを知らなければバグの原因がまったく理解できない不可解な現象も多い。
それらを苦労して乗り越えて来た人間は威張り腐りって、
「MFCが糞なんじゃなくて理解できないやつが糞」と言いたいのだろう。気持ちはわかる。
だが世間一般ではそういう場合ライブラリが糞だという。
自分の腕前を自慢したいからって言葉を捻じ曲げてはいけない。
0183デフォルトの名無しさん
2007/09/24(月) 05:31:44OLEを隠蔽するフレームワークとして十分納得いくし、フル機能のウインドウズ
ソフトウエアを書くのにほかにいいライブラリが無かったのも事実だと思う。
0184デフォルトの名無しさん
2007/09/24(月) 06:03:59被害者意識が強い傾向が見られます。
何かトラウマになるような事でもあったのでしょうか(w
0185デフォルトの名無しさん
2007/09/24(月) 06:41:22永遠に更新を続けるべき
0186デフォルトの名無しさん
2007/09/24(月) 07:39:58あー、でも俺、そういうラッパー系のクラスで
下層の構造知らずにうまく包んであるもんってみたことないわ
無理なんじゃねぇの?って思ってる
可変長ですよといいつつ
なんも意識せずに1文字ずつ追加すると毎回全バッファを再確保する
最近の次世代(?)言語の文字列クラスのようにw
0187デフォルトの名無しさん
2007/09/24(月) 09:28:21CString -> System.Text.StringBuilder
と考えれば、それはそんなもんかって気もする。
Stringの連結はおまけ機能ってことで。
0188デフォルトの名無しさん
2007/09/24(月) 10:54:07ちょっと凝ったことをしようと思うと折角クラスで隠蔽化しているように見えても実際にはAPIと同じ名前のメソッドだからAPIと手間は変わらないし、
全てを網羅しているわけではないから結局APIを直截呼ばないといけないケースもある。
あれはだからAPIラッパクラス集と思えばいいのであって、それ以上のフレームワークと思ってはいけないのだろう
0189デフォルトの名無しさん
2007/09/24(月) 15:22:11>Stringの連結はおまけ機能ってことで。
そんなことになってるぐらいならラップなんてしないほうがいいじゃないって思う
0190デフォルトの名無しさん
2007/09/26(水) 11:01:12CBitmap* pBitmap = pDC->GetCurrentBitmap();
BITMAP bmp;
pBitmap->GetBitmap(&bmp);
とやってbmp.bmWidthやbmp.bmHeightを参照しようと思ったのですが、
ビューのOnDrawなどで渡される画面DCに対しては
GetBitmapがエラーになるようなのです。
メモリDCに対しては成功します。
もちろん、OnDraw時はGetClientRectを使えばサイズを取れるのですが、
関係無い場所でpDCだけを見て調べられないかなと思っています。
0191デフォルトの名無しさん
2007/09/26(水) 11:43:460192デフォルトの名無しさん
2007/09/26(水) 11:53:25ありがとうございます。
::WindowFromDCというのは、CDC::GetWindowと対応しているようなので、
CRect rect;
BITMAP bmp;
if (pDC->GetCurrentBitmap()->GetBitmap(&bmp)) {
/* メモリDC */
rect = CRect(0, 0, bmp.bmWidth, bmp.bmHeight);
}
else {
/* 画面DC */
pDC->GetWindow()->GetClientRect(rect);
}
とやってみたところ、どちらの場合でもサイズを取ることができました。
判定方法はこれで大丈夫ですよね?
0193デフォルトの名無しさん
2007/09/29(土) 13:30:06MFCでもサポートしてくれ
0194デフォルトの名無しさん
2007/09/29(土) 21:33:08.NET非常に残念だったな
0195デフォルトの名無しさん
2007/09/30(日) 01:39:05まさか
.NETは無しね!MFC大幅機能強化するから!
なんてことになるん(r
0196デフォルトの名無しさん
2007/09/30(日) 06:51:40まじレス希望
0197デフォルトの名無しさん
2007/09/30(日) 08:27:09MFC全盛期のPCでMFCを動かすと、今のハイエンドなPCで.netを動かすのとは較べ物にならないほどもっさりしています。
0198デフォルトの名無しさん
2007/09/30(日) 11:28:36必要かな?
0199デフォルトの名無しさん
2007/09/30(日) 12:54:06このスレへやってくる理由ってなんですか?
必要かな?
0200デフォルトの名無しさん
2007/09/30(日) 13:07:07冗談抜きで。
0201デフォルトの名無しさん
2007/09/30(日) 16:56:352008ではMFCはなくなってたお
0202デフォルトの名無しさん
2007/09/30(日) 18:25:472008でも含まれると考えられるソースはこちら
ttp://msdn.microsoft.com/msdnmag/issues/07/06/Cpp/default.aspx?loc=jp
0203デフォルトの名無しさん
2007/09/30(日) 18:29:110204デフォルトの名無しさん
2007/10/01(月) 11:36:20この拡張DLLを呼び出した側のインスタンスハンドルって
どうやって参照すればよいのでしょうか。
AfxRegisterClassで必要なのですが、
AfxGetInstanceHandleだと、大元のEXEのハンドルが返ってきてしまいます。
EXEから呼び出された別の拡張DLLがこの拡張DLLを使う可能性もあるため、
大元のEXEではなく、呼び出し元を参照できるようにしたいのです。
0205デフォルトの名無しさん
2007/10/01(月) 23:44:38コントロールってダイアログベースにするかViewをFormViewに選択するしか
使えないんでしょうか?
0206デフォルトの名無しさん
2007/10/02(火) 19:19:08プログレスバーについての質問。
時間がどのくらい掛かるか不明な処理でプログレスを表示したい。
Webなんかで有るような、2−3このコマが左から右へくるくる回ってるの
が良いんだけど、CProgressCtrlじゃできないっぽい?
なんか良い案あったらおしえて。
時間がどのくらい掛かるか不明なのは、開始ボタン押すとハードと通信して
ハードが処理終了するのを待つから。
ハードは詳細な進捗なんて返してくれない。
ハードの状態や処理対象によっても時間が大きく変わるので平均でこのくらい
ってどんぶりで表示するのも厳しい状況。
したがって、ループするようなヤツが欲しいといった理由。
0207デフォルトの名無しさん
2007/10/02(火) 19:21:100208206
2007/10/02(火) 19:29:58レスサンクス。
砂時計は却下されてしまいました。
と言うか、すでに砂時計は出してるけど、曰く
「ホントに、動いてるのか解らない」だそーで。
プラスでプログレスが欲しいんだと。
えらい人の考えは良くわかりません。
0209デフォルトの名無しさん
2007/10/02(火) 21:23:57まあ、砂時計出したままフリーズするアプリもあるから、動いているか
どうかを確認したいというのもわからなくはない。
どうしてもプログレスコントロールにこだわるなら、何回も繰り返して
描画してやればいいんじゃない?
0210デフォルトの名無しさん
2007/10/03(水) 01:24:29ん? Code Projectにあがっているコントロール”だけ”使えてないの?
そうなら、そのコントロールを挙げてくれ。
そうでなく普通のEditやComboも同じように使えてないなら、動的生成すればいい。
”Edit 動的生成”とかでググレば、サンプルとかあるんじゃねーかな。
0211デフォルトの名無しさん
2007/10/03(水) 02:23:43IEのようなウィンドウ右上のアニメーションで済むならCAnimateCtrlでが楽。
プログレスバーの現在位置が左から右へ動き続けるような奴だと
中断ボタンも必要だろうし、別スレッドでプログレスバー制御と中断の
入力待ちをすることになるんじゃないかな。
砂時計を却下する上司って良いなーと思った。
0212デフォルトの名無しさん
2007/10/03(水) 08:38:51IEのようなアニメーションもダメだろう
0213デフォルトの名無しさん
2007/10/03(水) 18:40:21http://blogs.wankuma.com/melt/archive/2007/06/21/81494.aspx
0214デフォルトの名無しさん
2007/10/03(水) 20:03:48コントロール内部に画像を表示させて、文字編集を行うものを作ろうと思ってるのですが
なかなかうまくいきません。
OnCtlColorでCreatePatternBrushで作ったものを返すようにして
何とか文字未入力領域に画像を表示させたのですが、
文字入力エリア部分に画像を表示できなくて困っています。
何かいい解決方法はないんでしょうか?
0215デフォルトの名無しさん
2007/10/03(水) 20:19:12SetBkModeで透過にするのを忘れている予感
マルチラインは、この方法だと不都合があるみたいなので注意
0216デフォルトの名無しさん
2007/10/03(水) 20:30:44あ、説明たりなくて申し訳ない。
複数行エディットコントロールについての話でした。
0217デフォルトの名無しさん
2007/10/04(木) 01:05:32CViewの派生クラス を A 、
CWndの派生クラス を B とします。
Aのメンバ変数にBを持ち、A の OnCreate にて B を Create し、A全体に貼り付けました。
正常に生成され、貼り付けもうまくいっているのですが、B にてマウスホイールが
取得出来ないことに気づきました。(クリック等は正常動作します)
どうもフォーカスがいっていないようなので、A の OnSetFocus にて、B に対して
SetFocus をすると、期待通りの動作をしてくれ、B にてホイールを取得出来る
ようになりました。
A全体にBが貼り付けてあり、これをクリックしたら当然Bにフォーカスが行くものだと
思っていたのですが、なぜ行かないのでしょうか?
XP Pro SP2
VC++8 sp1
0218デフォルトの名無しさん
2007/10/04(木) 02:15:47例えば、ラベルをクリックしてもフォーカス受け取らないじゃん?
そしてどーやるんだったか忘れた。 ごめん。
SPYでフォーカス受け取るコントロールと
受け取らないコントロールのメッセージの違いを調べる…とか。 激しく疲れるな。。
0219デフォルトの名無しさん
2007/10/04(木) 06:11:250220デフォルトの名無しさん
2007/10/06(土) 00:21:28idの設定て、IDC_STATIC? まさか、そんなはずは。 もうちょっと分かるように説明してくれ。
0221デフォルトの名無しさん
2007/10/06(土) 10:53:03今から付加したいのだが、どのクラスのどのプロパティーをいじったらええの?
VS20005 MFC
0222デフォルトの名無しさん
2007/10/06(土) 11:21:44ダイアログエディタかテキストエディタで<project>.rcを編集し給え。
0223デフォルトの名無しさん
2007/10/06(土) 11:58:13221です
rcファイルいじって悲惨な目(編集不能)に何回かあったのだが大丈夫なのか?
0224デフォルトの名無しさん
2007/10/06(土) 12:34:21何を悩んでるんだ?
0225デフォルトの名無しさん
2007/10/06(土) 12:53:44('ー')ゞラジャサンクス
0226デフォルトの名無しさん
2007/10/06(土) 13:57:59ダイアログエディタでプロパティを変更する行為だけで編集不能にできるならたいしたもんだ。
0227デフォルトの名無しさん
2007/10/06(土) 15:19:490228デフォルトの名無しさん
2007/10/06(土) 18:17:23日本語以外のOSでも正しく動作させたいのですが、
最小化ボタンの上にカーソルを合わせたときに表示されるツールチップの「最小化」
などは自動的に現地の言葉で表示されるのでしょうか?
0229デフォルトの名無しさん
2007/10/06(土) 19:09:310230デフォルトの名無しさん
2007/10/06(土) 19:24:130231デフォルトの名無しさん
2007/10/06(土) 19:28:51漏れたのもあるけど
0232デフォルトの名無しさん
2007/10/07(日) 09:57:50CString str = "33 "
str.Trim();
・・・
Truncate
ATLASSERT( nNewLength <= GetLength() );
Unicodeライブラリ使ってますがこれがまずい?
0233デフォルトの名無しさん
2007/10/07(日) 10:33:500234デフォルトの名無しさん
2007/10/07(日) 11:07:27それはそれとして、不思議な現象が。
1. CString str = "33"; // NG
2. CString str("33"); // OK
3. CString str; str = "33"; // OK
いまいち納得がいかない。
0235デフォルトの名無しさん
2007/10/07(日) 11:10:220236デフォルトの名無しさん
2007/10/07(日) 12:22:02コンストラクタと=の動作が違うんかな?とかわからずに言ってみるテスト
0237デフォルトの名無しさん
2007/10/07(日) 21:32:43初期化と代入の違いわかってるか?
あと_T()マクロがどう展開されるか
0238234
2007/10/08(月) 08:29:48CString(LPCSTR)
operator=(LPCSTR)
の両方とも定義されているので、2.と3.が通るのは分かるが、
なら、何故1.が通らないのかがよく分からない。
1.は3.の省略系みたいなものだとの解釈は間違い?
0239デフォルトの名無しさん
2007/10/08(月) 08:39:47コンパイラの立場でヘッダ見てみればいい
0240デフォルトの名無しさん
2007/10/08(月) 16:48:36CMDIChildFrameA :: OnCreate()
{
dlg.Create(IDD_DIALOG, this);
}
としておいて
Dialog 内 OnOKで
if ( GetParent()->IsKindOf(RUNTIME_CLASS( CMDIChildFrameA )) )
とすると何故か失敗するのですが・・・
GetParent()で取れるCWnd* がCMainFrameになっているみたいです。
誰かボスケテ
0241234
2007/10/08(月) 16:52:451.
CString str="33"; は、暗黙的に CString str("33") に変換される
2.
が、WCHARベースのCStringでは
#define CSTRING_EXPLICIT explicit
CSTRING_EXPLICIT CString::CString (LPCSTR str);
と宣言されることになる
3.
explicit宣言されていると、1.のような暗黙的なコンストラクタへの変換は禁止される。
よってコンパイルエラー発生。
explicit使った事無かったから、全然思いもつかなかった。
0242デフォルトの名無しさん
2007/10/08(月) 17:36:32Windowsの仕様で、自動的にフレームウィンドウを親にされてしまうみたいだな。
Get/SetOwnerで関連付けてしまうのも一つの方法か。
0243デフォルトの名無しさん
2007/10/08(月) 18:20:18色々試してみてたんだけど
GetWindow(GW_OWNER) ← 駄目
GetParent() ← 駄目
SetOwner() GetOwner()すればRUNTIME_CLASSうまくいきました
0244デフォルトの名無しさん
2007/10/08(月) 22:34:05MFC使わないコードで
Tooltip(?)の処理しなくても出てくるから
OSが処理してる。
だからOS依存で英語版なら英語で表示されるでしょ。
MFC内で独自処理してたらしらない
0245デフォルトの名無しさん
2007/10/08(月) 23:04:470246デフォルトの名無しさん
2007/10/08(月) 23:05:39なんかリソースファイルの中くまなくさがしてみるとか・・・
0247デフォルトの名無しさん
2007/10/09(火) 00:25:46で、そいつらをクリックしたら、アクティブになってフォーカスがあたってフォアグラウンドになる予定だった。
でも実際はWM_MOUSEMOVEすらそいつらには飛んでこない。くるのはWM_CREATE,WM_MOVE,SIZE,PAINTくらいだ。
この子供ウインドをWS_POPUPとかにすれば飛んでくるけど。。あーわかんないよぉ。
子供ウインドの一つを選択したら、他のウインドがフォーカスを失って、選択されたウインドがフォーカスされて
しかもメッセージを受け取って欲しいんだよぉ。なんでだめなの?????
0248デフォルトの名無しさん
2007/10/09(火) 01:23:05何が作りたいのか俺にはわからんが
他のアプリで似たような動きしてるもんあったら教えてみぃ
0249デフォルトの名無しさん
2007/10/09(火) 08:18:03[現象]
・スタティックリンクすると、
メニュー → ファイルを開く → コモンダイアログのフィルタに「すべてのファイル(*.*)」がなくなる。
・共有DLLでビルドすると普通に出来る。
--
新規プロジェクトでスタティックリンク試してみると
普通に出来るので俺が悪いのは確かだろうが・・・
ちなみにデバッグビルド(&スタティックリンク)すると
[docmgr.cpp]
DoPromptFileName()
VERIFY(title.LoadString(nIDSTitle));
でエラーになる。
この先を追っかけているが(atlcore.hとか)だんだん鬱になってきた。
似たような現象になった人いませんか?
>>247 割り込んでごめんなさい
0250デフォルトの名無しさん
2007/10/09(火) 08:41:24WM_MOUSEMOVEすらそいつらには飛んでこないというのは変
0251デフォルトの名無しさん
2007/10/09(火) 14:34:01そうですね。。たとえて言えばエクセルのオートシェープをウインドで表現し、
シートに沢山並べた状態みたいなものでしょうか。
0252デフォルトの名無しさん
2007/10/09(火) 21:54:530253デフォルトの名無しさん
2007/10/10(水) 10:54:24SetExtendedStyle()でLVS_EX_GRIDLINESを設定するとグリッド線が表示されていたのですが、
Windows2000からWindowsXPに変えて、画面をXPスタイルで表示するとグリッドが消えてしまします。
設定の仕方を間違えているのでしょうか。
0254デフォルトの名無しさん
2007/10/10(水) 11:22:16スクロールさせると消える挙動はバグ。修正予定はたぶん無い。
どうしても直したいなら、自前描画するしかないと思われ。
0256デフォルトの名無しさん
2007/10/14(日) 20:02:58void CLineChartCtrl::DeInvalidateCtrl()
{
CClientDC dc(this);
CRect rcClient;
GetClientRect(rcClient);
InvalidateRect(rcClient , TRUE);
}
として再描画しても消えないのはお子ちゃまだからデツカ?
ハンドルもしっかり取れてるのにな??
0257デフォルトの名無しさん
2007/10/14(日) 22:11:51ただ画面を更新してるだけ
0258デフォルトの名無しさん
2007/10/14(日) 22:14:22ちなみに、その処理ならCWnd::Invalidate()一発で済む。
0259デフォルトの名無しさん
2007/10/14(日) 22:19:55うぅぅぅ〜〜〜、嫌な悪寒デツ
どうしたら簡単に線が消せマツカ?
やっぱり書いた線をxorで描くとかマンドクサイことやんなきゃムリッポなのかなぁ。。。。。。うぅぅぅ〜〜〜
0260デフォルトの名無しさん
2007/10/14(日) 22:31:29やってミマスタガ線が消えません、MFCってCPenクラスがあるならCEraserクラスも
作ってホスイ片手落ちって言うんだよねこれ豆知識
線が消したいというか初期画面に戻したいんデツガ、コンストラクタをも一回読んでみたら
どうなるのかな、実験シマツ
0261デフォルトの名無しさん
2007/10/14(日) 22:41:26ウィンドウに描画した内容は、基本的に保持されていない。
描画内容を変更したい時は、一旦クライアント全体を無効にして、
次の再描画からその変更した内容で描くようにする。
自前でフレームバッファを用意してそこに描画してる、とかは無しな。
0262デフォルトの名無しさん
2007/10/14(日) 22:45:15おまえ、あたまん中をいっぺん消した方がいいぞ
0263デフォルトの名無しさん
2007/10/14(日) 22:57:240264デフォルトの名無しさん
2007/10/14(日) 22:59:21消しゴムかそうか?
0265デフォルトの名無しさん
2007/10/15(月) 01:27:090266デフォルトの名無しさん
2007/10/15(月) 10:11:46SDIのプロジェクトからダイアログを追加し(CDialog1)、
そのコンストラクタにビューのポインタを渡してみたのですが、
ダイアログはフレームウィンドウの中央に出てきてしまいます。
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog1 dlg(this);
dlg.DoModal();
}
ダイアログのコンストラクタで親ウィンドウを指定しているのに、
なぜその中央に表示されないのでしょうか?
中央に表示させたい場合は、ダイアログに何を渡せばよいのでしょうか?
0267デフォルトの名無しさん
2007/10/15(月) 11:49:39かたつむりなのです。
わかってほしいのです。
触られると触角がひっこんじゃうの。
動けなくなっちゃうの。
よくわかんない、でもそうなっちゃうのだ。
雨の日とかにぺたぺた這うのが好きなのです。
なんでかしら。
自分でもよくわからないのだ。
あんまり指ではがさないでください。
ごはんたべてうんこしようっと。
0268デフォルトの名無しさん
2007/10/15(月) 20:36:210269デフォルトの名無しさん
2007/10/15(月) 22:02:40>>240とたぶん同じ原因なので、同じ解決法で。
SetOwnerしておいて、OnInitDialogでCWnd::CenterWindow(GetOwner())。
別にオーナーに拘らずとも、中央配置の元になるウィンドウを渡せればいいんだけどね。
0270デフォルトの名無しさん
2007/10/16(火) 09:30:39ダイアログのOnInitDialog()でGetParent()とm_pParentWndを調べてみたら、
m_pParentWndにはコンストラクタで渡したビュークラスが入っているのに、
GetParent()ではメインフレームが返ってきました。
OnInitDialog()でm_pParentWndを直接CenterWindow()に渡してみたところ、
ビュークラスの中央に表示させることができました。
m_pParentWndっていうのは隠れメンバっぽいけど、
これならダイアログを呼ぶ側でオーナーを別途指定する必要は無いですよね。
ダイアログのコンストラクタって、なんの意味があるんだ…?
0271デフォルトの名無しさん
2007/10/16(火) 11:14:36それはダイアログ(そのもの)ではなくてダイアログクラスだ。
OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。
0272デフォルトの名無しさん
2007/10/16(火) 11:49:03> OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。
もちろんコンストラクタの使いかた自体は理解しているつもりですが、
ダイアログクラスのコンストラクタで親ウィンドウを指定しても
それが実際の親にならないのなら、
コンストラクタで親ウィンドウなんて指定させるなよっていうことでした。
まぁ今回の件では、隠れメンバに保管されていることがわかったので、
コンストラクタに渡す作業は無駄ではなかったようですが。
0273デフォルトの名無しさん
2007/10/16(火) 17:58:53親になってるからCenterWindowが正しく動作しているのでは?
CWnd::GetParent()が親じゃなくオーナーを返すのは、内部で
呼び出しているAPI(GetParent())の仕様。
トップレベルウィンドウがGetParentするとオーナーを返すみたいね。
0274273
2007/10/16(火) 18:04:380275デフォルトの名無しさん
2007/10/16(火) 21:29:33使用したいんですが何か方法ありますか?
・コンソールアプリケーションだと一瞬コンソールが表示されるのが問題
・引数なしの起動でダイアログでて起動をさせたいができればMFCダイアログテンプレートで作りたい。
という理由です。
WinMainのでやれば恐らく可能とは思いますが・・誰か知ってたら教えてください。
0276デフォルトの名無しさん
2007/10/16(火) 22:04:11CWinApp::ExitInstanceをオーバーライド
0277デフォルトの名無しさん
2007/10/16(火) 22:12:31今その方法でやったらできました。
一応方法を書いておくと、ExitInstance で戻り値を返すだけではだめで
start /wait aaa.exe
とかしてアプリケーションの終了を待機しないとだめなんですね・・
当然といえば当然なのかも。
なにはともあれ、ありがとうございました。
0278デフォルトの名無しさん
2007/10/16(火) 23:44:10デストラクタの処理はどこでするのでしょうか?
0279デフォルトの名無しさん
2007/10/16(火) 23:54:06勝手にオーバーライドすればいい。
0280デフォルトの名無しさん
2007/10/17(水) 00:09:14CEditコントロールのカーソル位置に文字を自動で入力したいのですが、
どうやればいいですか?
0281デフォルトの名無しさん
2007/10/17(水) 00:13:17カーソル位置は GetSel() で取得
0282デフォルトの名無しさん
2007/10/17(水) 00:26:29ありがとうございます!
0283デフォルトの名無しさん
2007/10/17(水) 11:46:56興毅 ほんとうに おめでとう
お前は もう 親父だけの者ではない
今や世界の亀田興毅になったんじゃ
それも山あり谷ありの厳しい勝負の道を
ひたすら歩み続けたからこそ今日の栄光が会った
しかしボクシングの道は終った分けではない
これから厳しいボクシング道が待ってる
興毅よ万文の山はいくつはばまおうとも
戦陣の谷に何度も落ちようとも前え 進め
最後に 本当におめでとう
親父
★ アニメ「侍ジャイアンツ」最終回
川上監督が番場蛮に贈った言葉
番場よ、本当におめでとう。
おまえはもうジャイアンツだけのサムライではない。
今や世界のサムライになったんじゃ。
それも山あり谷ありの厳しい勝負の道を
ひたすら歩み続けたからこそ、今日の栄光があった!
しかし、野球の道はこれで終わったわけではない。
これから厳しい野球道が待っている。
サムライよ、万丈の山がいくつ阻もうと、
千尋の谷に何度落ちようと、前へ進め!
その前途を祝って、もう一度言わせて貰おう。
番場蛮、本当に、おめでとう!
巨人軍監督 川上哲治
0284デフォルトの名無しさん
2007/10/17(水) 21:16:32MFCをスタティックリンクでビルドすると、Cランタイム(_recalloc)で
メモリリークが発生します。共有DLLでビルドするとリークは発生しません。
リークのチェックにはBoundsChecker8.2を使用しました。
スケルトン(ソースは変更しない)でも同じでした。
どなたかご存知ないでしょうか?
0285デフォルトの名無しさん
2007/10/17(水) 22:26:32BoundsCheckerって使ったことないから知らないけど
http://support.microsoft.com/kb/192102/ja
この情報のVCのバージョン相当古いのは分かってるが、参考にならないかな?
0286デフォルトの名無しさん
2007/10/17(水) 23:02:390287デフォルトの名無しさん
2007/10/19(金) 13:00:370288デフォルトの名無しさん
2007/10/19(金) 15:04:58今Visual C++ 2005でアプリを作成しているます。
TestA.cppに通信処理があって2箇所からココを呼び出してます
1つはTestA.cppのOnTimerからコール
1つはTestB.cppのワーカースレッドからコール
通信処理は、入った時点で CCriticalSectionのLock()、抜けるときにUnLock()してます
で、問題なのはTestB.cppのワーカースレッドから通信処理をコールし、Lock状態のときに
TestA.cppのOnTimerから通信処理をコールするとデッドロックしてしまいます
なぜそうなってしまうのか、原因が全く分からず困ってます・・・
何か分かる方、いらっしゃいましたらご教授お願いします
0289デフォルトの名無しさん
2007/10/19(金) 15:38:34OnTimerの呼ばれるスレッド側に依存する処理が混じっていないか?
メッセージキューが回っている必要がある、とか。
0290デフォルトの名無しさん
2007/10/19(金) 16:20:28ご返答ありがとうございます
通信処理の本体はTestC.cppに用意してあり、そこで完結してます
それをTestA.cppからコールしているだけなのです
なので依存する処理とかはないと思います
簡単に書くとTestA.cppの通信部分はこんな感じです
void CTestA::SendProc()
{
m_CriticalSection.Lock();
TestC->SendData();
m_CriticalSection.Unlock();
}
もしかして、OnTimerとCCriticalSectionのLock、UnLockは
同じ場所(TestA.cpp)にあってはいけないとか
そんなことはない・・・ですよね?
0291デフォルトの名無しさん
2007/10/19(金) 17:26:09Lock状態というのは、他から同時に同じ部分をアクセスさせないように
するのが仕様だよ
要はバッティングしないようにしてるわけだから、用がすんだら
解放される
0293デフォルトの名無しさん
2007/10/19(金) 17:36:27Lock状態のときに、その処理に入ったら待機状態になりますよね?
先にLockを掛けた処理が動いてUnlockしてくれればなんの問題もないのですが、
何故か動いてくれないんですよ・・・
なので困っております・・・
説明不足ですみません
0294デフォルトの名無しさん
2007/10/19(金) 18:06:04までたどり着いてないってこと?
0295デフォルトの名無しさん
2007/10/19(金) 18:11:19TestC->SendData()の処理内容が判らないことにはなんとも。
あと、Lock/Unlockを直接書くより、CSingleLockを使っておいた方がいい。
0296デフォルトの名無しさん
2007/10/19(金) 18:32:57はい、おっしゃる通りです
Lockした状態でOnTimerから通信処理に入って
m_CriticalSection.Lock(); の中へステップで進んで行くと
:EnterCriticalSection(&m_sect); で実行中になったまま処理が戻らず、
仕方なくデバッグ中断すると
「プロセスはデッドロックされているか、ユーザーモードコードがどれも実行されません。すべてのスレッドが中止されました。」
となります
>>295
TestC->SendData()の処理内容はUSBドライバに対して
プロトコルに沿ったデータの送信・受信をしています
CSingleLock、ちょっと勉強してみます
0297294
2007/10/19(金) 18:51:18ワーカスレッドから呼ばれたTestC->SendData()がフリーズしてる可能性もある。
0298デフォルトの名無しさん
2007/10/19(金) 19:25:33TryEnterCriticalSectionを試してみたところ、それっぽい動きになりました
ありがとうございます!
ところで、MSDNライブラリに書いてある解説に
「TryEnterCriticalSection 関数は、クリティカルセクションの所有権を
取得できたかどうかにかかわらず、すぐに制御を戻します。」
とありますが、これは処理が終わる前に次の処理が動いてしまう
と解釈してよろしいのでしょうか・・・
0299デフォルトの名無しさん
2007/10/19(金) 19:36:13後で再送するとか、諦めてエラーにするとか好きにすれば良い。
0300デフォルトの名無しさん
2007/10/19(金) 19:41:08了解しました
戻り値で判断して何とか回避してみます
皆様、色々ご指導ありがとうございました
とてもとても助かりました
素敵な週末を過ごしてください
0301デフォルトの名無しさん
2007/10/19(金) 23:38:36MFCは開発止まってるのですか?
0302デフォルトの名無しさん
2007/10/20(土) 00:03:37まあ、そうだろうね。
XPが標準になってることで、.NETFrameworkデフォルトで入ってるだろうし
最近のすごいアプリ
3ds maxとか、C++/CLI(.NET使えるように拡張したC++)で
作られてるみたいだし
0303デフォルトの名無しさん
2007/10/20(土) 00:17:45いまはじめてWindowsFormアプリケーションってのを生成してみたが
さっぱりわからない。ショック。
0304デフォルトの名無しさん
2007/10/20(土) 00:37:31こったもの作るなら、.Net最高
0305デフォルトの名無しさん
2007/10/20(土) 00:55:04随分楽だなーと思った。
でもC++/CLIの描画がGDI+を使わなくなるか、GDI+の性能が
大幅アップするまではMFCを使い続ける気がする。
0306デフォルトの名無しさん
2007/10/20(土) 09:55:15Win32だって充実させてくれたらいいじゃん。
なんで言語まで変えるの。。
0307デフォルトの名無しさん
2007/10/20(土) 10:45:24Win32、MFCが理解できて
.NET Frameworkが理解できないヤツはいねえだろ
MTは運転できるがATは運転できない というヤツがいないように
0308デフォルトの名無しさん
2007/10/20(土) 22:12:33逆だろ?
こったものを.NETで作るのは無理
メモ帳程度のテキストエディタなら.NETでも十分つくれるが
メジャーなテキストエディタに勝とうとしたら.NETでは絶対無理
0309デフォルトの名無しさん
2007/10/20(土) 23:03:43クラスの構造もMFCと比べるときれいだし、仕事の関係上使えないのが残念なくらいだ
C#とかで作ってるとVBって(使ったことないけど)こういうもんなのかなーって思うくらい簡単
0310デフォルトの名無しさん
2007/10/22(月) 20:41:090311デフォルトの名無しさん
2007/10/22(月) 22:28:10ちょっと前(>295)で
CCriticalSectionを直接Lock/Unlockするのではなく
CSingleLockを使った方がいいとありますが
その理由はなぜでしょうか?
CCriticalSectionだと待ち合わせ時間が設定できないって事くらいですか?
0312デフォルトの名無しさん
2007/10/22(月) 22:31:040313デフォルトの名無しさん
2007/10/22(月) 23:29:00別に深い理由ではなく、単に解放し忘れが無くなるだけ。
途中returnや例外でロックしっぱなしとかなると危険だし。
0314デフォルトの名無しさん
2007/10/23(火) 01:20:13あるGUI有りのアプリから、別のDLLの関数を呼び、そのDLLが
生成したウィンドウを表示したところ、Tab キーや、OK, Esc キーなどが
期待通りに動作しない現象が起こりました。
具体的には、CMainFrame から DLLのある関数を呼び出し、その関数に
HWND を引数に与えて、そのHWNDを親ウィンドウとした、別ウィンドウを
表示しています。モーダルではありませんが、モーダルでも同じ挙動です。
原因が分かる方、教えてください。
VC++ 8.0 SP1
WinXP SP2
0316デフォルトの名無しさん
2007/10/23(火) 13:45:48カレット位置を取得するためにGetSel()を使うというのは理解できるんですが、
範囲選択状態となっている場合、カレット位置がどこにあるかという判断はどーすればいいっスか?
0317デフォルトの名無しさん
2007/10/23(火) 14:14:30CWnd::GetCaretPos()で取れると思う。尤も、クライアント座標だから適当に変換する必要があるけど。
0318デフォルトの名無しさん
2007/10/23(火) 14:47:10ありがとうっス!
ちょっと試してみるっス
0319315
2007/10/23(火) 16:44:59http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vccore/html/_core_Are_there_any_MFC_classes_or_functions_that_cannot_be_used_in_an_MFC_DLL.3f.asp
0320デフォルトの名無しさん
2007/10/23(火) 17:12:21ボタンコントロールが取得するにはどうしたらいいでしょうか?
↓やったこと
ボタンを画像にするのに、オーナードローでやってみて
それ自体は問題なかったのですが
マウスオーバーしたときにも画像を変えようと思ったら
マウスオーバーのイベントが来てませんでした。
MSDNみてCBitmapButtonなるものを使って見たのですが
AutoLoadでアサートが出てしまって動きませんでした。
0321デフォルトの名無しさん
2007/10/23(火) 17:41:50前似たようなもの作った時は CButtonのサブクラスの中のOnMouseMoveで
マウスが入ってきたことを検知し、TrackMouseEventを呼び出してWM_MOUSELEAVE
を発生させるようにし表示画像を変えてた。一般的なやりかたかどうかは知らない。
WM_MOUSEHOVERも同様にTrackMouseEventで発生させることができる。
マウスオーバーってホバーのことだよね?
0322デフォルトの名無しさん
2007/10/23(火) 17:44:08そうです。
ありがとうございまいた。
ちょっくらやってみます。
0323デフォルトの名無しさん
2007/10/24(水) 17:42:18MSGraph.Chart(Officeについてくるグラフコンポーネント)をウィンドウに張り付けたいんですが、どうすればいいですか?
MFCのCWnd::CreateContorlをいじってみましたが、うまくいかないです(´・ω・`)
゚・(ノД`)教えて下さい。
CWnd* wnd = new CWnd();
BOOL ret = wnd->CreateControl("MSGraph.Chart", "", WS_VISIBLE, rc, this, 2000);
で、retがFALSEになります。
CreateControlの第1引数を"mscal.calendar.7"にすると、ちゃんとカレンダーが表示されます。
0324デフォルトの名無しさん
2007/10/24(水) 18:45:520325323
2007/10/24(水) 19:25:39(Officeフォルダ)\Graph9.olbをリソースエディタのツールボックスに登録しようとしたら、
「有効なCOMサーバーではありません」と言われました(´・ω・`)
そもそも根本的に無理なのでしょうか?
0326デフォルトの名無しさん
2007/10/24(水) 21:13:31もしかすると、MSGraph.ChartはActiveXドキュメントかもしれない。
自分の所にはOffice無いからそれ以上は分からないけど。
0327323
2007/10/24(水) 22:38:16情報ありがとうございます(・∀・)
ActiveXドキュメントでググリましたが、要領を得ません(;´Д`)スミマセン
ActiveXドキュメントというのは、それ単体では表示できず、
ExcelのWorksheetや、RichEdit等にしか貼り付け出来ないということでしょうか?
0328デフォルトの名無しさん
2007/10/26(金) 16:24:44class CHogeA;
class CHogeB;
class CHogeA : public CView
{
...
private:
CHogeB m_hogeB;
};
class CHogeB : public CWnd
{
};
CHogeA 上に CHogeB を貼り付けて使っていたのですが、そうすると、
CHogeA にて例えばマウス操作などのイベントを拾うことが出来ません。
そこで、
1. CHogeA でも各種イベントを拾う、一般的な方法がありますか?
2. CHogeA と CHogeB で、ウィンドウを2枚作らず、1枚を共有するような手法がありますか?
よろしくお願いします。
WinXP SP2
VC++ 8.0 SP1
0329デフォルトの名無しさん
2007/10/26(金) 16:32:130330デフォルトの名無しさん
2007/10/27(土) 01:14:52>1. CHogeA でも各種イベントを拾う、一般的な方法がありますか?
あなたの書いたとおりの構成でサンプルを作ってみたらマウスイベントは
全てCHogeAに流れました。逆にCHogeBでマウスイベントを拾うためには
細工が必要でした。
>2. CHogeA と CHogeB で、ウィンドウを2枚作らず、1枚を共有するような手法がありますか?
おそらくあります。
要するに情報不足杉です。
0331デフォルトの名無しさん
2007/10/27(土) 10:09:51CViewでCWndをCreate
あとはどこもいじらないでCWndにMouseMoveイベント来たよ
0332デフォルトの名無しさん
2007/10/27(土) 10:30:33マルチすいません・・・
Visual studio6.0です。
ラジオボタン2個、ボタン1個のwindow作ってます。
MFCでラジオボタンにintの変数を追加しようと
してもbuttonにしか変数が追加できません。
どうすれば、受付けてくれるのでしょうか?
VS.NET仕様のテキストを見ながらやってて違いに困ってます・・・
0333デフォルトの名無しさん
2007/10/27(土) 10:48:560334デフォルトの名無しさん
2007/10/27(土) 10:53:22ラジオボタンのグループ分け(WS_GROUPのオン・オフ)がきちんとできているか?
面倒ならDDX_Radio()を直書きしてもいい。案外簡単だから。
0335デフォルトの名無しさん
2007/10/27(土) 11:07:00言われて見れば・・・「チェックしたか、してないか」しかないのに
変数の設定っていうのも変な気がします・・・。
>>334
グループ分けは出来てると思うので
ラジオボタンがどんな値を返すのか勉強してきます。
VC6.0準拠の本かサイトも探してきます・・・
0336デフォルトの名無しさん
2007/10/27(土) 11:50:57MFCのヘッダをDDX_Radioで検索して、実際に中身を見た方がたぶん早い。
0337デフォルトの名無しさん
2007/10/27(土) 12:12:590338デフォルトの名無しさん
2007/10/27(土) 17:21:37ウィザードで CFormView 指定してつくったもので、
その画面のボタンから CDialogの Modal で表示してる部分があるんですけど、
垂直方向に一画面に入りきらなくなってスクロールさせようと思い、ハマッテマス。
リソースで垂直のチェック入れて、OnVScrollとってきてScrollWindowExつかって
みたんですけど再描画で位置がリセットされちゃうんで OnDrawで覚えた値を使って
ScrollWindowExで戻してます。みなさんもこんなやり方で実装します?
アドバイスお願いしますm(__)m
やり方、なんか間違ってる気がするんですよね……。
CFormViewでdoModal できれば楽なのになぁ〜。
0339デフォルトの名無しさん
2007/10/27(土) 18:13:37WM_VSCROLLはスクロールさせたいという意図を伝えてくるだけで、
実際にスクロールバーの位置を確定させるのはプログラム側の仕事。
0340デフォルトの名無しさん
2007/10/27(土) 18:35:10止めるつもりは無いけど、自分ならプロパティシート使う。
0341デフォルトの名無しさん
2007/10/27(土) 19:13:02CDialogの上にCFormViewを貼り付けることも可能
でも問題はそういうことではなさそうだな
0342デフォルトの名無しさん
2007/10/27(土) 20:51:04>>339
ウィンドウについてるって事で OnVScroll内に引数でもってきてる pScrollBarは null なので
pos = ::GetScrollPos( m_hWnd, SB_VERT );しています。
あとは nSBCodeみて 移動量決め SetScrollPos( m_hWnd, SB_VERT, pos, TRUE );して
ScrollWindowEx( 0, 垂直移動量, NULL, NULL, NULL, NULL, 0 ) してます
で…再描画でリセットされてしまうので OnPaint()用意して ScrollWindowEx( 0, 総移動量, …
って感じになっちゃっております。
>>340
なるほど。プロパティシートですか。
いやぁこまった、変えられない仕様みたいでして。
>>341
CDialog上にCFormViewの貼り付けですか。 CDialog持ってるクラスのメンバーに
CFormView持ってるクラスをメンバーのインスタンスもたせるのかなって想って
ちょっと今やってみましたがProtectあたりでひっかかってコンパイルもとおりませんね。
難しい……。
0343デフォルトの名無しさん
2007/10/27(土) 21:18:23そりゃ、再描画でリセットされるように見えるわ。
子ウィンドウを一つ一つ動かすより、
フレーム-CDialog派生の子ウィンドウ(=フォーム) という風に乗せて、
フォームの位置を動かす感じで作ればいいんじゃないかな。
0344デフォルトの名無しさん
2007/10/28(日) 01:43:07(通常はページスクロールをしますが、この動作をさせずに、クリックした位置に移動させたいです。)
ためしにGetChannelRectでスライダーの稼動範囲(厳密には稼動範囲より広いエリアになってしまうけど。。)とマウス位置から
Posを求め、SetPosしています。これだと問題が二個あります。
1)ユーザーが一回クリックすると、見た目上二回動く
2)そもそもGetChannelRectはスライダーの稼動範囲を取るわけではないので、微妙に位置の計算が狂う。
なにか良いアイディアは無いものでしょうか?
0345デフォルトの名無しさん
2007/10/28(日) 03:19:320346デフォルトの名無しさん
2007/10/28(日) 03:39:560347デフォルトの名無しさん
2007/10/30(火) 11:52:37また質問したい時がくるかも知れんから
0348デフォルトの名無しさん
2007/10/31(水) 09:32:39のページを見てキャラクターを表示しようとしてるんですが
キャラクターの白い部分が残って
うまく表示がされません、どうすれば良いか教えて頂けないでしょうか。
お願いします。
0349291
2007/10/31(水) 10:37:25君にはむりだ
0350デフォルトの名無しさん
2007/10/31(水) 10:49:25謎は解けた!
マスク描画のROPを、SRCPAINTからMERGEPAINTに変えれば正しく描画される。
普通はキャラ画像の背景は黒にして、
SRCANDで抜いてSRCORで重ねるってのが定番だと思うのだけどな。
CImageListならカラーキーを使った描画ができるから、
こっちを使った方が手っ取り早いかも。
0351デフォルトの名無しさん
2007/10/31(水) 12:36:21ありがとうございました。
感謝感謝です。
0352デフォルトの名無しさん
2007/11/01(木) 07:21:07Win32環境+VS2005で開発を行っています。
ダブルクリックでファイルを開く処理に対応させようと頑張っていた所
Debugビルドでは成功したのですが、Releaseビルドにするとファイルを開かなくなりました。
(でもショートカットに開きたいファイル名を指定するとReleaseビルドでもきちんと開く)
そこで処理を追っていくと、どうもInitInstanceメソッドが呼び出されていないようなのですが、似たような経験をされた方はいらっしゃらないでしょうか?
0353デフォルトの名無しさん
2007/11/01(木) 10:16:220354デフォルトの名無しさん
2007/11/01(木) 14:28:25メーラーの未読数表示のように、フォルダ内のファイル数を表示する
方法はあるのでしょうか?
ラベル編集も可能にしたいので、"フォルダ名(n)"のように直書きでは
問題が出てしまいます。
やっぱり無理矢理作るしかないのでしょうか?
0355デフォルトの名無しさん
2007/11/01(木) 14:57:38楽な方法は無いな。
NM_CUSTOMDRAWを始め、
いくつかの通知メッセージを処理しないと実現できないと思う。
0356352
2007/11/01(木) 15:25:21すいません、関連付け関係のレジストリをすべて掃除したら直りました。
プログラムのミスではなかったようです。orz
0357デフォルトの名無しさん
2007/11/01(木) 15:33:26仕様を満足に説明できないやつは1人でやってればいいと思う
0358デフォルトの名無しさん
2007/11/01(木) 21:04:180359デフォルトの名無しさん
2007/11/01(木) 23:51:160360デフォルトの名無しさん
2007/11/02(金) 00:07:130361デフォルトの名無しさん
2007/11/02(金) 15:55:16有名になる予感
http://www.cute.or.jp/~makuchan/wore.html
10/31
0362デフォルトの名無しさん
2007/11/03(土) 21:48:380363デフォルトの名無しさん
2007/11/04(日) 10:19:39いいねえ。
これは期待できる。
0364デフォルトの名無しさん
2007/11/04(日) 10:58:220365デフォルトの名無しさん
2007/11/05(月) 22:00:13http://tserve01.aid.design.kyushu-u.ac.jp/~fujiki/vc_lecture/c_6.htm
のお絵かきソフトを作るページを参考にしてるんですが
「ToolBar」の「IDR_MAINFRAME」のボタンとIDを書き換えても
ページに書かれているようなIDに対応するような関数が作られず
ボタンも描いたように表示されず灰色の使用不可のような状態
になってしまいます。
VS2005stdです。
どなたか、わかるかた、VS2005ではどうしたらよいか教えていただけないでしょうか。
お願いします。
0366デフォルトの名無しさん
2007/11/05(月) 22:06:23教えてやったのに無視してこっちに引越しか?
とんでもないやつだな
0367デフォルトの名無しさん
2007/11/05(月) 23:28:00onNewDocumentやonOpenDocument、Serializeなどファイル操作や
イベント処理などがどういう流れで行われているのかがいまいち把握できないので、
詳しく解説してある良い書籍とかないでしょうか?
ちなみに今頃MFCかよとかなしでおねがいします。
0368デフォルトの名無しさん
2007/11/06(火) 02:40:56>>367
みたいな質問してるようだと、人に見せれるようなアプリがかけるまで、2年以上はかかる
2年後にはMFCはVSからなくなってるぞ
0369デフォルトの名無しさん
2007/11/06(火) 11:34:51お前みたいな、おこちゃまアプリしか作らんやつには
MFC は必要ないだけだ
0370デフォルトの名無しさん
2007/11/06(火) 12:46:270371デフォルトの名無しさん
2007/11/06(火) 13:17:56M$がwin32apiを無理矢理クラス化し、永続させてきたMFCを
ばっさり切るなんて、今までの努力を捨てちまうようなもんだもんな。
それにVBを.net化したりしてるのを見れば「まだまだ、へこたれへんでー」
ってな感じに受け止めれる。
まぁ、主流はVC#VB.netの方針で発展していくんだろうね。
0372デフォルトの名無しさん
2007/11/06(火) 14:37:15いいえ。C++の財産はとてつもなく大きいものです。
C++/CLI について語ろうぜ Part2
http://pc11.2ch.net/test/read.cgi/tech/1142147319/
これ最強
0373デフォルトの名無しさん
2007/11/06(火) 15:45:450374デフォルトの名無しさん
2007/11/06(火) 16:16:420376デフォルトの名無しさん
2007/11/07(水) 10:43:29そのパスは存在することが前程でよいのですが。。。
よろしくお願いいたします。
0377デフォルトの名無しさん
2007/11/07(水) 10:53:11MFCにそういうのを扱うクラスはなかったと思う
0378デフォルトの名無しさん
2007/11/07(水) 10:58:57CFileにGetStatus()があるのだが。static版の方は引き数にフルパスを取るから一応使えると思う。
0379デフォルトの名無しさん
2007/11/07(水) 11:25:510380デフォルトの名無しさん
2007/11/07(水) 11:32:05CFile::GetStatus()のstatic版は、実体を必要としないので普通の関数のように使える。
つまり、その対象を予め開いておく必要はない。詳しくは、MSDNでも読め。
0381367
2007/11/07(水) 18:08:26何を根拠に2年なのかkwsk、というかカチンときた。
まぁ、ATLとか.NETとか出てる中、いまどきMFCやるのもあれかもしらんが・・・
で、MSDN以外に参考になるものはないってことかい?
0382デフォルトの名無しさん
2007/11/07(水) 18:13:41一頃本はたくさんあったようだしWebSiteもそれなりにあると思う。
それを探せないようでは先が思いやられるのも同感。
0383デフォルトの名無しさん
2007/11/07(水) 18:15:08全然知らなくてすまそ
0384デフォルトの名無しさん
2007/11/07(水) 20:48:240385デフォルトの名無しさん
2007/11/07(水) 21:13:420386デフォルトの名無しさん
2007/11/08(木) 13:05:340387デフォルトの名無しさん
2007/11/09(金) 15:15:14SDIのCMainFrameウィンドウサイズを変更する関数ってありますか?
やっぱり、指定のサイズ+枠のサイズとかメニューのサイズとかを計算しないとだめですか?
0388デフォルトの名無しさん
2007/11/09(金) 16:37:49色などをプログラム中から変更することはできるでしょうか?
PutPorpertyというメソッドを使えばできそうな気がするの
ですが使い方がよく分かりません。
<P class='test'>Hello, World</P>
というテキストの色を赤にする方法を教えてください。
0389デフォルトの名無しさん
2007/11/09(金) 21:49:22CHTMLViewのGet/SetPropertyは、単にIWebBrowser2の同メソッドが呼ばれるだけ。
GetHtmlDocument()から始めるしかないと思う。という訳で、試しに書いてみた。
ちなみに、MFCでなくてATLだが全く問題無い。
// 1. CSSを追加してみる方法
CComPtr<IDispatch> spIDisp;
spIDisp.Attach(GetHtmlDocument());
CComQIPtr<IHTMLDocument2> spIDom(spIDisp);
CComPtr<IHTMLStyleSheet> spCSS;
spIDom->createStyleSheet(NULL, -1, &spCSS);
long idx;
spCSS->addRule(CComBSTR(_T("P.test")), CComBSTR(_T("color:red")), -1, &idx);
0390デフォルトの名無しさん
2007/11/09(金) 21:53:27CComPtr<IDispatch> spIDisp;
spIDisp.Attach(GetHtmlDocument());
CComQIPtr<IHTMLDocument2> spIDom(spIDisp);
CComPtr<IHTMLElementCollection> spElemCol;
spIDom->get_all(&spElemCol);
spIDisp.Release();
spElemCol->tags(CComVariant(_T("P")), &spIDisp);
CComQIPtr<IHTMLElementCollection> spElemCol2(spIDisp);
for ( int idx = 0 ; ; idx++ )
{
spIDisp.Release();
spElemCol2->item(CComVariant(idx), CComVariant(), &spIDisp);
if ( !spIDisp ) break;
CComQIPtr<IHTMLElement> spElem(spIDisp);
CComBSTR clsname;
BSTR bstr;
spElem->get_className(&bstr);
clsname.Attach(bstr);
if ( clsname != _T("test") ) continue;
CComPtr<IHTMLStyle> spStyle;
spElem->get_style(&spStyle);
spStyle->put_color(CComVariant(_T("red")));
}
0391388
2007/11/09(金) 22:57:03ありがとうございます。ATLは全く知らないのでコードは謎ですが、
必要なヘッダを調べてインクルードして何とか両方とも動かすこと
ができました。
if ( clsname != _T("test") ) continue; のところで
エラーが出たので調べてみると CComBSTR::operator==は
定義されていましたが CComBSTR::operator!=は定義されて
いませんでした。if ( clsname == _T("test") ) { /*../*/ }
と直すとコンパイル通りました。これはVisual C++6.0の
不具合かもしれません。
師匠になってほしいです。
0392デフォルトの名無しさん
2007/11/13(火) 02:19:17結局捨てないのか
ともかく壮絶なソースコードが見れそうだ
0393デフォルトの名無しさん
2007/11/14(水) 11:34:45複数のコントロールを1つのバンドに含めるにはどうすればいいでしょうか。
CReBar cRebar;
…
cRebar.AddBar(コンボボックス)
cRebar.AddBar(ボタン)
とすると、コンボボックスとボタンが別々のバンドに配置されますが、
目的としては、コンボボックスとボタンを同一バンドに配置したいです。
0394デフォルトの名無しさん
2007/11/14(水) 12:30:31各バンドに複数の子ウィンドウを含めたい場合は、この点が制約になります。
0395393
2007/11/14(水) 17:10:33ちょっと微妙ですけど、コンボボックスとボタンをスタティックコントロールの子にして、
そのスタティックコントロールをAddBarすることにしました。
0396デフォルトの名無しさん
2007/11/15(木) 00:22:500397デフォルトの名無しさん
2007/11/15(木) 01:22:56ExcelをDDEで使うことになるかと。
0398デフォルトの名無しさん
2007/11/15(木) 18:29:30ヘッダのクラス宣言の中に
enum { IDD = IDD_… };
という記述があります。
このリソースIDは拡張DLL側のResource.hに書かれているものです。
拡張DLLを使う側がこのヘッダをインクルードすると、
リソースIDが見つからないと言われると思うのですが、
拡張DLLでダイアログクラスをエクスポートする場合
この部分はどのように対応すればよいものなのでしょうか。
0399デフォルトの名無しさん
2007/11/16(金) 16:17:310400デフォルトの名無しさん
2007/11/16(金) 21:52:56そのリソースIDが記述されてるヘッダをインクルードしなきゃいんじゃね?
使う側は、拡張DLL側のリソースIDなんて余計なだけじゃね?
0401デフォルトの名無しさん
2007/11/17(土) 18:06:110402デフォルトの名無しさん
2007/11/17(土) 19:15:43自分で調べようとも思わないのか?
0403デフォルトの名無しさん
2007/11/17(土) 19:25:370404デフォルトの名無しさん
2007/11/17(土) 19:25:53あっさり対応するクラスが見つかった件について。
おまえやる気無いだろ。氏ね。 >>401
0405デフォルトの名無しさん
2007/11/17(土) 22:35:15そんな高価なツールもってねえよばーーか
0406デフォルトの名無しさん
2007/11/17(土) 23:04:35今までのこと考えたらクソ安いつーの
つーかMSDNのちょっと遅れのイメージなんか完全フリーじゃねえか
0407デフォルトの名無しさん
2007/11/17(土) 23:12:13同じなら、オンラインで検索すれば。
0408デフォルトの名無しさん
2007/11/18(日) 16:15:430409デフォルトの名無しさん
2007/11/18(日) 17:58:57折れ線グラフを描画する、ツールを作りたいんだけど
MFCのツールボックスには、ピクチャーコントロールというツールと
カスタムコントロールというのがあるけれど、どう違うのでしょうか?
また、グラフを描画させるにはどちらのコントロールを選んだ方がいいのでしょうか?
0410デフォルトの名無しさん
2007/11/18(日) 18:29:12つ[TrueWinChart]
0411デフォルトの名無しさん
2007/11/18(日) 18:43:10>>409です
True WinChart for .NETですよね、標準価格:102,900円
そんな予算でないです
0412デフォルトの名無しさん
2007/11/18(日) 18:58:090413409
2007/11/18(日) 19:11:21ダイアログに直接描画するのではなく、ピクチャーコントロールかカスタムコントロールに
描いて、それをサブクラス化したいんだけど、違いがよく分からないんだよね
0414デフォルトの名無しさん
2007/11/18(日) 19:24:320415409
2007/11/18(日) 19:34:14高いってことだね?
0416デフォルトの名無しさん
2007/11/18(日) 19:56:50ゴテゴテ機能が付いている方がいろいろな横槍がはいって返って上手くいかないかもしれん。
0417409
2007/11/18(日) 20:34:14言われてみればそうかも知れないな、
コントーロールを貼り付けて、描画専用クラスを別に書き、シリアル化したデータを
流し込んで、グラフを描画させようと思ったけど
よく考えたら、描画専用クラスは、ダイアログに描こうがコントロールに描こうが必要なわけで
対象となるオブジェクトがどっちになろうが、使えるクラスを設計する方が賢いかもしれないね
0418デフォルトの名無しさん
2007/11/19(月) 13:17:07何かヒントだけでもいただけたら
0419デフォルトの名無しさん
2007/11/19(月) 13:24:140420デフォルトの名無しさん
2007/11/19(月) 13:34:30とは思ったのですがやはりプログラミングのプロ集団は
MFCスレかと思いまして。
0421デフォルトの名無しさん
2007/11/19(月) 14:26:560422デフォルトの名無しさん
2007/11/19(月) 15:29:48DirectShowスレがあるぞ
0423デフォルトの名無しさん
2007/11/19(月) 20:59:53描画してからShowWindowするには、
WM_PAINTを送ってからShowWindowすれば良いでしょうか。
0424デフォルトの名無しさん
2007/11/19(月) 23:40:48ヒント:同病相哀れむ
0425デフォルトの名無しさん
2007/11/19(月) 23:53:53または他アプリに無効化された際に、発生するものであって、自分で
送るものじゃないと思う。
描画のもたつきについては、CompatibleBitmapへ予め描いておき
OnDrawなりOnPaintなりで、それを実画面に転送(BitBlt)する手法が一般的。
ダブルバッファとかダブルバッファリングで検索すると具体例が見つかるよ。
0426423
2007/11/20(火) 01:06:54ありがとう。
やってみるよ。ほんとに親切にありがとう。
0427デフォルトの名無しさん
2007/11/20(火) 22:10:01画像処理スレが最適では
0428デフォルトの名無しさん
2007/11/22(木) 09:57:43複数のスレッドで色んな処理をしていて、
各スレッドの処理ログを一つの CListView に書き込んでいくというプログラムを作っています
こんなとき、どのように組むのが一般的というか技法的に正しいのでしょうか?
最初は動的に確保した領域にログを書いてそのアドレスをLPARAMに渡して
各スレッドからメインスレッドにメッセージを投げていたのですが
取りこぼしがあるとメモリリークしてしまったため、
今はmailslotを使ってやっています。
クリティカルセクションを置いたログ書き込みメソッドを持つ
CListViewの派生クラスを作り、
そのインスタンスを各スレッドに渡すような感じがいいんでしょうか?
0429デフォルトの名無しさん
2007/11/22(木) 11:15:31MSDNのサンプルに複数スレッドで実行した内容を1つのビューに反映させる
サンプルがあったはず。それが参考になるかも。
0430デフォルトの名無しさん
2007/11/22(木) 18:36:52PostMessageまたはSendMessageのどっちよ?
これで解答のしかたは大きく変わるし、質問者さん情報少なすぎ
mailslotか、そんなのあったのか、知らなかったよ
普通にクリティカルセッションで排他制御して
SendMessageでデータ投げて、無問題だったが?
後はシングルトーンによる、インスタンスの一意化?
とかそんな感じジャマイカ
0431デフォルトの名無しさん
2007/11/26(月) 18:23:23http://www.athomejp.com/goldfish/mfc/dialog/modeless.asp
のサイトのプログラムを作成しているのですが、動きません・・・
誰か助言をお願いします。(Win2000・vc6.0)
リビルドすると、次のエラーが出ます。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2143: 構文エラー : ';' が '*' の前に必要です。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2501: 'CTestDlg' : 識別名を宣言するのに、型が指定されていません。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2501: 'm_pTest' : 識別名を宣言するのに、型が指定されていません。
ModelessDlg.cpp
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2143: 構文エラー : ';' が '*' の前に必要です。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2501: 'CTestDlg' : 識別名を宣言するのに、型が指定されていません。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2501: 'm_pTest' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(99) : error C2065: 'm_pTest' : 定義されていない識別子です。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(189) : error C2440: '=' : 'class CTestDlg *' から 'int' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
0432デフォルトの名無しさん
2007/11/26(月) 18:23:54C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(190) : error C2227: '->Create' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(194) : error C2227: '->BringWindowToTop' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(204) : error C2440: '=' : 'class CTestDlg *' から 'int' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(205) : error C2227: '->DoModal' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(206) : error C2541: delete : 'delete' 演算子が、ポインタでないオブジェクトに用いられています。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(211) : error C2227: '->BringWindowToTop' : 左側がクラス、構造体、共用体へのポインタではありません。
TestDlg.cpp
ソースファイルは、
http://www11.axfc.net/uploader/20/so/He_49138.zip.html
dlPASS=1
一応つけました。宜しくお願いします。
0433デフォルトの名無しさん
2007/11/26(月) 18:36:10エラーは抜粋してくれ、、、それができるなら質問しないでもわかるか。
modelessdlg.h 内で CTestDlgクラスを参照してるから。
#include "TestDlg.h" を適切な位置におけばよろしい。
面倒ならmodelessdlg.hの先頭に入れてもいいかもな。
0434デフォルトの名無しさん
2007/11/26(月) 23:12:38modelessdlg.hではポインタでメンバ定義してるみたいだから
modelessdlg.hの先頭で class CTestDlg; 入れて
modelessdlg.cppに #include "TestDlg.h" を入れるスタイルもあるな
自分でもわからんがヘッダに#include入れるのを無意識に避けるオレ
0435431
2007/11/27(火) 09:29:10>>434 様
有難う御座います。
おかげ様で、動きました。
ヽ(゚∀^○)ノ★'*:・.@+【感謝】+@.・:*'★(●゚ω^)ノ
またMFCを勉強すると同時に、クラス・メンバのC++をかじる必要があると感じた。
0436デフォルトの名無しさん
2007/11/27(火) 22:00:220437デフォルトの名無しさん
2007/11/27(火) 23:22:46apiの使い方の参考になるよ
0438デフォルトの名無しさん
2007/11/28(水) 02:30:320439デフォルトの名無しさん
2007/12/03(月) 09:02:580440デフォルトの名無しさん
2007/12/03(月) 13:37:13なんか受けたww
0441デフォルトの名無しさん
2007/12/03(月) 19:36:450442デフォルトの名無しさん
2007/12/03(月) 22:15:500443デフォルトの名無しさん
2007/12/04(火) 09:57:290444デフォルトの名無しさん
2007/12/04(火) 15:45:350445デフォルトの名無しさん
2007/12/04(火) 19:57:460446デフォルトの名無しさん
2007/12/04(火) 21:55:340447デフォルトの名無しさん
2007/12/05(水) 15:34:08よって>>441はケンorリュウ使い
0448デフォルトの名無しさん
2007/12/05(水) 17:28:26黄龍っしょ あとで わかりました
けど おもしろかったです。 どうもありがとうございます。
0449デフォルトの名無しさん
2007/12/05(水) 18:16:310450デフォルトの名無しさん
2007/12/05(水) 20:46:40何故かプログラマーやってて良かったと思っちまったじゃねーかw
(この業界若しくは趣味でプログラミンでもやらなきゃこんなスレ見ないって意味でw)
おまいら最高www
0451デフォルトの名無しさん
2007/12/06(木) 01:07:240452デフォルトの名無しさん
2007/12/06(木) 09:35:530453デフォルトの名無しさん
2007/12/06(木) 10:36:010454デフォルトの名無しさん
2007/12/10(月) 10:56:320455デフォルトの名無しさん
2007/12/11(火) 18:16:54入力した数値を加算して、それを表示するということをやろうとしているのですが、
「wprintf' : 1 番目の引数を 'char [80]' から 'const wchar_t *' に
変換できません」というエラーがでます。
その本はVC++.net用の本で私はVS2005を使用しています。
VS2005のほうでも通用するとあったのですが上手くいかず悩んでいます。
コードは以下のとおりです。
char str[80];
wprintf(str,"%d + %d = %d",
dlg.m_X,dlg.m_Y,dlg.m_X+dlg.m_Y); //エディットコントロールのメンバー変数。
dc.TextOutA(0,0,str);
全くの初心者ですが、何卒ご教授願えないでしょうか?
0456デフォルトの名無しさん
2007/12/11(火) 18:38:250457デフォルトの名無しさん
2007/12/11(火) 18:41:130458デフォルトの名無しさん
2007/12/11(火) 18:53:18ビルドが成功しました! ありがとうございます。
しかし、二つの数値を入力してOKボタンを押したら、
ウィンドウに「フフフフフフxX」などという文字がずらーっと表示され、
加算した結果が表示されません。
これはなぜでしょうか?printfでエディットコントロールのメンバ変数
m_Xとm_Yを%dで表示しているし、char型で文字も整数も表示できるはずですし…
0459デフォルトの名無しさん
2007/12/11(火) 18:59:11sprintfにしたら、バッチリ表示されました!
>>457さん、本当にありがとうございます。
0460デフォルトの名無しさん
2007/12/11(火) 19:10:00まともな本とは思えない
0461デフォルトの名無しさん
2007/12/11(火) 19:22:120462デフォルトの名無しさん
2007/12/11(火) 19:56:05「ゼロから学ぶVisualC++」という本です。
0463デフォルトの名無しさん
2007/12/11(火) 20:54:35CStringとか使うと楽チンだよ
0464デフォルトの名無しさん
2007/12/11(火) 21:47:250465デフォルトの名無しさん
2007/12/12(水) 01:10:14つまりchar[80]という文字配列ではなく、文字列型にデータを格納して
扱うということでしょうか?ちょっと試してみます。
ご助力ありがとうございます。
>>464さん、A系、W系ですか?
すみません、まだまだ初歩の者で、わかりません。
でも確かにそそっかしいので…。確認をしてみます。
0466デフォルトの名無しさん
2007/12/12(水) 11:34:21CString str;
str.Format("%d + %d = %d", dlg.m_X,dlg.m_Y,dlg.m_X+dlg.m_Y); //エディットコントロールのメンバー変数。
dc.TextOutA(0,0,str);
とかかな?
0467431
2007/12/12(水) 15:28:58再び問題が起きました。
現在モーダレス・ダイアグラムでプログラムを作っています。
画面上に複数(2つ)の異なるダイアグラムを表示させたいのですが、
上手くはいきません、助言と教授をお願いします。
作成する物
http://www.gazoru.com/g-70fd26a537d4c0d01c5f4796d8785b5e.jpg.html
まず モーダレスのプログラムサイト
http://www.athomejp.com/goldfish/mfc/dialog/modeless.asp
助言を頂きなんとか動かせる事ができました。
これを改造し、同時にモーダレスの2つのダイアグラムを表示させたいです。
以下の所を改造しリビルドした所、コンパイルは出きるのですが、動きません。
助言をお願いします。
一応ソースファイルを載せます(Win2000・vc6.0)
DLパス=1
http://www11.axfc.net/uploader/20/so/He_53709.zip.html
0468431
2007/12/12(水) 15:34:33新規にダイアログを追加して、クラス名をCTestDlg2にしました。
CModelessDlgクラスにCTestDlg2のデータメンバを追加します。
BOOL CModelessDlg::OnInitDialog()
{
・・・・・
m_pTest = NULL;
m_pTest2 = NULL;
}
void CModelessDlg::EndTestDlg2()
{
m_pTest2 = NULL;
}
を追加
void CModelessDlg::OnButton2()
{
// TODO: この位置に・・・
if( m_pTest2 == NULL)
{
m_pTest2 = new CTestDlg2;
m_pTest2->Create(this);
}
else
{
m_pTest2->BringWindowToTop();
}
}
0469431
2007/12/12(水) 15:35:23CTestDlgにウィンドウのデータメンバを追加します。
CTestDlgにCreate()メソッドを追加します。
CTestDlg2::CTestDlg2(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestDlg)
// メモ - ClassWizard ・・・
//}}AFX_DATA_INIT
m_pParent2 = NULL;
}
BOOL CTestDlg2::Create(CWnd *pWnd)
{
m_pParent2 = pWnd;
BOOL bret =
CDialog::Create( CTestDlg2::IDD, m_pParent2);
if( bret == TRUE)
{
this->ShowWindow( SW_SHOW);
}
return bret;
}
0470431
2007/12/12(水) 15:36:16クラスウィザード(Ctrl+W)でPostNcDestroyメソッドをオーバーライドします。
クラスウィザード(Ctrl+W)でPostNcDestroyメソッドをオーバーライドします。
void CTestDlg2::PostNcDestroy()
{
// TODO: この位置に固有の処理・・・
if( m_pParent2 != NULL)
{
((CModelessDlg2 *)m_pParent2)->EndTestDlg2();
delete this;
}
CDialog::PostNcDestroy();
}
void CTestDlg2::OnClose()
{
// TODO: この位置に・・・
if( m_pParent2 != NULL)
{
DestroyWindow();
}
else
{
CDialog::OnClose();
}
}
0471デフォルトの名無しさん
2007/12/12(水) 15:41:54「モーダレス」も「ダイアグラム」も間違い。
0472デフォルトの名無しさん
2007/12/12(水) 16:41:58m_pTest2 の初期化を忘れてる
0473431
2007/12/12(水) 17:29:04アリガト━━━ヾ(・∀・。`)(´。・∀・)ノ━━━!!!
動きました。
3日間真剣に悩んでいましたw
BOOL CModelessDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// "バージョン情報..." メニュー項目をシステム メニューへ追加します。
m_pTest = NULL;
m_pTest2 = NULL;
初期化したつもりで、見落としていました。
有難うです
☆⌒(*^▽゜)vありが�d
0474デフォルトの名無しさん
2007/12/12(水) 18:08:16>助言と教授をお願いします。
に笑ってしまったw
0476デフォルトの名無しさん
2007/12/13(木) 01:08:43amazonでのレビューの評価が概ね高いな。
上に貼ってあるコード見てるとちょっと微妙な気がするけど
評価高いってことは良書なんだろうね。
おれはC入門しながら、林ハルヒコ本で並行してMFCの
勉強してつまづいた経験があるから、どうもMFCのとっかかりは
難しいというイメージがある。
C++の理解が足りてないということに気付くまで、時間がかかりすぎた。
0477デフォルトの名無しさん
2007/12/13(木) 06:22:51>455のサンプルは見つからなかったけど、
他におもしろそうなソースがあったから見てみる
雑誌の過去記事の寄せ集めらしいから、記事書いた人によってばらつきがあるのかも
http://software.nikkeibp.co.jp/software/backno/03vcmook2.html
2003年4月17日発売 全国の書店でお求めください
日経ソフトウエアムック
ゼロから学ぶVisual C++
MFCの基本がわかる!
日経ソフトウエア編
■2000円(税込み)
■A4変型判、200ページ
■発行 日経BP社 ■発売 日経BP出版センター
■ISBN4-8222-1693-4
0478デフォルトの名無しさん
2007/12/15(土) 19:24:26ダイアログにCustom Controlを追加し、コンパイルに成功後、実行しますと
Custom Controlどころか、ダイアログ自体も表示されません
検索しましたら、MSDNに
http://msdn2.microsoft.com/ja-jp/library/dsezt3x7(VS.80).aspx
「Visual Studio コントロールを追加してもダイアログ ボックスに表示されない」
というタイトルでSDKの場合の対処法が出ていましたが、MFCの記載がありません
どなたかご存知ないでしょうか?
0479デフォルトの名無しさん
2007/12/16(日) 06:55:052chだからなんだろうなあ
おまいらおしえれ くらいのノリが普通な気がする俺は異常
0480デフォルトの名無しさん
2007/12/16(日) 09:16:56リッチエディットコントロールの場合の解決法だけだな
その2つはMFCは特に何もしなくても使えるだろ
0481478
2007/12/16(日) 10:55:36サンクス
>コモンコントロールの場合の解決法と
>リッチエディットコントロールの場合の解決法だけだな
読解力が無くてスマソ、カスタムコントロールのことは書いて無かったんですね(^^;
478でも書きましたが、ダイアログにカスタムコントロールを貼り付けて
正常にコンパイル成功して、実行した場合、ダイアログらしきものが一瞬チラッと見えるのですが
直に、消えてしまうんですよ、どうしたらイイ?
>>479
こんな感じでOKww
0482デフォルトの名無しさん
2007/12/16(日) 12:20:29俺も初心者に毛が生えた位なんで間違ってるかもしれんが
リソースエディタのカスタムコントロールのclassのところが
空になってないか?
そこに自分の作ったコントロールのクラス名を入れないと駄目っぽい
カスタムコントロール MFCでぐぐるとサンプルも幾つかあったよ
0483デフォルトの名無しさん
2007/12/16(日) 12:35:06ありがとう、もう、あきらめて、他の掲示板で尋ねようか迷ってたところでした
class名を登録したら、上手くできました。
0484デフォルトの名無しさん
2007/12/18(火) 13:04:390485デフォルトの名無しさん
2007/12/18(火) 21:14:260486デフォルトの名無しさん
2007/12/19(水) 09:36:59悪いが言ってる意味が分からない
0487デフォルトの名無しさん
2007/12/19(水) 21:45:26>>485です、補足します
MFCで、メンバ変数の追加ウィザードを用いて、変数を追加する際
「変数の種類(V)」という項目があり、そこで、追加する変数の、種類を決めるのですが
その中に、std::string型がありません、強引にstd::stringと入力してやると、
エラーになります、やはり無理なのでしょうか?
0488デフォルトの名無しさん
2007/12/19(水) 21:53:35なかったら自分で作る
0489デフォルトの名無しさん
2007/12/19(水) 21:56:26>>487です、サンクス
探し方ですがDDX_Textをgrepしたらいいですか?
0490デフォルトの名無しさん
2007/12/19(水) 22:12:080491デフォルトの名無しさん
2007/12/19(水) 22:17:00つーかMFCなんだからCStringでいいじゃん。
0492デフォルトの名無しさん
2007/12/19(水) 22:19:19どうやってツクルンデツカ?
作り方教えてホスイ
0493デフォルトの名無しさん
2007/12/19(水) 23:14:19DDX_Textをラップするだけでもいいな。
つーかDoDataExchangeの最後あたりで、CStringに取った値をstd::stringに入れ直すだけでいいんじゃね?
頻度によっては毎回CStringからstd::stringに変換するのもアリ。
0494デフォルトの名無しさん
2007/12/19(水) 23:45:14自分で読み書きしても同じぐらいの手間だと思う
0495デフォルトの名無しさん
2007/12/19(水) 23:55:34(実際やったらどうなるのか、興味はありますが)
今回の場合は、EditBoxに入れる変数がコード番号だったんで、
EditBoxの値型をint型→_itoa_sでchar[]型に変換→std::stringとリレー変換でお茶を濁します
(*^‐^)_且〜〜
0496デフォルトの名無しさん
2007/12/20(木) 01:21:34std::string = (LPCTSTR)CString のほうがちょっとマシなきがする。 ほんのちょっとね。
0497デフォルトの名無しさん
2007/12/20(木) 01:33:26をグローバルで定義しちゃえば?
0498デフォルトの名無しさん
2007/12/20(木) 02:12:380499デフォルトの名無しさん
2007/12/20(木) 15:55:252.シングルドキュメントを選ぶ←これは無関係かも。
3.ビルドして実行する。
4.ウィンドウの右端を引っ張って縮める。
5.ウィンドウの右端を引っ張ってゆっくりとゆっくりと右に広げる。
これだけで、ボタンのない部分のツールバーの描画に白い縦線のゴミが
残るんだけど、これってほかになる人いる?
OSはVista Ultimate(x86)
VideoはGeforce8600GTS
0500デフォルトの名無しさん
2007/12/20(木) 16:37:350501デフォルトの名無しさん
2007/12/20(木) 21:42:57それともMFCは時代遅れなのでしょうか。
0502デフォルトの名無しさん
2007/12/20(木) 21:50:440504デフォルトの名無しさん
2007/12/22(土) 13:41:350505デフォルトの名無しさん
2007/12/22(土) 23:15:23逆に.NETに慣れきったやつはMFCのUIでまずつまずく
0507デフォルトの名無しさん
2007/12/25(火) 00:55:48まず C++ でギブアップする奴が多い気もする。
0508デフォルトの名無しさん
2007/12/25(火) 21:28:45拒絶反応起こしてもしようがない。
MFCのC++なんて、たいした機能使ってないのにな。
0509デフォルトの名無しさん
2007/12/26(水) 11:59:35それをダイアログなどに貼り付けています。
WS_BORDERが指定されている際には自動で外枠が描画されますが、
この枠がXPでも立体的に描かれてしまいます。
リストビューやリストボックスのように平面的な枠にしたいのですが、
これはどこで設定するものなのでしょうか?
0510デフォルトの名無しさん
2007/12/26(水) 12:28:260511509
2007/12/26(水) 12:35:00「Extended Style」のプロパティはデフォルトのままで、値は0x0になっています。
「Style」は0x50830000で、これはデフォルトの値(0x50010000)から
WS_BORDERとWS_GROUPを追加したものです。
0512デフォルトの名無しさん
2007/12/26(水) 13:38:48spy++でスタイル見るとか、、、派生元クラスによるのかなあ
NCPAINTで自分で描く手もあるが、、、
0513デフォルトの名無しさん
2007/12/28(金) 11:18:150514デフォルトの名無しさん
2007/12/30(日) 13:50:36カスタムコントロールのサイズを取得する、関数って準備されてない?
0515デフォルトの名無しさん
2007/12/30(日) 14:14:16CSize size = CClientDC().GetTextExtent(_T("カスタムコントロール"));
0516デフォルトの名無しさん
2007/12/30(日) 14:37:51サンクス
CSize size = dc.GetTextExtent(_T("カスタムコントロール"));
カスタムコントロールの部分はキャプション名でいいよね?
long x = size.cx;
long y = size.cy;
CSize構造体からの、値の取出しはこれで出来た
0517デフォルトの名無しさん
2007/12/30(日) 16:47:01(<_` )
> ⌒ヽ
/ へ \
/ / / )
/ ノ/ /
/ /(_/~
/ /|
/ / |
〈 < 、 \
∧_∧ ダッ 515死ね \ \ |⌒l
(;`−) −=≡Ξ−=≡Ξ∧ ∧ \ ヽ | ミ
( :つ−=≡Ξ〜′ ̄ ̄(;″゚Д) / 丿_)
U ̄U −=≡Ξ(/(/ ̄ ̄ヽ)ヽ) (_丿 ミ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0518デフォルトの名無しさん
2007/12/30(日) 16:47:34(<_` )
γ ⌒ヽ
| | \
| | \ \
| | ) )
| |/ /
∧ ∧ i⌒i______ノ |_ノ
(" ゚Д) ヽ | ノ
/ / つ ― ̄ ̄ ̄ ̄ ̄ ̄ | |
/ / / ミ | |
/ / ∪/ ミ | |
∧_∧ / ∪ / ミ | |
(;`−) / / / | |
( :つ ザッ | |
U ̄U (__丿
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0519デフォルトの名無しさん
2007/12/31(月) 12:44:59エディットコントロールボックス(複数行・縦方向スクロールバー付き)に対して、
以下の様な処理でログを表示しています。
// ログの追記表示
strMsgKeep = strMsgKeep + "\r\n" + strMsg;
m_edtMsg.SetWindowTextA( strMsgKeep ); ← �@
// スクロールバーを最下限に
m_edtMsg.LineScroll( m_edtMsg.GetScrollLimit( SB_VERT ) ); ←�A
しかし上記方法で行うと、
�@の処理でスクロールバーがログの先頭にいき、�Aの処理でスクロールバーが最後に行くため、
大量なログを連続で表示すると、画面のちらつきが目立ちます。
画面のちらつきを目立たない様に表示を行うにはどうしたらいいのか教えて下さい
0520デフォルトの名無しさん
2007/12/31(月) 13:33:29あとは自分で試せ
0522デフォルトの名無しさん
2008/01/07(月) 15:45:590523デフォルトの名無しさん
2008/01/09(水) 19:25:130524デフォルトの名無しさん
2008/01/12(土) 04:27:420525デフォルトの名無しさん
2008/01/12(土) 06:38:350526デフォルトの名無しさん
2008/01/13(日) 20:05:42VS2005 エディットコントロールボックスに対して、
関数で文字列データを改行しながら追加表示しています。
AddMsg(CString strMsg)
{
strMsg += "\r\n";
m_edtMsg.LineScroll( m_edtMsg.GetScrollLimit( SB_VERT ) );
int nEnd = m_edtMsg.GetWindowTextLengthA();
m_edtMsg.SetSel( nEnd, nEnd+1, TRUE );
m_edtMsg.ReplaceSel( strMsg ) ;
}
nEnd の値が30000未満は順調にデータ表示されますが、
30000になると、そこでデータが追加されなくなってしまいます。
どこが悪いのですか?
それとも、何かの制約があるのでしょうか?
よろしくお願いします。
0527デフォルトの名無しさん
2008/01/13(日) 20:17:19SetLimitText で広げる
0529デフォルトの名無しさん
2008/01/13(日) 21:15:32SetLimitTextか…いいもん教えて貰ったぜ!!!!!
0530デフォルトの名無しさん
2008/01/14(月) 18:55:350531デフォルトの名無しさん
2008/01/14(月) 19:17:240532デフォルトの名無しさん
2008/01/14(月) 23:11:520533デフォルトの名無しさん
2008/01/15(火) 00:26:56脊髄反射せず、MSDNのヘルプ見ろや。
ttp://msdn2.microsoft.com/ja-jp/library/bb761607(en-us,VS.85).aspx
ちなみにデフォルトが32767なのは、16bit時代からのAPIを引きずって
いる名残だろう。Windows 95のメモ帳も、32KB超えるテキストを編集
できなかった。
MFCはWin32 APIをラップしているに過ぎないからな。
プログレスバー(CProgressCtrl)の範囲(Min/Max)やポジション指定が
16bitで表現可能な範囲の値なのも、同様の理由から。但しこっちは、
SetRange32(),SetPos32()がある。
0534デフォルトの名無しさん
2008/01/15(火) 09:36:270535デフォルトの名無しさん
2008/01/15(火) 12:40:55そのオブジェクトの1画像あたりのサイズを知りたい場合、
どのように参照するものなのでしょうか。
CTreeCtrl::SetImageList()やCHeaderCtrl::SetImageList()には
サイズ情報は渡していないのに、
描画の際にはちゃんとサイズを元にテキストなどを位置合わせしています。
これと同じような処理を行いたいのです。
GetImageInfo()というメンバ関数はあるようですが、
これは画像インデックスまで渡さないといけません。
1画像あたりのサイズは、画像インデックスは関係無いはずですが、
このような遠巻きな方法しか用意されていないのでしょうか。
0536デフォルトの名無しさん
2008/01/15(火) 21:22:02::ImageList_GetIconSizeを直接呼ぶしかないな。
0537デフォルトの名無しさん
2008/01/15(火) 22:10:01hSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
[debug]で実行した時は、hSnap の値がそれらしい値になりますが、
[Release]で実行すると、hSnapの値が0になってしまいます。
どこが悪いのかさっぱりわかりません
どうか、よろしくお願いします。
0538デフォルトの名無しさん
2008/01/15(火) 22:40:14If the function fails, it returns INVALID_HANDLE_VALUE.
0というだけでは、無効なハンドルとはいえない。
0540デフォルトの名無しさん
2008/01/15(火) 23:48:120541デフォルトの名無しさん
2008/01/15(火) 23:49:510542デフォルトの名無しさん
2008/01/16(水) 10:05:41質問なのですが、例えば2つのアプリケーションを作成し
Test1アプリで編集したデータを
Test2アプリで取得して表示に反映させる
(その逆も同様に)
どんな方法が一番簡単にできるでしょうか?
ご存知の方、どうか宜しくお願いします。
0543デフォルトの名無しさん
2008/01/16(水) 10:14:28ファイルでもメモリマップドファイル(のメモリ)でもパイプでもメールスロットでも
クリップボードでもWM_COPYDATAでもすきなの使えばいい。
具体的に何をどうするかわからんと何が適切なのかはわからない。
0545デフォルトの名無しさん
2008/01/16(水) 13:25:54ありがとうございました。
素人なもので、どんな手段があるのか分からなかったのです^^;
メモリマップドファイルで調べてみます。
0546デフォルトの名無しさん
2008/01/17(木) 11:38:23コンボボックス内の項目を作りたいのですが、
CComboBox *pCombo;
pCombo = (CComboBox *)GetDlgItem(IDC_COMBO1);
pCombo->AddString("");
のところで、
error C2664: 'CComboBox::AddString' : 1 番目の引数を 'const char [17]' から 'LPCTSTR' に変換できません。
というエラーが出てしまいます。
どうやったら消せるか教えてください。
お願いします。
0547デフォルトの名無しさん
2008/01/17(木) 12:07:51「LPCTSTR」でググれ
0548デフォルトの名無しさん
2008/01/17(木) 12:16:00ありがとうございました。
0549デフォルトの名無しさん
2008/01/17(木) 16:53:29ダイアログの大きさを変えた時の画面の大きさを検出する。
GetClientRect構造体で画面を検出しているのですが、それが画面を大きくすると検出するのですが、
小さくすると検出しません・・・
検出している所は、
void CMyDlg::OnPaint()
で検出しています。
ヒントを下さい。
0550デフォルトの名無しさん
2008/01/17(木) 18:18:330551デフォルトの名無しさん
2008/01/17(木) 18:37:150552デフォルトの名無しさん
2008/01/17(木) 21:24:27ただし、それだけだとボタン等も容赦なく再描画対象になるので、
WS_CLIPCHILDRENを付けておくといい。
0553デフォルトの名無しさん
2008/01/18(金) 10:33:58OnPaint使うのがおかしいだろう
ということで、>>551
0554デフォルトの名無しさん
2008/01/18(金) 10:42:54有り難うございます。
早速検索を行い見てみたのですが、あまり良く分かりませんでした。
::SetClassLong
で追加と言う事の様ですが、
もう少しヒントを頂けないでしょうか?
Class Wizardを見てもそれらしき物は出て来ませんでした。
今、更に検索しています。
知識を得て出直して、また来ます。
0555デフォルトの名無しさん
2008/01/18(金) 10:51:56>552なんて無視していいから>551。
0556デフォルトの名無しさん
2008/01/18(金) 19:52:22CodeGuruで「CResizeDialog」を見つけられれば幸せになれるだろう。
0557デフォルトの名無しさん
2008/01/18(金) 22:26:01のですが、これって消して番号をつめたほうがいいですか?
IDの番号が枯渇しそうな気がするんですが・・・
#define ID_32794 32794
#define ID_32795 32795
#define ID_32796 32796
#define ID_32797 32797
#define ID_32822 32822
#define ID_32823 32823
#define ID_32824 32824
#define ID_32825 32825
0558デフォルトの名無しさん
2008/01/18(金) 23:39:320559デフォルトの名無しさん
2008/01/20(日) 11:35:58途中から出来る?、新たに作り直す方が早いのかなぁ、どっち?
0560デフォルトの名無しさん
2008/01/20(日) 13:33:21ドキュメントの中にダイアログをはっつけちゃえば簡単かと。
0561デフォルトの名無しさん
2008/01/20(日) 14:43:57できない。つくりなおせ
0562デフォルトの名無しさん
2008/01/20(日) 21:31:37可能
0563デフォルトの名無しさん
2008/01/21(月) 00:00:43CFormView派生クラスを使うSDIを新規作成して、MyxxxView.cppと、
MyxxxView.hを、途中まで作成していた、MyxxxxDlg.cpp,MyxxxxDlg.h
をファイル名を替えて差し替えた後、エディタの置換機能で、派生
クラス名と基底クラス名をそれぞれ、CMyxxxxDlg→CMyxxxView、
CDialog→CFormViewへ置き換える。
ダイアログリソースもDrag&Dropか.rcを編集して持ってる。Resource.hを
手作業でリソースIDをマージする。
これくらいで、大筋取り込みは可能かと。 あとの作業は、元のソース
内容や記述による。
0564デフォルトの名無しさん
2008/01/21(月) 05:12:31ピクチャーボックスにファイル選択ダイアログがかぶってるとダイアログが写った状態で保存されてしまう
これって方法が悪いんだろうか?
なんか参考になるとこありませんか?
0565デフォルトの名無しさん
2008/01/21(月) 10:32:180566デフォルトの名無しさん
2008/01/21(月) 11:02:00Windowsはよく知らんけど、どうしてもウィンドウに描画されたものを使いたいなら、一度再描画したら?
# 普通はメモリDCに対して再描画して、それを保存するような気がするのだが。
0567デフォルトの名無しさん
2008/01/21(月) 11:37:15もしそうなら、GetBitmap でハンドル持ってきてそれ使ってBMPにしては。
0568デフォルトの名無しさん
2008/01/21(月) 21:10:22よくわからないけどGetDlgItemでリソースエディタのコントロールを関連付けてる
どうにかなる?
0569デフォルトの名無しさん
2008/01/21(月) 21:22:540570デフォルトの名無しさん
2008/01/21(月) 21:36:35明日試してみるよ
ありがとう
0571デフォルトの名無しさん
2008/01/21(月) 21:40:59一応クリックしたりすると再描画されるんだけど不便だしstatictextなんかは消えっぱなしなのでなんとかしたいのですが
どうすればいいでしょうか?
0572デフォルトの名無しさん
2008/01/21(月) 22:25:21描画系の関数はOnPaintでやらないと消えるぞ
0573デフォルトの名無しさん
2008/01/22(火) 06:32:22statictextはリソースエディタで作ってわざわざ記述してないんだけど消えないようにするにはなにか記述しなければいけないの?
0574デフォルトの名無しさん
2008/01/22(火) 22:17:53たまたまフォーカスを受けた時は、処理の関係上表示されてしまう。
ってのが良くあるパターン。
0575デフォルトの名無しさん
2008/01/23(水) 09:52:190576デフォルトの名無しさん
2008/01/23(水) 11:15:13ダイアログを2つ作りました。
2つ重なった場合、下の方を選択しても上になりません。
どうしたら良いですか?
0577デフォルトの名無しさん
2008/01/23(水) 11:22:510578デフォルトの名無しさん
2008/01/23(水) 15:11:170579デフォルトの名無しさん
2008/01/23(水) 16:17:300580デフォルトの名無しさん
2008/01/23(水) 16:47:36それなら仕様としか言い様がない
0581デフォルトの名無しさん
2008/01/24(木) 00:16:06OnInitialUpdate()でリストコントロールのスタイル設定、
OnUpdate()の中でリストコントロールの中身を更新、
OnDraw()の中でInvalidateRect()→UpdateWindow()
だけでいいんでしょうか?
MDIの子ウィンドウを2つのビューに分割し、そのうち1つを
画像表示に使い、もう1つをリストビューにしてるんですが、
子ウィンドウ生成直後や最小化復帰直後にリストビューの
領域だけが描画されないことがあるので、もしかすると
リストビューの作法から外れたことやってるのかも、と
思ったもので。
0582デフォルトの名無しさん
2008/01/24(木) 09:52:120583576
2008/01/24(木) 10:07:53有り難うございます。
>メインダイアログからDoModal()でもう一個のダイアログを作ってるっぽくね?
その通りです。メインからダイアログを作りそして、
2つ目のダイアログを作成したところ、
始めのダイアログが上にいかない Orz
仕様ですか・・・
どうしたら良いですか?
0584デフォルトの名無しさん
2008/01/24(木) 10:14:400586デフォルトの名無しさん
2008/01/24(木) 10:56:010587デフォルトの名無しさん
2008/01/24(木) 23:30:17>モーダレス
そんなものありません。
0588デフォルトの名無しさん
2008/01/25(金) 09:46:57試していないが
ダイアログベースアプリで、CxxApp::InitInstance()内で、ローカル変数
としてオブジェクトを作成し、dlg.DoModal()を呼び出している部分を ...
(1) メインダイアログ(CxxxDialog)を、CxxxxAppクラスのメンバ変数
にする。
(2) DoModal()を、CxxxDialog::Create(nID=CxxxDialog::IDD,...)と、
CxxxDialog::ShowWindow()に書き換える。
(3) CxxApp::InitInstance()をTRUEで終了して、InitInstance()終了後
メッセージポンプを開始する。
で可能なんでわ?
0589デフォルトの名無しさん
2008/01/25(金) 13:52:57dlg.Create(CXXX::IDD);
dlg.ShowWindow(
でいいんじゃね?
かスレッド
0590デフォルトの名無しさん
2008/01/25(金) 22:39:14>>588に付け足しで
モードレス化するダイアログにPostNcDestroyをオーバーライドして
delete this;を追加する
これをすると、ウインドウの破棄後に自己削除が行われて
アプリ終了時にメモリリークしないモードレスダイアログアプリができる
0591588
2008/01/26(土) 10:13:38普通はそれでいいと思うが、メインをモーダレスにできないという
やりとりがあったので。
>>590
おそらくマイクロソフトのサンプルコードから得た知識だろうが、delete
してよいのは、new で作成したオブジェクトの場合のみ。 malloc()して
いないポインタをfree()してはいけないのと同じ。
ダイアログをアプリケーションクラスの変数とすることで、アプリケー
ションクラスCxxxAppのオブジェクトが消滅する時、メンバ変数(CxxxDialog)
のデストラクタが自動的に呼び出されるので問題ない。
もちろん、ダイアログオブジェクトへのポインタを、アプリケーション
クラスのメンバ変数として、コンストラクタ/デストラクタで、
CxxxApp::CxxxApp()
{
m_pCxxxDialog=(CxxxDialog *)new CxxxDialog;
}
CxxxApp::~CxxxApp()
{
delete m_pCxxxDialog;
}
としても可だが、ダイアログ消滅時(PostNcDestroy)にdeleteして、アプリ
ケーションの消滅時にもdeleteすると、都合2回deleteが呼ばれるのでこれ
またマズー。
0592デフォルトの名無しさん
2008/01/26(土) 11:07:18>普通はそれでいいと思うが、メインをモーダレスにできないという
 ̄ ̄ ̄ ̄ ̄
そんなものない。
0593デフォルトの名無しさん
2008/01/26(土) 12:34:21MFCアプリケーションのメインダイアログ(ウィザードが作ってくれたもの)に追加したリストコントロールで
Viewプロパティをレポートにしたときの話です。
幾つかのカラムを作成した後にアイテムを設定し実行したところ思ったように出力されたのですが、リソソ
ースエディタからリストコントロールのSortプロパティを昇順にしてみたところ追加したアイテムの一部が消
えてしまいました。
消えるアイテムは実際に追加するデータによりまちまちですが、最下部に配置された行のものと各行の先
頭のアイテムだけは残ります。しかし、出力された行のデータの並びがSetItemで追加したときとは異なっ
てしまっています。
ご存知の方がいらっしゃればご教授願えませんでしょうか。
0594デフォルトの名無しさん
2008/01/26(土) 13:19:06----------------------------------------------------------
CListCtrlコントロールを、プロパティ-スタイル-ソート昇順と設定し
その後は、コード上で、ソートに関しては何も考えずに
SetItemTextとInsertItemを用いて、データを追加するロジックを
書いておりました。
データを昇順で追加すると、正常にリスト表示されますが
データを降順で追加すると(コントロールのソート機能が反応?すると)
なぜか一番最後の行しか、まともにデータが設定されておりません。
追加している間にソート機能が働いて、インデックスが訳わからない事に
なっているのでしょうか。
0595デフォルトの名無しさん
2008/01/26(土) 14:37:51いや、そんなの言われなくてもわかってるからw
0596デフォルトの名無しさん
2008/01/26(土) 18:19:38dlg.DoModal() の代わりに dlg.Create(IDD_DLG, GetDesktopWindow()) と dlg.ShowWindow(SW_SHOW) を使うだけだと思っているのは俺だけ?
>>576が>>585で言っている「メインがモードレス」ってのは、何かを勘違いしていると思うのだが。
「モードレスとして出現するダイアログ」 を呼び出す側のことを 「モードレスダイアログ」 だと勘違いしているのでは?
そもそもメインダイアログがモードレスってのが意味分からん。
メインダイアログは、実質モードレスみたいなもんだと思うが。
デスクトップに対してモーダルではあるかも知れないが。
0597デフォルトの名無しさん
2008/01/26(土) 21:16:24それと同じですね。
その解決策をご存知でしたら教えて頂けないでしょうか。
0598デフォルトの名無しさん
2008/01/26(土) 22:37:160599デフォルトの名無しさん
2008/01/29(火) 01:22:30お前等なんでこんなもの分かるの?
0600デフォルトの名無しさん
2008/01/29(火) 20:17:37かなり昔から、VC6をしばらく使っていると、
ツールバーの端をクリックすると、
パソコンがフリーズするようになるんですが、
これってなおし方ありませんか??
0601デフォルトの名無しさん
2008/01/29(火) 20:27:44他のPCでも起きるかどうか調べてみたら?
おそらくPCを買い換えるのが吉。
0602デフォルトの名無しさん
2008/01/29(火) 20:46:00いろいろなPCでVC6をやってて起きてます。
知り合いソフト屋も、この現象の事は知っていて、
VC6では、ツールバーの端は触っては行けないのだ!
・・・と言っていますが、まさか、世界のVC6ユーザーが
全てそれで対応してるとも思えませんし・・・。
0603デフォルトの名無しさん
2008/01/29(火) 21:53:56お前の説明だと原因不明で対処しようがない
もうちょっとちゃんと説明してあるサイト探して来い。
0604デフォルトの名無しさん
2008/01/29(火) 23:13:27そうそう、検索するのすっかり忘れてました。
どうやら、MFCの例の無限ループのバグが、
VC6自体にもあるようですね。
・・・多分、そんくらいしかわからん。
0605デフォルトの名無しさん
2008/01/30(水) 01:02:19SDKの難しさと比べると断然に簡単だと思われ。
0606デフォルトの名無しさん
2008/01/30(水) 10:44:09MFC使っても素のウィンドウやメッセージの振る舞い知らんといかん事もあるし
その上MFCの仕組みも覚えにゃならんし。
0607デフォルトの名無しさん
2008/01/30(水) 21:06:42SDKが簡単かどうかも微妙だけど。どこまでを範囲とすべきがサッパリわからんし。
0608デフォルトの名無しさん
2008/01/31(木) 00:54:40ループのバグ』って、一度も聞いたことないんだが?
VC6より、VC2002の方がずっと不安定だった思う。VC6は操作中に突然終了
したなんてことはめったにないが、VC2002は何かの拍子にIDEが終了して
しまう。
例えば、「VC内蔵エディタで開いているプロジェクトの対象ソースを、
プロジェクトのツリーから削除(プロジェクトから外す)して、その後
エディタを閉じる」といった操作で、いとも簡単に落ちた気がする。
0609585
2008/01/31(木) 03:30:20>>595-596 様
プロバイダの規制が有り、亀レス申し訳ないです。
大変参考になりました、有り難う御座います。
とりあえず、以下を実行いたしました。
//int nResponse = dlg.DoModal();
dlg.Create(IDD_TEST_DIALOG,GetDesktopWindow());
dlg.ShowWindow(SW_SHOW);
にしました。けれど次のエラーが出ています。
C:\Documents and Settings\○○\デスクトップ\サンプル\sample1\Debug\samp\Debug\Test\Test.cpp(62) : error C2664: 'int __thiscall CDialog::Create(const char *,class CWnd *)' : 1 番目の引数を 'const int' から 'const char *' に変換できません。
(新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
エラーが出ています。
0610585
2008/01/31(木) 03:31:01>(1) メインダイアログ(CxxxDialog)を、CxxxxAppクラスのメンバ変数
にする。
(2) DoModal()を、CxxxDialog::Create(nID=CxxxDialog::IDD,...)と、
CxxxDialog::ShowWindow()に書き換える。
を具体的な記述が分からなく難航しています。
(CxxxDialog)を、CxxxxAppクラスのメンバ変数 にすると有りますが、
変数の型は、何でしょうか?
どなたか、お教え下さい。
初めのダイアログのIDを
IDD_TEST_DIALOG
クラスをCTestDialog
としています。
0611デフォルトの名無しさん
2008/01/31(木) 15:39:050612デフォルトの名無しさん
2008/01/31(木) 20:00:40横レス失礼。
受け答えを見た限り>>588以降が書いてくれていることが理解できるレベルじゃないようだし
このまま続けても泥沼に嵌るだけだと思うよ。
いったん立ち返って、
>>584が「モードレスでやればいい」と答えたのに対して
>>585で「メインがモーダレスって出来るのですか?」と切り返したのはなぜ?
何かメインをモードレスにしなければならない理由があるのか、それとも単なる勘違いなのか?
>>584はもう一方のダイアログをモードレスにすればよいと提案してるんだと思うが。
とりあえずメインの方は弄くらずに、>>596の言う通りに
2つ目のダイアログをDoModal()しているところを
Create()とShowWindow()にしてごらん。
0613デフォルトの名無しさん
2008/01/31(木) 20:35:09ttp://www.tkb-soft.hmcbest.com/diary_2005_03.htm
にそれらしき事が書いています。
又、マイクロソフト自身が確か、ツールバーに何やら無限ループの
バグがあると情報公開していました。
でも、VC6のフリーズのなおし方の情報は見当たりません。
VC6はやめてVC2005にでも移行したいのですが、
私はFAの制御関係の仕事でソフトを作っていて、
ただでさえリアルタイム処理に向いていないウィンドウズで
managedのC++はかなり不安です。(一応何本か作りましたが)
FAの業界ではVC6はまだまだ現役なんだけどなぁ。
徹夜で頭くらくらでも、ツールバーのアイコンは慎重に、
真ん中目がけて「えいっ」て押すしかないのかなぁ。
0614デフォルトの名無しさん
2008/02/01(金) 16:13:30/ \
/ ─ ─\ FA?
/ (●) (●) \
| (__人__) | ファイナルアンサー?
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ “ /__| |
. \ /___ /
0615デフォルトの名無しさん
2008/02/01(金) 16:43:030616デフォルトの名無しさん
2008/02/01(金) 18:22:16> VC6はやめてVC2005にでも移行したいのですが、
> 私はFAの制御関係の仕事でソフトを作っていて、
> ただでさえリアルタイム処理に向いていないウィンドウズで
> managedのC++はかなり不安です。(一応何本か作りましたが)
VC2005や2008に移行して普通にC/C++として使えばいいのに。
0617デフォルトの名無しさん
2008/02/02(土) 04:59:19目的に合うかどうかは別として、そのコードでそのエラーメッセージが出るとは奇怪な。
IDD_TEST_DIALOGってのはデファイン定数だよな?
むーん、我が家にはMFCの開発環境も無いから実験も出来ない。
まずは、モーダルとモードレスの大きな違いは説明できる?
0618599
2008/02/02(土) 21:07:16>>>599
>SDKの難しさと比べると断然に簡単だと思われ。
そうなんだろうけど、入門書を読んでいてもいまいちライブラリの体系のようなものがみえてこないというか・・・
Boarland C++ Builderみたいに完全に抽象化してほしいなり
0619デフォルトの名無しさん
2008/02/02(土) 21:16:03むしろ、そのおかげでWin32API呼び出しもガシガシ突っ込める所が魅力。
0620デフォルトの名無しさん
2008/02/02(土) 22:12:190621デフォルトの名無しさん
2008/02/02(土) 22:38:32Doc-Viewは使わなくてもいいし
他はapi使うのと変らない
0622デフォルトの名無しさん
2008/02/02(土) 23:27:08VCだとわけわからんかった・・・
VCのアプリからVBのアプリ呼び出すようにしたほうがよかったかな?
0623デフォルトの名無しさん
2008/02/03(日) 02:32:10IDEの機能でタイプライブラリのインポートをすると、
COleDispatchDriver派生のソースが生成されるから、それ経由でアクセスする。
Excelのタイプライブラリは*.olbか実行ファイルに含まれているか何れか。
0624デフォルトの名無しさん
2008/02/04(月) 00:45:20保存するファイルにメニューの選択項目の状態を
記録しておいて、ファイルを開いたときに、保存した時
の状態にメニューの選択項目をの状態を再現させたい
と思っています。状態の保存は出来たのですが、
読み込み時に子ウィンドウ用のメニューにチェックを
入れたりする方法が分かりません。どうすれば
いいのでしょうか?
0625デフォルトの名無しさん
2008/02/04(月) 01:58:48自己解決しました・・・
0626デフォルトの名無しさん
2008/02/04(月) 03:02:220627デフォルトの名無しさん
2008/02/04(月) 06:06:25抽象化されてないMFCのコードは普通に組んでもうんこになる。
0628デフォルトの名無しさん
2008/02/07(木) 04:37:33激しくスレ違いかもしれませんが、質問です。
PCゲームを多重起動しようと試みたのですがダメでした。
大抵のゲームはWindowsのアカウントを2つ作成し、別々のアカウントで起動すれば問題ありません。
現在、Vistaを使っているのでXPではどうなるかはわかりませんが(XPは右クリックから別ユーザーで起動が可能)、
Vistaでその手法をとる場合、runasコマンドを使用することになります。
しかしこのコマンドで別々に起動しても、後から起動したほうが無効になってしまいました。
で、ここからがわけわかめなのですが、同一のデスクトップからの起動はダメでも、
Windowメニュー→ユーザー切り替えをし、別々に起動すればうまくいきました。
この違いはいったいなんなのでしょうか?
0629デフォルトの名無しさん
2008/02/07(木) 07:08:450630デフォルトの名無しさん
2008/02/07(木) 14:35:050631デフォルトの名無しさん
2008/02/07(木) 14:38:15| |
\_/
|
/  ̄  ̄ \
/ \ / \
/ ⌒ ⌒ \ >>628よく質問してくれた
| (__人__) | 褒美としてオプーナを買う権利をやる
\ ` ⌒´ / ☆
/ヽ、--ー、__,-‐´ \─/
/ > ヽ▼●▼<\ ||ー、.
/ ヽ、 \ i |。| |/ ヽ (ニ、`ヽ.
.l ヽ l |。| | r-、y `ニ ノ \
l | |ー─ |  ̄ l `~ヽ_ノ____
/ ̄ ̄ ̄ ̄ヽ-'ヽ--' / オプーナ /|
.| ̄ ̄ ̄ ̄ ̄ ̄|/| | ̄ ̄ ̄ ̄ ̄ ̄|/| ______
/ ̄オプーナ/|  ̄|__」/_オプーナ /| ̄|__,」___ /|
| ̄ ̄ ̄ ̄ ̄|/オプーナ ̄/ ̄ ̄ ̄ ̄|/ オプーナ /| / .|
| ̄ ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/l ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/| /
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
0632デフォルトの名無しさん
2008/02/07(木) 17:49:29表示しない、もしくは灰色表示ってどうやって出来ますか?
0633デフォルトの名無しさん
2008/02/07(木) 17:55:56GetSystemMenu()でメニューもってきてどうにかすればよい
0634デフォルトの名無しさん
2008/02/07(木) 23:15:050635ゆい
2008/02/08(金) 01:28:55マウスクリックした場所を丸く円を描くように
BITMAPキャラクターが動くといったものを
作りたいのですが、OnLButtonUp(UINT nFlags, CPoint point) とOnTimer(UINT nIDEvent)
にどのような記述を入れたら良いでしょうか?
0636デフォルトの名無しさん
2008/02/08(金) 06:22:010637624
2008/02/09(土) 10:14:04後はフレームワークがうまくやってくれたのですが、
開いた後にタイトルバーのファイル名の後にファイルの中身を
元に計算した結果で作成した文字列を追加して表示したいのですが、
タイミングが分かりません。どこでやればいいのでしょうか?
ChildFrm のOnCreateClient CXXXXDoc::OnOpenDocument とか、
だと早すぎて後でファイル名で上書きされてしまいました。
0638デフォルトの名無しさん
2008/02/09(土) 14:05:01"MFC ダイアログベース メニューバー"でググると
VC6時代の掲示板やMFCのサンプルが出てきたが、マンドクサくて( ゚д゚)ポカーン
最期のHP開いたら、VS2003のサンプルが載っていて
一分で完了シマスタ
0639デフォルトの名無しさん
2008/02/09(土) 20:25:43計算後にCDocument::SetTitle( ResultString ) ;
色んな箇所でタイトル弄る場合は、一々呼ぶのが面倒なので
CDocument::SetModifiedFlagをオーバーライドして、そこで書き換えてる。
0640デフォルトの名無しさん
2008/02/09(土) 20:36:42だったらCYourView::OnInitialUpdate辺りで
CXXXXXDocのメンバー関数(自作)呼ぶようにして、そこで代える。
たぶんOpen時以外にも呼ぶだろうし。
0641デフォルトの名無しさん
2008/02/09(土) 20:38:27ChildFrame側だとOnUpdateFrameTitleでいけたけど、>>639のがよさげ。
0642624
2008/02/10(日) 00:55:48上手くいきました!ありがとうございます。
>>640
実はOnInitialUpdateは試してみたのですが、この関数を抜けた
後で見事に上書きされてしまい、今回の書き込みをさせて頂い
たのです。
起動時以外での書き込みは問題なく出来ていたので問題は
解決しました。皆さん本当にどうもありがとうございました。m(_o_)m
0643デフォルトの名無しさん
2008/02/11(月) 07:46:59ttp://www.vcppclub.com/
ここの質問掲示板で、中国人の先生にプログラムを習っている
まいという人ラスイ、マルチorz
0644デフォルトの名無しさん
2008/02/12(火) 01:16:40banana.IsEmpty();
の答えはどっちになりますか?
0645デフォルトの名無しさん
2008/02/12(火) 07:03:230646デフォルトの名無しさん
2008/02/12(火) 14:20:030647デフォルトの名無しさん
2008/02/13(水) 22:51:15現在CListCtrlのスクロールバーの色を変えるというのをやっています。
簡単だと思っていたのですが、実はめちゃくちゃ難しくて悩んでいます。
CListCtrlを普通のウィンドウに貼り付ける形でつかっています(ダイアログではない)
当初、OnCtlColorやカスタムドローを用いればできると考えていましたが、これらを用いてもできないようで
リストコントロールのようなウィンドウスタイルレベルで指定されている
「ネイティブスクロールバー」にはWM_CTLCOLORXXX系がこないという点からOnCtlColorでは無理
カスタムドローにスクロールバーの色を変える機能がないという点でこちらも無理
オーナードローもアイテムごとの描画でありスクロールバーを描画する部分がないため限りなく困難
ということがわかりました。
そこで、そもそもネイティブスクロールバーを非表示にしてCScrollBarを貼り付けて動作をエミュレートする形で作ろうとしましたが
ShowScrollBarやShowScrollBarCtrl等々のスクロールバーを非表示にする関数を一度呼び出しても
InsertItem毎に勝手にスクロールバーが復活するのでWM_NCCALCSIZEにてこれらの関数を呼ぶようにしました。
しかし、ここでこれらの関数を呼ぶと2点問題が浮上しまして、
1点目は、親ウィンドウにたいしてWM_ERASEBKGRNDが送信されてしまう
2点目は、単純に何度もShowScrollBarを呼び出すとかなり遅い
といった感じになりました
1点目については、CListCtrlにWS_CLIPSIBLINGSを指定することで解決できましたが(これもかなり謎な動作ですが)
2点目については解決するほうほうが思いつきません。
codeguruなどをあさっていると
FlatSB系のイニシャライズとEnableScrollBar関係の関数を使うと隠せるっぽいものを見つけましたが
自分のコードのOnCreateで呼び出しても無効で、OnSizeなどで呼んでも単なるEnableScrollBarとの違いはありませんでした。
もう手詰まり状態で、最終手段としてスクロールバーの部分をリージョンでくりぬいてその上にスクロールバーコントロールを貼り付けようかと考えているのですが
それ以外に何か解決方法があったら、ぜひご教授願えませんでしょうか?
0648デフォルトの名無しさん
2008/02/13(水) 23:30:03それだけ色々試すスキルがある人ならCListCtrlなんか捨てて
自前のコントロールなりクラス作れば良いんでない?
0649デフォルトの名無しさん
2008/02/14(木) 15:28:37ガチでそういう子供が紛れてたりするのかと疑いたくなる
0650デフォルトの名無しさん
2008/02/14(木) 18:28:150651デフォルトの名無しさん
2008/02/15(金) 07:24:390652デフォルトの名無しさん
2008/02/15(金) 08:58:390653デフォルトの名無しさん
2008/02/15(金) 09:27:360654デフォルトの名無しさん
2008/02/15(金) 09:54:47遅いと思うけれど、必要があるなら必ずしも無駄ではないと思う。
>>652
MFCには該当の関数はありません。
0655デフォルトの名無しさん
2008/02/15(金) 09:56:17悪いこと言わないからC#でもやっとけ
0656デフォルトの名無しさん
2008/02/15(金) 10:05:04悪いこと言わないからC#なんかやめとけ
0657デフォルトの名無しさん
2008/02/15(金) 10:06:590658デフォルトの名無しさん
2008/02/15(金) 10:17:12アマは VB,C# を使う
0659デフォルトの名無しさん
2008/02/15(金) 10:17:41これ本気で言ってる?どんな業界の人?
0660デフォルトの名無しさん
2008/02/15(金) 10:19:56そのせいかMFC使いは変なプライドある奴が多いから鵜呑みにしないこと
そこを見極める程度の力はあってほしい
0661デフォルトの名無しさん
2008/02/15(金) 10:28:40プログラミング好きで色々自分でやってみたりマな人のコミュニティを回ってる人とかじゃないと
井の中の蛙になりやすい
一行目で言ったような予想以上にプログラミングといっても様々にあることを理解できない
C++使って開発っていうのは結構カバーする範囲が広いというか多いから尚更(ここではMFC使いの人は)勘違いしやすい
0662デフォルトの名無しさん
2008/02/15(金) 10:35:45低レベルなやつは VB で満足してろよ
0663デフォルトの名無しさん
2008/02/15(金) 10:38:59意外にみんな使ってるのかな?
0664デフォルトの名無しさん
2008/02/15(金) 10:49:37無償の場合は利用者は多くても入門者ばっかりなのかもしれない
0665デフォルトの名無しさん
2008/02/15(金) 11:04:03C & SDK(WinAPI) は原理的に何でもできる
ただし、コーディング量は膨大(現代ではアセンブラみたいなもの)
そこで上記の長所を維持しつつ、コーディング量を減らしてくれるのがC++&MFCだ
つまり、きめ細かいこと(付属のライブラリにないこと)をやろうとすれば、
WinAPIを直接叩く必要がある
C++は(Cも)そのときの親和性が高い
他の言語ツールは、そういうときに非常にやっかいになる
したがって、おのずとプロはC++ & MFC に行き着く
0666デフォルトの名無しさん
2008/02/15(金) 11:39:05コードは反面教師として勉強になる
笑い話じゃなくて
0667デフォルトの名無しさん
2008/02/15(金) 11:47:11そのバイトが自分がプロのエンジニアだと勘違いしてるから鬱陶しい。
0668デフォルトの名無しさん
2008/02/15(金) 12:36:08ただ、煩雑というか整理されきれてないというか、惜しい。
だから、MFCに替わる新しいAPIラッパー作ってよ、M$。
.NETは好かん
0669デフォルトの名無しさん
2008/02/15(金) 12:44:37・MFCは難解な仕様とFAQを奔走することになる。ただし、MSクオリティ
・クロスプラットフォーム用のライブラリ=最大公約数になる。質はMSには劣る。
0670デフォルトの名無しさん
2008/02/15(金) 13:11:400671デフォルトの名無しさん
2008/02/15(金) 13:58:330672デフォルトの名無しさん
2008/02/15(金) 17:12:03>ただし、MSクオリティ
褒めてるの?貶してるの?w
0673デフォルトの名無しさん
2008/02/15(金) 17:13:330674デフォルトの名無しさん
2008/02/15(金) 20:20:200675デフォルトの名無しさん
2008/02/16(土) 02:32:470676デフォルトの名無しさん
2008/02/16(土) 12:35:490677デフォルトの名無しさん
2008/02/16(土) 12:41:530678676
2008/02/16(土) 12:44:400679デフォルトの名無しさん
2008/02/16(土) 13:15:100680デフォルトの名無しさん
2008/02/16(土) 14:17:40言語は、C/C++使えますが、MFCは未知の領域なので・・・。
C/C++の知識でもっと簡単に作れるツールとかあれば教えてください。
0681デフォルトの名無しさん
2008/02/16(土) 14:25:44IEコンポーネント。
0682デフォルトの名無しさん
2008/02/16(土) 15:10:29ttp://scripts.web.fc2.com/scriptsup/Auto2Get2chNSP.py
元ネタはこちら
http://pc11.2ch.net/test/read.cgi/tech/1201073019/279
0683デフォルトの名無しさん
2008/02/16(土) 17:01:140684デフォルトの名無しさん
2008/02/16(土) 17:09:33言語は、C/C++使えますが、MFCは未知の領域なので・・・。
C/C++の知識でもっと簡単に作れるツールとかあれば教えてください。
0685デフォルトの名無しさん
2008/02/16(土) 17:13:25「OS的なもの」の定義にも拠りますが、単に「オペレーティングシステム」を作ってみるのなら
MFCは必要ありませんしMFCがあればできるというものでもありません。
質問を重ねるのなら、スレ違いになるので適当なスレへどうぞ。
0686デフォルトの名無しさん
2008/02/16(土) 18:38:320687デフォルトの名無しさん
2008/02/16(土) 20:29:590688デフォルトの名無しさん
2008/02/16(土) 22:46:040689デフォルトの名無しさん
2008/02/16(土) 23:58:560690デフォルトの名無しさん
2008/02/17(日) 02:32:490691デフォルトの名無しさん
2008/02/17(日) 09:55:040692デフォルトの名無しさん
2008/02/17(日) 10:53:090693Gori
2008/02/17(日) 12:51:18マニアルでは IDC_MSG と成っていますが
僕のコントロールIDは IDC_EDIT1 と成ってます。
これを IDC_MSG に変更設定するには、どの様に
すれば良いのでしょうか?
0694デフォルトの名無しさん
2008/02/17(日) 13:23:030695Gori
2008/02/17(日) 13:37:31やって見ます。。。m(__)m
0696デフォルトの名無しさん
2008/02/17(日) 14:33:082002以降はプロパティページとかに汎用化されてしまっているから、
今から始めると分かりにくいのかもしれないなあ。
0697デフォルトの名無しさん
2008/02/17(日) 16:41:590698デフォルトの名無しさん
2008/02/17(日) 16:51:400699デフォルトの名無しさん
2008/02/17(日) 22:41:470700デフォルトの名無しさん
2008/02/17(日) 22:44:360701699
2008/02/17(日) 23:46:460702Gori
2008/02/18(月) 04:44:38// プログラム名をローカル変数に渡す
strPgmName = m_strProgToRun;
***************************************************************************************
(結果)
C:\Day2\Day2Dlg.cpp(327) : error C2065: 'm_strProgToRun' : 定義されていない識別子です。
cl.exe の実行エラー
Day2.exe - エラー 1、警告 0
------------------------------------------------
いろいろやってみましたが。。。なぜエラーに成るのか解りません。
宜しくお願いします。。。m(__)m
0703Gori
2008/02/18(月) 04:49:18// プログラム名をローカル変数に渡す
// strPgmName = m_strProgToRun;
***************************************************************************************
(結果)
Day2.exe - エラー 0 警告 0
に成ります。。。はあ〜〜 (-_-;)
0704Gori
2008/02/18(月) 04:50:250705デフォルトの名無しさん
2008/02/18(月) 06:22:24Day2Dlg.hの中に
m_strProgToRun
0706デフォルトの名無しさん
2008/02/18(月) 11:09:09(プリンタDCに対する描画による印刷処理は実装済み)に
PDF出力機能を追加したいと思っています。
Acrobatが入っているPCだと、印刷時にAcrobatを選択することによって、
既存の描画処理のままPDFを作成することができますが、
ユーザにプリンタを選択させることなく、
「PDF作成」のような直接のボタンを用意し、
その中で同じようにプリンタDCに描画していきたいのです。
Acrobatのように既存の印刷用描画処理を流用でき、
ユーザに操作を意識させないようにするためには、
どのような実装方法が考えられますでしょうか。
0707デフォルトの名無しさん
2008/02/18(月) 11:11:020708デフォルトの名無しさん
2008/02/18(月) 11:30:180709デフォルトの名無しさん
2008/02/18(月) 11:41:54このPDF Libraryって、
自作アプリへのPDF出力機能の組み込みにも使えるということなのですね。
Acrobat用プラグイン開発のためのものだと思っていました。
もう一度メーカーのサイトを読んでみます。
ありがとうございます。
0710デフォルトの名無しさん
2008/02/19(火) 01:06:07|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \
|┃ | (__人__) |
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0711デフォルトの名無しさん
2008/02/19(火) 01:06:31|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \
|┃ | (__人__) |
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0712デフォルトの名無しさん
2008/02/19(火) 01:07:55|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \
|┃ | (__人__) |
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0713デフォルトの名無しさん
2008/02/19(火) 15:00:17メンバ関数調べましたがそのような機能の関数はありませんでした。
一度ファイルに保存してNavigate2()等で表示するしかないのでしょうか?
宜しくお願いします。
0714713
2008/02/19(火) 15:26:330715713
2008/02/19(火) 16:01:12なので、他の方法お願いします。
0716デフォルトの名無しさん
2008/02/19(火) 16:38:370717713
2008/02/19(火) 18:43:14ありがとうございます。
どうやってやるか分からなかったんで調べて
ttp://www.nitoyon.com/vc/tips/ie_component.htmの
about:blank のページに動的にページを入れ込みたい
と言う項目を参考にしてやったらとりあえず表示は出来たのですが、
この処理を2回以上行うと、2回目から何も表示されなくなります。
〜->Navigate2("about:blank")のコールを毎回行わずに最初だけにすると前のデータが残っていて、
どんどん追加されていってしまいます。
どうすればいいのかお願いします。
0718デフォルトの名無しさん
2008/02/19(火) 19:34:06そういう仕様だったはず。
そのリンク先で紹介されているページのリンクが切れているけど
新アドレス貼っとくからClear()のソースも参考にしたらいいよ。
Using the WebBrowser control, simplified.
旧 http://www.thecodeproject.com/useritems/SimpleBrowserForMFC.asp
↓
新 http://www.codeproject.com/KB/miscctrl/simplebrowserformfc.aspx
0719713
2008/02/19(火) 20:59:33レスありがとうございます。
仕様だったんですか。なら仕方ないですね・・。
諦めて一時ファイル作るなりします。
サイトの方もありがとうございます。参考にさせて頂きます。
0720デフォルトの名無しさん
2008/02/20(水) 10:25:37質問させて戴けないでしょうか?
親ウィンドウに、
タブコントロールとOKボタンを置きます。
タブコントロールの中にもOK2ボタンを置きます。
書式⇒タブオーダーで、
OK2ボタン⇒OKボタンと指定したいのですが
どのようにすれば宜しいでしょうか?
0721デフォルトの名無しさん
2008/02/20(水) 12:16:550723デフォルトの名無しさん
2008/02/20(水) 23:10:05その描画した線を消せずに困っています。
解決策としてInvalidate()を試しましたが、ピクチャボックスの領域も再描画されてしまい
意味がありませんでした。
それともピクチャボックス上で領域外にも描画するような処理を行うのはイレギュラーな使い方なんでしょうか?
0724デフォルトの名無しさん
2008/02/21(木) 10:41:12領域外にはみ出してしまった描画を消すのではなく、
はみ出しても描画させない
つ【CreateRectRgn】【SelectClipRgn】
0725デフォルトの名無しさん
2008/02/23(土) 15:19:31CSplitterWndで左右に分割したとし、押したボタンによって、
右側のビューをツリービューとリストビューに切り替えたいです。
その際、現在のビューを削除するのではなく予め作っておいたツリービューかリストビューを
セットしたいのですがどうすればいいのか分かりません。
そもそもそういう事は可能なのでしょうか?
わかりにくい説明だとは思いますが宜しくお願いします。
0726デフォルトの名無しさん
2008/02/23(土) 15:35:050728725
2008/02/23(土) 16:10:000729デフォルトの名無しさん
2008/02/23(土) 16:28:280730デフォルトの名無しさん
2008/02/23(土) 17:13:04ボタンで切り替えも同じようなもの
0731725
2008/02/23(土) 18:37:130732デフォルトの名無しさん
2008/02/23(土) 18:44:18タブのサンプルを探して読め。理解するまで実験しろ。
そこまで理解できていれば、ボタンでもすぐ書ける。
0733725
2008/02/23(土) 19:26:290734デフォルトの名無しさん
2008/02/23(土) 22:07:10http://www.codeproject.com/KB/docview/switchingviews.aspx
0736デフォルトの名無しさん
2008/02/25(月) 18:42:56餅搗け。この程度の英語も読めないようじゃ、餅搗いてもいられないかも知れんが。
0737デフォルトの名無しさん
2008/02/25(月) 18:49:380738デフォルトの名無しさん
2008/02/25(月) 18:59:27あるActiveXをダイアログに置いているのだが、こいつがどうもフォーカス移動でおかしな動作をするようだ。
そこで、マウスクリックしてもフォーカスを移さないようにしたいのだけれど何かいい方法はないかな。
Spy++で見る限りSETFOCUSは飛んでいるけどpreTranslateMessageではトラップできないみたいなんだ。
試しに、EnableWindow(FALSE)して親からメッセージを送りつける方法は、そのコントロールがスクロールバーを
持っているのでスクロールバーの操作が親からではできないと言う点で失敗だった。
0739デフォルトの名無しさん
2008/02/25(月) 23:21:550740734
2008/02/25(月) 23:41:23ごめんごめん。
じゃあこれでOKかな?
http://world.altavista.com/babelfish/trurl_pagecontent?lp=en_ru&url=http%3A%2F%2Fwww.codeproject.com%2FKB%2Fdocview%2Fswitchingviews.aspx
0741デフォルトの名無しさん
2008/02/25(月) 23:46:36http://blogs.msdn.com/vcblog/archive/2008/01/07/mfc-beta-now-available.aspx
MFC Beta Now Available
A beta version of a major MFC/TR1 feature pack is now available for download.
Please note that this feature pack is only supported on systems which have the English language (ENU) version of
Visual Studio Team System 2008 Team Suite or Visual Studio 2008 Professional Edition installed.
These components allow developers to create applications with the “look and feel” of the most popular Microsoft products - including Office,
Internet Explorer, and Visual Studio. With this update, you’ll be able to build applications that utilize:
・Office Ribbon style interface
・Office 2007, Office 2003 and Office XP look and feel
・Modern Visual Studio-style docking toolbars and panes
・Fully customizable toolbars and menus
・A rich set of advanced GUI controls
・Advanced MDI tabs and groups
・And much more!
0742デフォルトの名無しさん
2008/02/25(月) 23:52:580743デフォルトの名無しさん
2008/02/26(火) 10:46:45MFC の将来は Windows と同じ
Windows が続く限りMFC も続く
なぜなら、MS が提供するほとんどのソフト(ツール)が
MFC を使っているからだよ
0744デフォルトの名無しさん
2008/02/26(火) 12:40:000745デフォルトの名無しさん
2008/02/26(火) 12:43:25VC++で書けよ!と思ったw
0746デフォルトの名無しさん
2008/02/26(火) 12:43:390747デフォルトの名無しさん
2008/02/26(火) 13:13:080748デフォルトの名無しさん
2008/02/26(火) 13:13:36DirectXよりマシ
0749デフォルトの名無しさん
2008/02/26(火) 23:55:59誰かレポートきぼんぬ
0750デフォルトの名無しさん
2008/02/27(水) 00:49:49VC6.0MFCを使っています。
ウィザードでCFrameViewから作成したSDIをつくり、
デフォルトのメニューバーに加え、IDD_DIALOGABARを
プラスしました。
最初に起動したときにファイル読み込みを行ったときには、ファイル読み込みのダイアログが出て、CxxxDocの Serialize関数を読み込みます。
が、なぜか2回目を起動したときにファイル読み込みのダイアログは出るのですが、
Serialize関数まで行きません。それはブレークポイントで調べました。
こういうときに陥りやすい罠とかあったら教えてください。
0751デフォルトの名無しさん
2008/02/27(水) 00:55:17が要らないのはどうしてですか?
MFCが自動的にメモリを解放してくれているんだろうと
信じて使ってはいるのですが、気になってます。
0752デフォルトの名無しさん
2008/02/27(水) 00:56:55自己レスです、また別のファイルを読んだときはSerializeまで行くみたいです。
ところが同じファイルを読み込んだときは、全く反応がありません。
普通のデフォルトのフォームビューではそんなことはありませんでした。
0753デフォルトの名無しさん
2008/02/27(水) 07:37:52Dialog以外でも
ポトペタできるようになったの?
0754デフォルトの名無しさん
2008/02/27(水) 09:43:55そこのサイトに掲示板がある
0755デフォルトの名無しさん
2008/02/27(水) 10:12:07ありがとう。そっちに行きます。
0756デフォルトの名無しさん
2008/02/27(水) 11:15:06?変わった方ですね… dialogは無し、書き換えてreloadで其の儘とは…
r
0757デフォルトの名無しさん
2008/02/27(水) 11:46:37キャレットが邪魔で文字が見にくいのですが
キャレットと一番右の文字の間に余白を設定することってできますか?
SetMarginsを使ってもキャレットの邪魔っぷりはどうにもなりませんでした。。
自前でエディット作るしかないのかな。
0758デフォルトの名無しさん
2008/02/27(水) 11:56:46どういうことですか?
意味が分かりません。
0759デフォルトの名無しさん
2008/02/27(水) 12:56:39スペース入れてやれば?
それかフォントかキャレットをいじる
0760デフォルトの名無しさん
2008/02/27(水) 17:06:03http://www2.plala.or.jp/t-note/program/tips005.htm
自己レスです。
上記のホームページで対処法がありました。
わざとそのようにしていたんですね。
ダイアログバーをつけたから挙動がおかしくなったのかと
思い見当違いのことをしていました。
0761デフォルトの名無しさん
2008/02/27(水) 17:22:04dlg.GetDefaults();
HDC hDC = dlg.GetPrinterDC();
LPDEVMODE pDevMode = dlg.GetDevMode();
//
//印刷処理
//
というルーチンで印刷処理を用意してします。
MSDNのCPrintDialog::GetDevModeの説明には
「この構造体に割り当てられているメモリは、
Windows の GlobalUnlock 関数でロック解除する必要があります」
と書いてあるんですけど、GlobalUnlockに渡すハンドルって、
GlobalLockに渡すものと同じものですよね?
このハンドルって、CPrintDialog::GetDevModeの戻り値から
わかるものなのでしょうか?
0762デフォルトの名無しさん
2008/02/27(水) 20:20:00上のページではCPrintDialog::GetDevModeの戻り値そのもの(DEVMODE*型変数)を
使ってるね。
使ったことないけど、「この構造体に割り当てられているメモリ」という意味ではあってそうな気はするけど。
0763デフォルトの名無しさん
2008/02/27(水) 23:13:16CDocManagerのデストラクタで
0764デフォルトの名無しさん
2008/02/28(木) 23:36:31画像を見て頂きたいのですが、
移動させられる点がいっぱい付いているつまみの背景色の色�@と、
メニューバー、ツールバー、ダイアログバーの背景色�Aが異なっておかしい事になっています。
個人的には、�@の背景色に合わせたいのですがどうすればいいのでしょうか?
宜しくお願いします。
ttp://kjm.kir.jp/pc/?p=53616.jpg
0765デフォルトの名無しさん
2008/02/29(金) 09:48:03全部変えたかったらスキン使え
0766デフォルトの名無しさん
2008/02/29(金) 14:15:57ダイアログバーにカラーボタンを作ろうと思ってボタンの色を
換えるのが最終目的ですが、
このホームページの2番が分かりません。
リンク先の英語が分からないのも問題ですが、
2.紹介されているバグがありますので、これにしたがって、CInitDialogBar::Createを
.・・・・・・・・・・・・・
CInitDialogBarの中で呼んでいるCreateを、ベースクラスのもの(CDialogBar::Create)に書き換えるだけです。(引数同じ)
InitDialogBar.cppのCreateを見てもCDialogBar::Createになっています。
どこが間違っているのでしょうか?
それとも既に修正された?
0767デフォルトの名無しさん
2008/02/29(金) 14:42:140768デフォルトの名無しさん
2008/02/29(金) 14:48:43自己レスです。
//if(!Create(pParentWnd, MAKEINTRESOURCE(nIDTemplate), nStyle, nID))
if(!CInitDialogBar::Create(pParentWnd, MAKEINTRESOURCE(nIDTemplate), nStyle, nID))
もしかしてこういうこと。
ただ単にCreateだと自分のところ(CInitDialogBar)のCreateになるからってことかな?
0769デフォルトの名無しさん
2008/02/29(金) 14:51:38まちがい
if(!CDialogBar::Create(pParentWnd, MAKEINTRESOURCE(nIDTemplate), nStyle, nID))
でした
0770デフォルトの名無しさん
2008/02/29(金) 15:06:150771デフォルトの名無しさん
2008/02/29(金) 15:13:490772デフォルトの名無しさん
2008/02/29(金) 15:53:38レスが付いているとは思いませんでした。質問の仕方が悪かったですね。
改めて質問します。
というのは新しい派生クラスはを親をCDialogとしなさいと書いてあるけど、
そうするとprotectedされている関数にアクセスできないから、
CInitDialogBarに変えています。(これも確証は持てないのですが正しいのでしょうか?)
また、上記のホームページのようにCDialogをCInitDialogに変えると
void CHogeDialogBar::Createの中の
//return CDialog::Create(IDD, pParentWnd); ←デフォルト
の引数は同じにしないといけないことになります?
BOOL CHogeDialogBag::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
//return CDialog::Create(IDD, pParentWnd); ←デフォルト
return CInitDialogBar::Create(pParentWnd, lpszClassName, dwStyle, nID);
//ここの引数も自信がない。
}
これで正しいのでしょうか?
0773デフォルトの名無しさん
2008/02/29(金) 15:54:38自分で考えるともっと分からないかも?
0775デフォルトの名無しさん
2008/02/29(金) 16:15:19また自己レスです。愚痴と言われても仕方ないですね。
BOOL NewDlg::Create(CWnd * pParentWnd, UINT nIDTemplate,
UINT nStyle, UINT nID)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
return CInitDialogBar::Create(pParentWnd, nIDTemplate, nStyle, nID);
}
こうしないといけませんね。たぶん・・・。
何で気づかなかったんだろう。
0776デフォルトの名無しさん
2008/02/29(金) 19:04:24ダイアログバーのCButton上でカラーボダンを作りたいのですが、
うまくいきません。
いろいろと調べたのですがどうもサブクラスかがうまくいっていません。
Assetion Errorが出 てwincore.cpp Line311でエラーが出ます。
MainFrame.h
publicにCDialogBarを継承した派生クラスを
public:
CNewDlg m_wndDialogBar
とし、サブクラス化の部分はこんな感じです。
MainFrame.cpp
CColorButton* pColor1 =(CColorButton*)m_wndDialogBar.GetDlgItem(IDC_BUTTON1);
if(!pColor1->SubclassDlgItem(IDC_BUTTON1, &m_wndDialogBar))
return(FALSE);
この段階でエラーが出るようです。
CColorButtonはCButtonの派生クラスです。
0777デフォルトの名無しさん
2008/02/29(金) 19:05:10状況は変わりません。
なにとぞご教授お願いします。
0778デフォルトの名無しさん
2008/02/29(金) 19:26:420779デフォルトの名無しさん
2008/02/29(金) 20:43:01.NETに移行しなさいっとことかしら。
0780デフォルトの名無しさん
2008/02/29(金) 21:09:06オーナードローあきらめてOnPaintにしたよ・・・orz
0781デフォルトの名無しさん
2008/02/29(金) 22:05:14> CColorButton* pColor1 =(CColorButton*)m_wndDialogBar.GetDlgItem(IDC_BUTTON1);
> if(!pColor1->SubclassDlgItem(IDC_BUTTON1, &m_wndDialogBar))
> return(FALSE);
SubclassDlgItem()の意味わかってる?
ダイアログバーの派生クラスを作ってるんなら
その派生クラス(CNewDlg)の変数としてCColorButton m_button;を追加して
m_button.SubclassDlgItem(IDC_BUTTON1, this);とするか、
ClassWizardでCColorButton型の変数m_buttonを追加する。
ダイアログバーの派生クラスを作らないのなら
CMainFrameの変数としてCColorButton m_button;とでもして
m_button.SubclassDlgItem(IDC_BUTTON1, &m_wndDialogBar);
0782デフォルトの名無しさん
2008/03/01(土) 01:21:59ありがとう、使い方を間違えていましたね。
よくサンプルテキストを見るべきでした。
0783デフォルトの名無しさん
2008/03/02(日) 09:06:14CMainFrame の m_wndStatusBar.SetPaneText にアクセスして、
ステータスバーにいろいろ情報を表示したいのですが、
どのようにすればよいのでしょうか?
今はグローバル変数で m_wndStstusBar をポイントする変数をとり、
CStatusBar* stsbar;
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
.................................................................
stsbar = &( this->m_wndStatusBar );
.................................................................
}
void CaaaView::OnMouseMove(UINT nFlags, CPoint point)
{
CString str;
str.Format( _T( "(%d,%d)" ), point.x, point.y );
stsbar->SetPaneText( 0, str, TRUE );
CScrollView::OnMouseMove(nFlags, point);
}
としているのですが、もうすこし MFC のクラス構造から、
CMainFrame のメンバにアクセスできないのかな?と考えております。
0784デフォルトの名無しさん
2008/03/02(日) 09:41:06CMainFrame にアクセスすると思う。
0785デフォルトの名無しさん
2008/03/02(日) 09:51:560786783
2008/03/02(日) 11:12:29いろんなところから CWinApp だと ::AfxGetApp() というのがありますね。
CDocument から CView というのは、いまのところ再描画ぐらいしか必要がないので
CDocument::UpdateAllViews でまにあっております。
つまづいているのは、まさに >>784 さんにつっこまれているところでございまして、
それの具体的な方法がわかりません。CMainFrame にアクセスする
なんらかの関数などが用意されているのでしょうか?
例えていいますと ::AfxGetApp()->GetMainFrame()->m_wndStatusBar みたいな感じで
>>785 さんのレスは、たしかにそうなのですが、マウスの座標みたいなものは、
やはり CView で取りたいな、と思っております。
こういう場合は CMainFrame でマウス座標を拾って表示するというのが王道なのでしょうか?
MFC の初心者のため、雰囲気がわかっておりません。
(いまさらMFCやってるのかぁ?という突っ込みはかんべんしてください)
0787デフォルトの名無しさん
2008/03/02(日) 12:29:28CView::OnMouseMove()やCDocumentなどから直接更新するなら
GetParentFrame()またはAfxGetMainWnd() と CFrameWnd::GetMessageBar()で
CStatusBarのポインタ取得してSetPaneText()でできるよ。
MFCにはON_UPDATE_COMMAND_UIを使って
メインのステータスバーを更新する仕組みが備わってるけど、
それを使うとこの場合は冗長だろうね。
MFC ライブラリ リファレンス
ステータス バー ペインのテキストの更新
http://msdn2.microsoft.com/ja-jp/library/a9ys3wsb(VS.80).aspx
> MFC の初心者のため、雰囲気がわかっておりません。
> (いまさらMFCやってるのかぁ?という突っ込みはかんべんしてください)
ここはMFCスレなんだし、そんな遠慮は不要。
0788デフォルトの名無しさん
2008/03/02(日) 12:35:41while()の中で条件を満たす限りある処理を行っているのですが、
その途中に途中経過としてウィンドウに文字を表示させたいのですが、
処理中はウィンドウが応答無し状態になり処理が終了と同時に全ての文字が表示されてしまいます。
処理はきちんと行われ、文字表示はCEditViewクラスで行ってます。
文字表示以外の時は応答無しでも良いので文字表示を正しく行いたいのですがどうすればいいのでしょうか?
お願いします。
0789788
2008/03/02(日) 12:55:05が、処理中にクリックすると応答無し状態になりこの状態では文字が表示されなくなります。
ウィンドウは分割して使ってます。
0790デフォルトの名無しさん
2008/03/02(日) 13:21:54マルチスレッドで。
手抜きするなら
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200110/01100094.txt
(Sleep入れたほうがいいと思うけど)
0791デフォルトの名無しさん
2008/03/02(日) 13:30:35C++の基本を勉強しよう
クラスの外からは直接メンバ変数にアクセスしないように設計する。
0792788
2008/03/02(日) 13:33:14ありがとうございます。
教えて頂いたサイトのソース追加したら確かにいけました。
でも、マルチスレッドって言うのも興味があるので勉強してみようと思います。
0793デフォルトの名無しさん
2008/03/02(日) 13:34:57AppのMainFrameが取得できない?ので
AfxGetApp()->m_pMainWndを使うようにしてる
0794デフォルトの名無しさん
2008/03/02(日) 13:56:02別スレッドのMFCオブジェクトを操作するのはダメ
0795デフォルトの名無しさん
2008/03/02(日) 14:21:24例えばメインフレームからワーカースレッド起動して
ワーカーから
AfxGetApp()->m_pMainWnd->***()はダメ?
::PostMessage(AfxGetApp()->m_pMainWnd->m_hWnd, ...)なら良い?
0796デフォルトの名無しさん
2008/03/02(日) 14:31:590797793,795
2008/03/02(日) 14:34:54もう使って3年になるんだが辞表だしてくる\(^o^)/
0798デフォルトの名無しさん
2008/03/02(日) 14:41:200800デフォルトの名無しさん
2008/03/02(日) 14:56:04http://msdn2.microsoft.com/en-us/library/h14y172e.aspx
>As a general rule, a thread can access only MFC objects that it created.
AfxGetApp()->m_pMainWnd->m_hWnd くらいなら大丈夫だと思うけど
将来はどうなるか知らん。
0801デフォルトの名無しさん
2008/03/02(日) 15:04:33In other words, if you want to access any MFC object from a secondary thread,
you must create that thread with one of the methods described in
Multithreading: Creating User-Interface Threads or
Multithreading: Creating Worker Threads.
って書いてあるけど、AfxBeginThreadで作成したスレッドからなら
アクセスしていいってことかな?
0802デフォルトの名無しさん
2008/03/02(日) 16:19:56No
スレッド中でMFCのクラス使うならMFCでスレッド作れ、ということ。
ハンドルとMFCオブジェクトとの対応マップとかスレッド固有の情報を初期化する必要があるため。
0803デフォルトの名無しさん
2008/03/02(日) 20:19:43ツールバーの全ての項目が灰色になっていてボタンを押すことができません。
何故でしょう?
CChildFrame::OnCreateソースです。
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)||!m_wndToolBar.LoadToolBar(IDR_CHILDFRAME)
)
{
TRACE0("ツール バーの作成に失敗しました。\n");
}
// TODO : ここに特定な作成コードを追加してください。
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
0804デフォルトの名無しさん
2008/03/02(日) 21:34:410805デフォルトの名無しさん
2008/03/02(日) 21:52:43無効な場合は押せない仕様
0806デフォルトの名無しさん
2008/03/02(日) 22:53:30よく分からんのだけど、PostThreadMessageを使えってこと?
でもあれ取りこぼしあるでしょ?PostMessageでおkと思ってたんだけど…
0807デフォルトの名無しさん
2008/03/02(日) 23:32:45CWndのようなMFCオブジェクトの受け渡しは駄目。
回避するにはHWND(ハンドルそのもの)を受け渡す or PostMessageを使えとMSDNには書いてある。
0808デフォルトの名無しさん
2008/03/02(日) 23:33:54PostMessageはいいけど、ハンドル取り出すためにMFCオブジェクトにアクセスするのが問題だと思われ。
0809806
2008/03/02(日) 23:40:030810803
2008/03/03(月) 05:02:04解決しました
リソースエディタでアクセラレータを設定して、
さらにChildFrameでON_COMMAND_UI_UPDATEイベントを追加してEnableしないと有効にならないんですね。
0811デフォルトの名無しさん
2008/03/03(月) 22:08:14最近習得が出来るよう学習を始めたのですが、教科書代わりに見ている
「猫でも分かるプログラム」のサンプルプログラムがCです。
このまま進んでも大丈夫かちょっと心配になってきまして・・・。
0812デフォルトの名無しさん
2008/03/03(月) 22:11:470813デフォルトの名無しさん
2008/03/03(月) 22:11:550814デフォルトの名無しさん
2008/03/03(月) 22:13:130815デフォルトの名無しさん
2008/03/03(月) 22:15:37↑
ここにある章を順番に打ち込んでいっているんですが、これMFCですよね?
0816783
2008/03/03(月) 22:19:510817デフォルトの名無しさん
2008/03/03(月) 22:21:24気にせずどんどん打ち込めばいい。
0818デフォルトの名無しさん
2008/03/03(月) 22:22:47全然ちゃうわ
0819デフォルトの名無しさん
2008/03/03(月) 22:37:59コマンドハンドラを作るだけで有効になった気がするが。
メニューもそうだけどコマンドハンドラが無い項目は灰色になる仕様だった希ガス。
0820デフォルトの名無しさん
2008/03/04(火) 11:06:35【TAITO INN 大宮】
ゾウのげり (埼玉)
【ロングラン萬代】
*APE* (新潟)
0821デフォルトの名無しさん
2008/03/04(火) 12:58:15CxxxViewのほうにピクチャーボックスをつけています。
グラフを作りたいのですが、MM_ANISOTROPICで
論理座標で指定すると、CPenで作った線までも拡大されてしまいます。
絶対座標のピクセルのX軸が640だとして、
論理座標のX軸を10振り分けたとすると、
640/10倍の太さににってしまうのです。
CPenの太さを0にすればピクセルになると書いてあるので
取りあえずそれで凌いでいますが、ちょっと不便です。
みなさんは、どのようにしてますか?
0822デフォルトの名無しさん
2008/03/04(火) 15:29:280823デフォルトの名無しさん
2008/03/04(火) 16:58:22NewPen.CreatePen(PS_SOLID, 0, RGB(0,0,0));
こんな感じです。
NewPen.CreatePen(PS_SOLID, 1, RGB(0,0,0));
NewPen.CreatePen(PS_SOLID, 3, RGB(0,0,0));
とかしたいんだけど先ほど言ったように変に拡大されて
だめです。
0824デフォルトの名無しさん
2008/03/04(火) 17:31:09CDC::SetView〜とかCDC::SetWindow〜を組み合わせてはどうか
0825デフォルトの名無しさん
2008/03/04(火) 18:05:04pDC->SetWindowExtとかいうことですか?
今これらを使っているためにおかしくなっています。
0826デフォルトの名無しさん
2008/03/04(火) 19:03:46マップモードで座標をを論理的にしたいのですが、
ペンの太さまではそれの影響を受けたくないのです。
0827デフォルトの名無しさん
2008/03/04(火) 19:08:24ペンだけを除外できると思う根拠は何?
0828デフォルトの名無しさん
2008/03/04(火) 19:25:250829デフォルトの名無しさん
2008/03/04(火) 20:44:03例えば
絶対座標Xが200相対座標Xが50、
絶対座標Yが100相対座標Yが20としたら
ペン幅を1としても
200/50で横4倍縦5倍の線ができる。
ペンの幅だけは何とか縦横同じにしたい。
CPenでは縦横両方のペン幅を指定できないので
困っているというわけ。
論理座標を便利に使いながらペンを自由に
使えないかと模索中。
0830デフォルトの名無しさん
2008/03/04(火) 21:12:330831デフォルトの名無しさん
2008/03/04(火) 21:25:36これだと論理マップ使わないほうがいい。
0832デフォルトの名無しさん
2008/03/05(水) 05:31:18ツールバーがひっきりなしにちらつきます。
pCmdUI->SetRadio(1);
if( hoge == 0 )
{
pCmdUI->SetCheck(1);
}
else
{
pCmdUI->SetCheck(0);
}
このソースからSetCheck()を削除するとちらつきが無くなりましたので、
SetCheckによる再描画がちらつきの原因だと思うのですが、
ちらつくこと無くSetCheckを使うためにはどうすれば良いのでしょう?
0833832
2008/03/05(水) 08:57:50このバグは早く直してほしいですね
0834デフォルトの名無しさん
2008/03/05(水) 18:56:22雰囲気がリストビューに似ているのでリストコントロールを色々触っていたのですがどうも上手くいきませんでした。
・セル(行と列)単位の選択が不可能
・カラムがフレームの増増加と共に膨大な量になる
・セルに「○」など全角文字を1文字表示させるためには若干の広さが必要
・特定のセルだけに色が付けられない
など、近づくことさえ出来ず詰んでしまいました。
FlashとPhotshopのタイムラインは似たようなインターフェイスですが特殊なライブラリを使っているとか・・・?
0835デフォルトの名無しさん
2008/03/05(水) 19:13:00それ以外は自分でやる
0836デフォルトの名無しさん
2008/03/06(木) 07:54:410837デフォルトの名無しさん
2008/03/06(木) 08:56:33kwsk
0838デフォルトの名無しさん
2008/03/06(木) 09:04:450839デフォルトの名無しさん
2008/03/07(金) 00:19:05GetCheckで状態調べて、セットしたい状態と異なっている場合のみSetCheckすれば
解決したんじゃないの?
あと、バグっていってるのは、何を指してる?
0840デフォルトの名無しさん
2008/03/07(金) 01:12:270841デフォルトの名無しさん
2008/03/07(金) 02:32:54ああ、俺もこれで可哀想な子の仲間入りかな。 パトラッシュ、僕はもう疲れたよ。。
0842デフォルトの名無しさん
2008/03/07(金) 03:38:53アーッ
UPDATE_COMMAND_UI()以外のメソッド内で設定したスタイルはすべてクリアされると書いてあったので
pCmdUIのメソッドを使うことしか考えていませんでした。
よく調べてみたら、ツールバーにGetCheckedRadioButtonというのがあったんですね。
ありがとうございました(^^)
0843デフォルトの名無しさん
2008/03/07(金) 09:33:26ソフト向いてないよ、やめれ
0844デフォルトの名無しさん
2008/03/07(金) 09:54:030845デフォルトの名無しさん
2008/03/07(金) 10:00:48ソフト屋ってのは、不具合があったらまずは自分を
疑うところから始めるんだよ
その辺が甘いやつは向いてないよ
0846デフォルトの名無しさん
2008/03/07(金) 15:35:350847デフォルトの名無しさん
2008/03/07(金) 16:43:44奇麗事ですね(^^
0848デフォルトの名無しさん
2008/03/07(金) 16:55:240849デフォルトの名無しさん
2008/03/07(金) 17:18:07現場で使えない人に直接言えないからって、無関係な僕に言うのはお門違いですよね(^^)
0850デフォルトの名無しさん
2008/03/07(金) 18:11:40それをちょっと能力が劣るという理由だけで全部他人のせいにして逃げるなんて、人間としてどうですか(^^)/ヽ(^^)
0851デフォルトの名無しさん
2008/03/07(金) 18:18:340852デフォルトの名無しさん
2008/03/07(金) 18:25:590853デフォルトの名無しさん
2008/03/07(金) 18:29:480854デフォルトの名無しさん
2008/03/07(金) 20:31:49http://www.amazon.co.jp/products/dp/4794214723
0855デフォルトの名無しさん
2008/03/07(金) 21:14:330856ロリ本 ◆xCHiCkenQ.
2008/03/07(金) 23:00:110857856
2008/03/07(金) 23:00:580858デフォルトの名無しさん
2008/03/08(土) 01:56:53嫌だねぇ
ここで誰かMFC豆知識でも披露してふいんき変えてよ↓
0859Gori
2008/03/08(土) 03:31:19DOSプロンプトを開いてWindowsへ登録しなければ成らない様なのですが
参考書通り やって見るとError と出てしまいます
参考書では
C:\WINDOWS> cd system
C:\WINDOWS\SYSTEM> regsvr32 MYCTL.OCX
これでリターンしたのですが。。。?
もしかしたら。。。リターンじゃ無いのでしょうか。。?
。。。。どうすると。。。良い物でしょうか?。。。。m(__)m
0860デフォルトの名無しさん
2008/03/08(土) 06:56:44CDBVariant* pVal = new CDBVariant[3];
これdeleteしただけでエラー吐くw
0861デフォルトの名無しさん
2008/03/08(土) 07:26:43コマンドプロンプト開いて
regsvr32
と打つ(後ろの半角スペースも)、その後VisualStudioでビルドしてできた
ReleaseフォルダのしたのMYCTL.OCXをregsvr32 の後ろにドラッグアンドドロップ
してコマンドプロンプトにフォーカスを当ててからリターンでどうでしょう
0862デフォルトの名無しさん
2008/03/08(土) 07:53:55CDBVariant* pVal = new CDBVariant[3];
pVal[0] = new CDBVariant;
pVal[1] = new CDBVariant;
pVal[2] = new CDBVariant;
0863デフォルトの名無しさん
2008/03/08(土) 09:41:190864Gori
2008/03/08(土) 13:35:52アチコチ検索して見て見ると、
僕の方で概念を理解出来ていない様です。
何が、どう解らないのかも、解らない状態のようです。。。。^^;
もう少しアチコチ読み歩いて見ます。。。。m(__)m
0865デフォルトの名無しさん
2008/03/08(土) 20:16:480866デフォルトの名無しさん
2008/03/08(土) 22:09:46それはないだろ...Javaじゃあるまいし...
0867デフォルトの名無しさん
2008/03/08(土) 22:24:28・親ウィンドウがnewで作成
・ダイアログクラスのPostNcDestroy()でdelete thisで自殺
というようにやっているのですが、ダイアログが残っているかどうかは
親ウィンドウはどうやって知ればよいのでしょうか。
親ウィンドウがnewで確保したダイアログのポインタを使う方法は、
自殺でdeleteされていたら不正アクセスになってしまいます。
0868デフォルトの名無しさん
2008/03/08(土) 22:40:450869デフォルトの名無しさん
2008/03/08(土) 22:55:28子の死亡を通知してるが、子がなにかしなくても親が知る方法ってあんのかな
0870デフォルトの名無しさん
2008/03/08(土) 23:01:140871デフォルトの名無しさん
2008/03/08(土) 23:04:020872867
2008/03/08(土) 23:40:02やっぱりこういう構造になってしまうのですかね。
せっかく自殺するのに、その前に親に教えるとなると、
親に殺してもらうのと同じになってしまいますよね。
> IsWindow
このIsWindow()を使う方法って、
new後にCreate()したダイアログのm_hWndも別に憶えておくということですか?
この場合、自殺した後に作られた全く他人のウィンドウが
たまたま同じウィンドウハンドル値になって、親がIsWindow()に使ったときに
TRUEが返ってきてしまうことはあり得ないのでしょうか?
> 一度作ったら、ダイアログ側で閉じても非表示にしかならない、という方法もある。
たしかにこの方法もあるのでしょうけど、
ちょっと今の内部ルーチン的には無理があるので、
今回は作成&自殺を繰り返したいと思います。
0873デフォルトの名無しさん
2008/03/08(土) 23:58:390874デフォルトの名無しさん
2008/03/09(日) 00:11:56GetSafeHwnd()
0875デフォルトの名無しさん
2008/03/09(日) 00:23:23通知された親がやるのはダイアログのポインタにNULL入れるだけ。
> 親に殺してもらうのと同じになってしまいますよね。
同じだと何か問題あるの?
0876875
2008/03/09(日) 00:29:29○ MSDN
0877デフォルトの名無しさん
2008/03/09(日) 03:11:59その方法とかいろいろ新クラス作るってテもあるけど
そもそも、なんで生成破棄だけでメモリ空間エラー吐くのかが不明だなぁ
スタックさんの勝手処理だと吐かないのに ふしぎ!
0878デフォルトの名無しさん
2008/03/09(日) 15:32:050879867
2008/03/10(月) 09:35:31いや、結局親に伝えるのであれば、
わざわざ自殺するようなクラスにしなくてもよいはずなのに、
なぜこのような方法が推奨されているのかなと疑問に感じまして。
ちなみに、前回の
「親がダイアログのm_hWndを憶えておいてIsWindow()で自殺を断定する」
という方法は、やはり危険ということになりますでしょうか?
> GetSafeHwnd()
GetSafeHwnd()って、親が持っているポインタ先がすでにdeleteで自殺していて
そのポインタがNULLになっていないケースでは、余計危険ではありませんか?
0880デフォルトの名無しさん
2008/03/10(月) 11:00:37いろいろ使ってるうちに自殺方式の良さがわかると思う。
0881デフォルトの名無しさん
2008/03/10(月) 11:18:38子、自殺準備する
子「死にます」
子、自殺する
親、死に水を取る
・親が子に死んで欲しい場合
親「死になさい」
子「判りました」
子、自殺準備する
子「死にます」
子、自殺する
親、死に水を取る
・子が死ねない場合(1)
親「死になさい」
子「……」
親、暫く待つ
親、子を殺す
・子が死ねない場合(2)
親「死になさい」
子「判りました」
親、暫く待つ
親、子を殺す
0882デフォルトの名無しさん
2008/03/10(月) 14:13:340883デフォルトの名無しさん
2008/03/10(月) 15:11:57// self destruction
void CView::PostNcDestroy()
{
// default for views is to allocate them on the heap
// the default post-cleanup is to 'delete this'.
// never explicitly call 'delete' on a view
delete this;
}
0884デフォルトの名無しさん
2008/03/10(月) 19:22:44MSDNには両方のケースの説明のってるし、別に推奨してないと思う。
産んだ後、面倒見なくて済むからやってるんじゃないかな?
ダイアログ自体がメインウィンドウの場合もあるだろうし。
m_hWndは断定はできないけど危険な気がする。自分なら使わない。
GetSafeHwndは論外。
0885デフォルトの名無しさん
2008/03/10(月) 19:27:42スクロールバーが無いのでScrollWindowでスクロールさせたのはいいものの
アイテム0番目・カラム0番目の左上の座標が取得できないため
現在どれだけスクロールしているのか、どの列をクリックしたかが分かりません。
スクロールさせた量を自分で管理するしかないのでしょうか。
0886デフォルトの名無しさん
2008/03/10(月) 20:53:07LVM_HITTESTあたりで何とかならないか?
0887867
2008/03/10(月) 21:06:47今回のようなモードレスダイアログのケースでは
面倒見ないままというわけにもいかないので、
自殺の方法も自殺以外の方法も手間的にはあまり変わらなくなってしまうのですね。
881のような書きかただと、子ダイアログのPostNcDestroy()で
子「私を殺して」
親「わかりました」
親、子を殺して死に水を取る
という方法もありますよね。
> m_hWndは断定はできないけど危険な気がする。自分なら使わない。
> GetSafeHwndは論外。
m_hWndをIsWindow()に渡して自殺を判定する方法が安全なのであれば、
わざわざ親に伝えなくても子が勝手に自殺できるのでしょうけど、
本当に安全なのか確信できる情報が出てこないので、
今回はMSDNのサンプルに従って、
親に報告してからdelete thisを使う方法でやってみたいと思います。
0888デフォルトの名無しさん
2008/03/10(月) 21:51:17行は取得できるけど列は無理じゃない?時代が変わったのかな。
0889デフォルトの名無しさん
2008/03/14(金) 00:02:36http://msdn.microsoft.com/library/ja/vclib/html/vclrfcsimplestringtcopychars.asp
・newの[]が()だ
・というか(ハローワールド入れたいとするなら)添字12は行儀悪い
・new領域ポインタをリテラルで置き換え迷子にしている
・別にいいけどstaticなのに通常メンバ関数だと思ってるっぽい
・思ってるっぽいのに、そのくせ引数として自分自身の持ってる大事な領域ブチ込もうとしてる、まぁいいけど
http://msdn2.microsoft.com/ja-jp/library/y0cka9es.aspx
一応直ってて感動した
0890デフォルトの名無しさん
2008/03/14(金) 06:34:10なんかGetBufferが気持ち悪い
CStringの方が使いやすそう
0891デフォルトの名無しさん
2008/03/14(金) 21:58:25ま、メンバ関数の世話にはなるし、基本と凝ってるのをクラスで分けてるぐらいの認識
0892デフォルトの名無しさん
2008/03/16(日) 19:15:20クライアント領域が512×512ピクセルぴったりにあわせたウインドウを作りたいのですが、
うまくいきません、どこがよくないのでしょうか?
InitInstance()部に下記のウインドウサイズを変更するコードを追加記述しています。
OSは WindowsXP で、スタイルは XP 標準のやつです。(クラシックではありません)
0893892
2008/03/16(日) 19:15:53BOOL ChogeApp::InitInstance()
{
....................
....................
....................
HWND hwnd = this->m_pMainWnd->GetSafeHwnd();
long style = ::GetWindowLong( hwnd, GWL_STYLE );
long style_ex = ::GetWindowLong( hwnd, GWL_EXSTYLE );
RECT rect;
rect.left = 0;
rect.top = 0;
rect.right = 512;
rect.bottom = 512;
::AdjustWindowRectEx( &rect, style, TRUE, style_ex );
int scrlbar_w = GetSystemMetrics( SM_CXVSCROLL );
int scrlbar_h = GetSystemMetrics( SM_CYHSCROLL );
int window_w = ( rect.right - rect.left ) + scrlbar_w;
int window_h = ( rect.bottom - rect.top ) + scrlbar_h;
::SetWindowPos( hwnd, NULL, 0, 0, window_w, window_h, SWP_NOMOVE );
// メイン ウィンドウが初期化されたので、表示と更新を行います。
m_pMainWnd->ShowWindow(SW_SHOW); // defalut.
m_pMainWnd->UpdateWindow(); // defalut.
return TRUE;
}
0894デフォルトの名無しさん
2008/03/16(日) 19:25:06ここMFCスレですよ
0895デフォルトの名無しさん
2008/03/16(日) 20:06:56具体的にどううまくいかないかも書いた方がいいのでは無いでしょうか。
自分には良くわからないのですが
SetWindowPosをコメントアウトしてみての動作
window_w,window_hを100,100とか適当な値での動作
SetWindowPosをもっと後に書いてみたときの動作
等を試されてみては如何でしょうか
0896892
2008/03/16(日) 21:14:27AdjustWindowRectEx を使って取得すると、
予想したよりもウインドウ幅が大きくなって、
ウインドウ高さが小さくなります。
デバッガで追うと、
window_w が 537
window_h が 583
になります。
いろいろ即値で試してみて 523 と 613 にするとぴったりになります。
::SetWindowPos( hwnd, NULL, 0, 0, 523, 613, SWP_NOMOVE );
0897デフォルトの名無しさん
2008/03/16(日) 21:28:21幅は後から広がったんだと思う。
::GetClientRectか何かで確認してみ
0898デフォルトの名無しさん
2008/03/16(日) 21:33:57とりあえず指定したクライアントサイズになってるか調べるんだな
0899デフォルトの名無しさん
2008/03/16(日) 21:53:540900デフォルトの名無しさん
2008/03/16(日) 22:56:49どっかから丸ごとコピペしたからだろうか?
それでよくMFCスレで質問できるな
0901デフォルトの名無しさん
2008/03/16(日) 23:42:13AdjustWindowRectExはクライアント領域のサイズから
ウィンドウ領域の大きさを決めるんだから最終的に
GetClientRectしたときの大きさが(0,0,512,512)に
なっていればいいんじゃないですかね?
自分がVS2003のSDIで簡単にやってみた感じだと
クライアント領域がスクロールバーの分だけ大きくなってました
(0, 0, 512+scrlbar_w, 512+scrlbar_h)
0902デフォルトの名無しさん
2008/03/17(月) 00:35:37その仕様どおりに作るとロクなことがない
っていうか俺には無理。作れない。
毎回、理由の詳細を書いておけばいいんだけど
絶対に無理。これだけは覚えてる
フレームウィンドウを強引に変えるんじゃなくて
幅か高さのどっちか片方にあわせて必要ない
クライアント領域は黒く塗りつぶしておく仕様にするとみんな満足する
0903デフォルトの名無しさん
2008/03/17(月) 02:58:11> スクロールバーも考慮したサイズを取得するには、SM_CXVSCROLL または SM_CYHSCROLL を指定して
> GetSystemMetrics 関数を呼び出してください。
こんな使えねー関数は、ぽいだぽい。
0904デフォルトの名無しさん
2008/03/17(月) 05:45:35そこは勘弁してやれ。
0905デフォルトの名無しさん
2008/03/17(月) 23:46:310906デフォルトの名無しさん
2008/03/21(金) 16:30:53この様な使い方はマズいでしょうか?
やりたい内容は、2回目の印刷ダイアログを開く際
1回目で指定した内容を、初期表示させたいのです。
CPrintDialog cd;
cd.DoModal();
(処理1・・・)
cd.DoModal();
(処理2・・・)
GlobalFree(cd.m_pd.hDevNames);
GlobalFree(cd.m_pd.hDevMode);
不安なのは、GlobalFreeで開放していないのに、
2回目のDoModal()を行って良いものかどうか・・・
0907デフォルトの名無しさん
2008/03/22(土) 12:33:37MFC DLL:MFCをスタティックリンクした通常のDLL
DLLにダイアログリソースを追加してそのクラスを作成してます
class CDllDialog : public CDialog
{
...
enum{ IDD = IDD_DIALOG1 };
}
DLLにこのクラスを作成する関数を作りました
CDialog* MakeDllDialog()
{
return new CDllDialog();
}
(Q1)
DLLをリンクするEXE側でこのダイアログを使おうと思ったんですが
DLLのリソースを利用してのモードレスダイアログの作成はどうすればいいんでしょうか?
DLL側でCreateまでやるしかない??
CDialog *dlg = MakeDllDialog();
dlg->Create(/*DLLのリソースIDを入れる??*/, NULL);
モーダルは普通にできるみたい
CDialog *dlg = MakeDllDialog();
dlg->DoModal();
(Q2)
DLL側でnew, CreateまでやってEXE側にポインタを返しdlg->ShowWindow(SW_SHOW)と
するとアクセス違反になります。DLL側でCreateの後dlg->ShowWindow(SW_SHOW)なら成功し
表示されました。この違いは??
DLL側でCreateした直後のdlg->m_hWndとEXE側のdlg->m_hWndが異なるのはなぜ??
0908907
2008/03/22(土) 12:42:50ダイアログの実装をDLLに丸投げするならどういう実装にしますか??
EXE側から表示非表示や座標移動等は行いたい
追記:忘れてました
EXE側ではCDllDialogのヘッダファイルはありません
以上よろしくお願いしまう
0909デフォルトの名無しさん
2008/03/22(土) 12:52:540910デフォルトの名無しさん
2008/03/22(土) 15:06:44EXE側プロジェクトでMFCを共有リンクしてるんじゃない?
スタティックリンクにすればうまくいくのを確認した。
(A3)
Q2のShowWindowのようにDLLから取得するポインタで操作すればいい。
とりあえずMoveWindowが効くのは確認した。
(ただしCDllDialog独自の処理はその方法ではムリよん。)
0911デフォルトの名無しさん
2008/03/22(土) 15:09:48Q1
MFC限定なら、
EXE側で、DLLをLoadLibraryして得られるHINSTANCEを、AfxSetResourceHandleすれば
DLLのリソースを利用できたと思った。
0912デフォルトの名無しさん
2008/03/22(土) 15:18:15dlg->Create(%リソースID%, NULL)でOKだった。
やってみ。
0913907
2008/03/22(土) 18:34:40>>911,912
リソースIDを指定するにはDLLのresource.hをEXE側でインクルードしないと
駄目ってことですか?インクルードしないとそんなの無いよって怒られます。
>>912の%リソースID%の'%'ってコードに入れるとエラーになったんですが
単なる強調表示と考えていいですか?
>>910 確かにスタティックにすれば上手くいきます。違いが良くわからん。
>>909 ハンドルとメッセージで操作すれば簡単ですね。気付かなかった。
プラグイン形式?でダイアログをどんどん追加できれば便利かなーと
思ってたんですけど、Q2の方法でスタティックライブラリでMFCを使用するなら
出来そうな気がしてきた。
0914906
2008/03/22(土) 18:35:23GlobalFree()してからGlobalAlloc()し直してくれてるのでしょうか?
希望的推測ですが・・・
0915デフォルトの名無しさん
2008/03/22(土) 19:03:09%リソースID%
可変値の意味だったが通じないね。ごめん。
resource.hでリソースIDに対応する数値を調べて指定して。
(例)
dlg->Create(1000, NULL)
0916911
2008/03/22(土) 19:05:00・リソースIDをDLLとEXE共通にする。
・DLLのリソースIDを、新しいIDとしてEXEで定義する。
・即値で指定する
お好きにどうぞ。
0917913
2008/03/22(土) 19:24:29細かい部分までは分からないが、デバッグで追ってみたら、
ダイアログ作成時の処理のパスが違ってた。
それよりビルドが通るのに驚いた。DLLとexeでそろえないとビルド通らなかった経験があるんだけどな。
基本的には揃えとくのが吉と思う。
0918デフォルトの名無しさん
2008/03/22(土) 19:36:24SDI形式で作ってます。
ある大きさのクライアント領域を指定して、
それにあわせてウインドウを作りたいんですがよくわかりません。
自分なりにググっていろいろ試したんですが、お手上げです。
0919デフォルトの名無しさん
2008/03/22(土) 19:42:590920デフォルトの名無しさん
2008/03/22(土) 19:46:51そのスレはこの板ですか?
この板なら大体何時ごろのレスか教えて欲しいです。
0921デフォルトの名無しさん
2008/03/22(土) 19:48:330922デフォルトの名無しさん
2008/03/22(土) 20:14:36見つかりました。
回答はないんですね・・・
もうちょっと調べます。
0923907
2008/03/22(土) 20:36:06>>DLLとexeでそろえないと...
DLLもEXEも共有にすれば(Q2)の時にアクセス違反にならずに表示できました。
ただこのときに使われたダイアログリソースがEXE側の同ID番号のリソースが使われた。
スタティックリンク同士だとDLL側のリソースが使われた。
今回はDLLのリソースを使いたいので、共有同士でするなら
DLL側で>>911のAfxSetResouceHandleをすれば問題無し。
DLLとEXEをそろえていないのが元凶っぽいですね
>>915,916
なるほど、覚えときます。
>>922
>>892のコードでは出来ない?
0924913
2008/03/22(土) 20:55:360925デフォルトの名無しさん
2008/03/22(土) 21:13:530926デフォルトの名無しさん
2008/03/22(土) 21:47:420927デフォルトの名無しさん
2008/03/22(土) 23:47:040928デフォルトの名無しさん
2008/03/23(日) 00:41:25ステップインしてどんなAPIで実現しているかを調べんのは簡単じゃね?
0929デフォルトの名無しさん
2008/03/23(日) 01:18:210930デフォルトの名無しさん
2008/03/23(日) 10:52:040931デフォルトの名無しさん
2008/03/23(日) 10:55:15_AFXWIN_INLINE void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource)
{ ASSERT(hInstResource != NULL); afxCurrentResourceHandle = hInstResource; }
#define afxCurrentResourceHandle AfxGetModuleState()->m_hCurrentResourceHandle
0932デフォルトの名無しさん
2008/03/23(日) 11:02:530933デフォルトの名無しさん
2008/03/23(日) 11:40:110934デフォルトの名無しさん
2008/03/23(日) 15:19:10手堅い方法を教えてください.
0935デフォルトの名無しさん
2008/03/23(日) 15:33:510936934
2008/03/23(日) 15:40:14ガリ版っすかwwwww
gnuplotみたいな処理をしてくれるクラスってないんですか?
グラフでつまずきたくないんで,できるだけ簡単に描画させたいんですけど.
それともみなさんLineToとか使って書いてるんですか?
0937デフォルトの名無しさん
2008/03/23(日) 16:32:27ぐぐってみても無さそうですねぇ
gnuplotってwindowsじゃ使えないんですか?
0938デフォルトの名無しさん
2008/03/23(日) 18:01:44wgnuplotってのはあるけどな
0939934
2008/03/23(日) 20:09:27windowsなら>>938にもあるwgnuplotですね.
とりあえずsystem関数でwgnuplotを呼び出すことにしました
http://hooktail.org/computer/index.php?Visual%20C%2B%2B%A5%D7%A
5%ED%A5%B0%A5%E9%A5%E0%A4%AB%A4%E9Gnuplot%A1%CA2%A1%CB
なんでもいいからもっと手軽にグラフを書ければいいんですが・・・
0940デフォルトの名無しさん
2008/03/24(月) 12:26:55この方法なら多少は楽じゃない?
ttp://www-sens.sys.es.osaka-u.ac.jp/wakate/tutorial/group3/gnuplot/
0941906
2008/03/24(月) 12:37:200942デフォルトの名無しさん
2008/03/24(月) 12:52:19MSDNのPRINTDLGの説明は読んだ? ちょっと読んでみた限り、hDevNameなどはNULLを渡すと勝手にallocateするけど
NULL以外を渡した場合はそこを使うって読めるんだけど。
0943906
2008/03/24(月) 15:52:00回答ありがとうございます。
そうすると、前回確保した領域をそのまま使うので、
毎回確保するサイズが同じなら、OKという訳ですね。
hDevNameはその都度、サイズが違う可能性が高いっぽいな・・・
0944デフォルトの名無しさん
2008/03/24(月) 19:48:58見た目は幅の狭いExcelの表のようなものを作っています。
オーナードロー、レポート形式にてアイテムの高さとカラムの幅が全て13x13になっています。
スクロールは別のコントロールが管理し、CPoint(10,20)であればアイテム20番目カラム10番目が左上に描画されます。
表示する文字は1セルに1文字。
このListCtrlの領域が1300x1300であればセルの数は100x100で10000個描画されます。
僅かでも再描画の必要性が出てくるとオーバーライドした描画関数が動き、
左上のセルから右下のセルまで(上記の例ですと10000個)毎回描画されて非常に重いです。
描画関数はListCtrlの領域に収まるアイテム数分繰り返されるだけで
再描画が必要な領域が分からず全て再描画という手段をとっています。
少しでも軽くなればいいのですが良い案はありませんでしょうか。
0945デフォルトの名無しさん
2008/03/24(月) 21:44:59オーナードローできるか知らない
0946デフォルトの名無しさん
2008/03/24(月) 22:19:21NM_CUSTOMDRAWのオーバーライドで描画していない予感。
まあ、再描画領域自体はRectVisibleとかでクリップ領域を確認すれば、
必要最小限に抑えられる気もするけど。
0947デフォルトの名無しさん
2008/03/25(火) 00:10:29msdnにも書かれているDrawItemをオーバーライドして描画していました。
NM_CUSTOMDRAWを初めて知ったのですが、
DrawItemの前に呼び出される・・・つまりNM_CUSTOMDRAWを関知したら
DrawItemの代わりに必要な領域を調べ描画するということで宜しいのでしょうか。
時間的に今から試すのは厳しいので明日触ってみたいと思います。
0948デフォルトの名無しさん
2008/03/26(水) 00:14:46セル中の1文字表示はどうやって描いてるの?
TextOut系で描いても「非常に重く」感じるなら
もっと根本的なとこで間違ってる気がする。
0949デフォルトの名無しさん
2008/03/26(水) 00:19:470950デフォルトの名無しさん
2008/03/26(水) 16:20:02いとこの小学生が遊びに来た時、テストで40℃のお湯と60℃のお湯を同じ量混ぜたら
100℃のお湯になるって答えたら×になったんだけど何で??
とか聞いてきやがった。
もうアホかと思って、それならこの部屋の気温は20℃、廊下の気温は10℃だから
ドア開けて空気を混ぜたら30℃になるのか?それだと夏並に暑くなるよな?って言ってやったよ。
そしたら、?ごめんねお兄ちゃん…わたし馬鹿だから…?
でもね、お兄ちゃんとわたしが一つになったらきっとずっと熱くなるよね??
そう言って服をするりと
0951デフォルトの名無しさん
2008/03/26(水) 17:49:440952デフォルトの名無しさん
2008/03/26(水) 23:35:5050℃になるかというと実はならないらしいね
0953デフォルトの名無しさん
2008/03/26(水) 23:43:22混合熱とかで微妙に誤差が生じるとは思うが。
0954デフォルトの名無しさん
2008/03/26(水) 23:46:10同じ体積なら60℃の方が僅かに軽いからね。
0955デフォルトの名無しさん
2008/03/27(木) 02:07:520956デフォルトの名無しさん
2008/03/27(木) 15:13:08CListCtrlの複数削除をやろうとしていますがうまくいきません。
以下のように選択されたアイテムのインデックスを取って削除というループをしています。
POSITION pos = this->m_xcLst.GetFirstSelectedItemPosition();
while(pos != NULL)
{
index = this->m_xcLst.GetNextSelectedItem(pos);
index -= nDel;
this->m_xcLst.DeleteItem(index); // アイテム削除
nDel++;
}
しかし、3つ以上のアイテムを選択していると最後の選択アイテムのインデックスが正しく取れず他のアイテムを削除してしまったりします。
例えば、0〜6のアイテムがあったとして、"1,3,5"を選択していると"1,3,4"と返ってきてしまう。
DeleteItem()が悪いかと思い外してみると、
選択したアイテムのインデックスが正しく返ってくるのを確認しました。
(さっきの例だと"1,3,5"と返ってくる。)
インデックスを配列に取得して後ろから削除する方法も考えたのですがいまいちです。
良い解決策はありませんでしょうか。
よろしくお願いします
0957デフォルトの名無しさん
2008/03/27(木) 19:06:270958デフォルトの名無しさん
2008/03/27(木) 21:33:50nDelの変数の意味が分からん
0959デフォルトの名無しさん
2008/03/27(木) 21:53:270960デフォルトの名無しさん
2008/03/28(金) 10:12:18>>956です
m_xcLst.GetNextItem(index, LVNI_ABOVE | LVNI_SELECTED);
として、下から選択アイテムを検索していくことで実現できました
アドバイスありがとうございました
0961デフォルトの名無しさん
2008/03/28(金) 18:33:58>>956から
index -= nDel;
を消すだけなのに。
0962デフォルトの名無しさん
2008/03/29(土) 10:43:50ちゃんと確認した?
それだとうまくいかないよ。VC.net 2003
0963デフォルトの名無しさん
2008/03/31(月) 02:04:18他のボタンやエディット等のコントロールの上を通った時に説明する機能を作ろうと思っています。
OnNcHitTestを各ボタンごとに設定しれやれば良いかと思ったのですが、
ボタンから作るイベントハンドラにWM_NCHITTESTが有りません。
過去にClassWizardのメッセージフィルタをウィンドウにする、という解決法が
提示されているのは見つけたのですが、
VS2005ではクラスウィザードではなくイベントハンドラウィザードで
イベントハンドラを追加しており、そこにはメッセージフィルタといった
機能は存在しないので困っています。
VS2005でも同等のイベントハンドラの追加ができないでしょうか?
0964デフォルトの名無しさん
2008/03/31(月) 02:33:35WM_NCHITTESTはダイアログのいべんとにあんじゃね? エディットでなくてさ。
VC6(クラスウィザード)でもダイアログのイベントだし、な。
0965デフォルトの名無しさん
2008/03/31(月) 08:59:560966デフォルトの名無しさん
2008/03/31(月) 18:37:11データ自体をListCtrlなど別に格納しておいて、ツリーの全消去→再構築でも出来ないことはないですがあまり好ましくないですし・・・
0967デフォルトの名無しさん
2008/03/31(月) 21:44:47なるほど、リストコントロールのWM_NOTIFYのイベントプロシージャが
ウィザードでは1つのリストコントロールにしか割り振れないが(ClassWizardのバグ?)、
それをやれば複数のリストコントロールのWM_NOTIFYのイベントプロシージャを作成出来ると言うわけだな。
0968963
2008/03/31(月) 21:47:56しかしCPointが与えられるだけなので、どのボタンの上をマウスが通過した、等の情報は得られないのですね…
Spy++だとボタン上にマウスがヒットしたイベントを取れているので、できないかと思ったんですが、他の方法を探すしか無いんでしょうか。
座標テーブルを作ってマウス座標に対応したメッセージを表示する…というのも(本質的には違う問題になってしまいますが)できなくはないですね。
0969デフォルトの名無しさん
2008/03/31(月) 23:02:150970デフォルトの名無しさん
2008/04/01(火) 08:32:18InsertItemとDeleteItemで普通にできない?
子があるとちょっと面倒かも。(自信なし)
0971デフォルトの名無しさん
2008/04/01(火) 19:01:51負荷を増していけば整数値で1〜60になると思ったのですが飛び飛びになります。
具体的には0、15か16、31か32、45か46、61か62と言った具合です。
1FPSでも1000msになって欲しいのですが1015msになりました。
この15ms刻みの値の意味は何なのですか?
以下のようなプログラムです(別スレッド)
DWORD BefoeTime = timeGetTime();
while(1){
DWORD dw = timeGetTime();
while( BefoeTime+16 >= dw )
dw = timeGetTime();
DWORD output = dw - BefoeTime;
ダイアログのテキストボックスにoutputを表示
}
これだと16msと31msのどちらかが表示されて平均値が約25msになりました。
0972デフォルトの名無しさん
2008/04/01(火) 19:14:12MFCと何の関係が?
0973デフォルトの名無しさん
2008/04/01(火) 19:22:28あれ、CDialogとかCWndとかをつかっているのでMFCかと思っていたのですが違うのですか?
FPSの固定の方法はCと同じなので違うとすればMFCと思いまして。
0974966
2008/04/01(火) 20:11:02レスありがとうございます。
確かに少々処理が面倒でしたが無事に導入できました。
ソートがあるんだからアイテム同士の並び替えもデフォルトで実装されていればよかったのになぁ
>>971
リフレッシュレートに合わせているようにも見えますね。
そのプログラムだと16ms/fだけどDialogBoxの更新で同期が取られて31(30?)ms/fの段階で更新しているのではないでしょうか
0975デフォルトの名無しさん
2008/04/01(火) 20:20:23ちょっとよく分からないのだけど、971のコードの出力結果が1,2,・・・16に
なるのを期待してるの?
0976975
2008/04/01(火) 20:23:070977デフォルトの名無しさん
2008/04/01(火) 21:46:39DirectX VC++.net(VS2005)の組み合わせで問題無いから恐らくMFCの仕様
DirectXには垂直同期を切る方法があるがMFCではどうなんだろ
974の通りウィンドウの描画で強制的に同期が行われるのであれば表示更新用スレッドをもう1つ立てることで解決しないかね
0978デフォルトの名無しさん
2008/04/01(火) 22:01:500979デフォルトの名無しさん
2008/04/01(火) 22:44:24MFCでウィンドウのタイトルの部分をダブルクリックしたら最大化するのをやめさせるのはどうやればいいのでしょうか?
0980デフォルトの名無しさん
2008/04/01(火) 22:45:17例えば
CRect myRect;
だったら最初小文字で単語と単語のつながりの直後の頭文字を大文字にするって感じであってます?
コントロール変数、DDX変数は
m_〜
m_ddx_〜
ってやってて統一できてます。
0981デフォルトの名無しさん
2008/04/01(火) 22:49:060982デフォルトの名無しさん
2008/04/01(火) 22:59:07それMFCがやってるわけじゃないだろ
0983デフォルトの名無しさん
2008/04/01(火) 23:14:380984デフォルトの名無しさん
2008/04/01(火) 23:18:48自分なりに決めます
スレ汚しすみませんです・・・
0985デフォルトの名無しさん
2008/04/01(火) 23:20:35これが一般的
0986デフォルトの名無しさん
2008/04/02(水) 04:32:240987デフォルトの名無しさん
2008/04/02(水) 07:56:450988デフォルトの名無しさん
2008/04/02(水) 08:28:37グローバルか?メンバか?ローカルか?スタティックか?引数か?
ってわかるようにしたほうがいいと思う
0989デフォルトの名無しさん
2008/04/02(水) 14:27:55なぜか型を付与するようにねじ曲げられたが。
0990デフォルトの名無しさん
2008/04/02(水) 16:01:03正確には秒速50kmにはならないらしい
0991デフォルトの名無しさん
2008/04/02(水) 18:32:57見ている人が動いていなければ秒速0kmだしね。
0992デフォルトの名無しさん
2008/04/02(水) 20:43:09ダイアログの上にタブコントロールとリストコントロールを重ねるような形で置いています。
リストコントロールにフォーカスがある状態で他のウインドウが重なるとリストコントロールが消えるのですが
回避方法などありますでしょうか?
タブオーダーはリストコントロールの方が後です。フォーカスがない状態ではちゃんと表示されます。
Win2000, VC++.NET(VS2002)
0993デフォルトの名無しさん
2008/04/02(水) 22:44:03今実行環境が無いので憶測ですまんが、リストコントロールのParentをタブにすれば出来ないかな。
Z値が同じであれば恐らく親(タブ)が奥で子(リスト)が手前に表示されると思う。
0994デフォルトの名無しさん
2008/04/03(木) 01:23:38ダイアログやビューへの埋め込みプロパティシート&複数プロパティページのほうがリソース管理的にもおすすめ
親→シート→ページの関係も自動でできるしね
0995デフォルトの名無しさん
2008/04/03(木) 09:07:58当方VS2005
タブ上のダイアログにリストコントロールを置いてるとき同様の現象が起きた
リストコントロールのプロパティでTransparentをTrueにしたら直った
0996デフォルトの名無しさん
2008/04/03(木) 21:04:150997992
2008/04/03(木) 21:16:06>>994
レスサンクス。
SetWindowPosでwndTopに設定したらなんとか回避できました。
>>995
Transparent=Trueを試したら、こちらでもOKでした。
リソースレベルで回避できるならこちらの方がいいのかな。
その後、トラブルとかないですか?
0998デフォルトの名無しさん
2008/04/03(木) 21:45:480999デフォルトの名無しさん
2008/04/03(木) 22:36:101000デフォルトの名無しさん
2008/04/03(木) 22:41:2010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。