40℃のお湯と60℃のお湯を同じ量混ぜたら
50℃になるかというと実はならないらしいね
まあほぼ50℃にはなるよ。
混合熱とかで微妙に誤差が生じるとは思うが。
「同じ量」の定義によるのかな。
同じ体積なら60℃の方が僅かに軽いからね。
同じ質量
VS2005
CListCtrlの複数削除をやろうとしていますがうまくいきません。
以下のように選択されたアイテムのインデックスを取って削除というループをしています。
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"と返ってくる。)
インデックスを配列に取得して後ろから削除する方法も考えたのですがいまいちです。
良い解決策はありませんでしょうか。
よろしくお願いします
単純に後ろから削除でいいだろ
やりかた忘れたけど検索したらすぐ見つかった
>>957 >>956です
m_xcLst.GetNextItem(index, LVNI_ABOVE | LVNI_SELECTED);
として、下から選択アイテムを検索していくことで実現できました
アドバイスありがとうございました
>>961 ちゃんと確認した?
それだとうまくいかないよ。VC.net 2003
VS2005でエディットコントロールを作り、
他のボタンやエディット等のコントロールの上を通った時に説明する機能を作ろうと思っています。
OnNcHitTestを各ボタンごとに設定しれやれば良いかと思ったのですが、
ボタンから作るイベントハンドラにWM_NCHITTESTが有りません。
過去にClassWizardのメッセージフィルタをウィンドウにする、という解決法が
提示されているのは見つけたのですが、
VS2005ではクラスウィザードではなくイベントハンドラウィザードで
イベントハンドラを追加しており、そこにはメッセージフィルタといった
機能は存在しないので困っています。
VS2005でも同等のイベントハンドラの追加ができないでしょうか?
>>963 WM_NCHITTESTはダイアログのいべんとにあんじゃね? エディットでなくてさ。
VC6(クラスウィザード)でもダイアログのイベントだし、な。
ウィザード使い方わからなかったら自力で追加することも可能
ツリーって特定のアイテムの入れ替えは出来ないのでしょうか?
データ自体をListCtrlなど別に格納しておいて、ツリーの全消去→再構築でも出来ないことはないですがあまり好ましくないですし・・・
>>965 なるほど、リストコントロールのWM_NOTIFYのイベントプロシージャが
ウィザードでは1つのリストコントロールにしか割り振れないが(ClassWizardのバグ?)、
それをやれば複数のリストコントロールのWM_NOTIFYのイベントプロシージャを作成出来ると言うわけだな。
968 :
963:2008/03/31(月) 21:47:56
確かにダイアログ側のイベントにWM_NCHITTESTは有るようです、ありがとうございます。
しかしCPointが与えられるだけなので、どのボタンの上をマウスが通過した、等の情報は得られないのですね…
Spy++だとボタン上にマウスがヒットしたイベントを取れているので、できないかと思ったんですが、他の方法を探すしか無いんでしょうか。
座標テーブルを作ってマウス座標に対応したメッセージを表示する…というのも(本質的には違う問題になってしまいますが)できなくはないですね。
だからボタンから作るイベントハンドラにWM_NCHITTESTでいいんだろ
>>966 InsertItemとDeleteItemで普通にできない?
子があるとちょっと面倒かも。(自信なし)
VC8でダイアログにフレーム間の時間(_秒)をリアルタイムで表示するプログラムを組んでいます。
負荷を増していけば整数値で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になりました。
誤爆?
MFCと何の関係が?
>>972 あれ、CDialogとかCWndとかをつかっているのでMFCかと思っていたのですが違うのですか?
FPSの固定の方法はCと同じなので違うとすればMFCと思いまして。
974 :
966:2008/04/01(火) 20:11:02
>>970 レスありがとうございます。
確かに少々処理が面倒でしたが無事に導入できました。
ソートがあるんだからアイテム同士の並び替えもデフォルトで実装されていればよかったのになぁ
>>971 リフレッシュレートに合わせているようにも見えますね。
そのプログラムだと16ms/fだけどDialogBoxの更新で同期が取られて31(30?)ms/fの段階で更新しているのではないでしょうか
CDialogやCWndはMFCだが971にはMFCに関するものが出てきてないからだよ。
ちょっとよく分からないのだけど、971のコードの出力結果が1,2,・・・16に
なるのを期待してるの?
976 :
975:2008/04/01(火) 20:23:07
ごめん。975は勘違いだ。もう少し考える。
>>975 DirectX VC++.net(VS2005)の組み合わせで問題無いから恐らくMFCの仕様
DirectXには垂直同期を切る方法があるがMFCではどうなんだろ
974の通りウィンドウの描画で強制的に同期が行われるのであれば表示更新用スレッドをもう1つ立てることで解決しないかね
NT系のQuantumじゃね?15msといえば。
質問
MFCでウィンドウのタイトルの部分をダブルクリックしたら最大化するのをやめさせるのはどうやればいいのでしょうか?
980 :
デフォルトの名無しさん:2008/04/01(火) 22:45:17
変数の命名規則を教えてください。
例えば
CRect myRect;
だったら最初小文字で単語と単語のつながりの直後の頭文字を大文字にするって感じであってます?
コントロール変数、DDX変数は
m_〜
m_ddx_〜
ってやってて統一できてます。
個人の命名規則なんて個人の好きにすればいいさ。
>979
それMFCがやってるわけじゃないだろ
983 :
デフォルトの名無しさん:2008/04/01(火) 23:14:38
VCで一般的な命名規則ってないの?
>>983,980です
自分なりに決めます
スレ汚しすみませんです・・・
CRect rect;
これが一般的
LPCTSTR lpszStr;
Long Pointer to Constant Tchar STRing
型なんて変数名に反映するのは無意味
グローバルか?メンバか?ローカルか?スタティックか?引数か?
ってわかるようにしたほうがいいと思う
元々のハンガリー記法も、型ではなく意味を変数名に付与するものだった。
なぜか型を付与するようにねじ曲げられたが。
秒速20kmで飛んでるロケットと逆方向に秒速30kmで飛んでるロケットをみると
正確には秒速50kmにはならないらしい
>>990 見ている人が動いていなければ秒速0kmだしね。
質問です。
ダイアログの上にタブコントロールとリストコントロールを重ねるような形で置いています。
リストコントロールにフォーカスがある状態で他のウインドウが重なるとリストコントロールが消えるのですが
回避方法などありますでしょうか?
タブオーダーはリストコントロールの方が後です。フォーカスがない状態ではちゃんと表示されます。
Win2000, VC++.NET(VS2002)
>>992 今実行環境が無いので憶測ですまんが、リストコントロールのParentをタブにすれば出来ないかな。
Z値が同じであれば恐らく親(タブ)が奥で子(リスト)が手前に表示されると思う。
見た目しか効用の無いタブコントロール使うぐらいなら
ダイアログやビューへの埋め込みプロパティシート&複数プロパティページのほうがリソース管理的にもおすすめ
親→シート→ページの関係も自動でできるしね
>>992 当方VS2005
タブ上のダイアログにリストコントロールを置いてるとき同様の現象が起きた
リストコントロールのプロパティでTransparentをTrueにしたら直った
CWnd::SetWindowText("1000ゲット!");
997 :
992:2008/04/03(木) 21:16:06
>>993 >>994 レスサンクス。
SetWindowPosでwndTopに設定したらなんとか回避できました。
>>995 Transparent=Trueを試したら、こちらでもOKでした。
リソースレベルで回避できるならこちらの方がいいのかな。
その後、トラブルとかないですか?
馬鹿すぎ
999 :
デフォルトの名無しさん:2008/04/03(木) 22:36:10
二月(花札)
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。