■MFC相談室 mfc21d.dll■
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/08/22(土) 14:34:39前スレ
■MFC相談室 mfc20d.dll■
http://pc12.2ch.net/test/read.cgi/tech/1230219816/
0002デフォルトの名無しさん
2009/08/22(土) 14:37:12http://msdn.microsoft.com/ja-jp/library/d06h2x6e(VS.80).aspx
0003デフォルトの名無しさん
2009/08/22(土) 16:31:300004デフォルトの名無しさん
2009/08/22(土) 16:45:110005デフォルトの名無しさん
2009/08/22(土) 17:29:240006デフォルトの名無しさん
2009/08/22(土) 18:11:220007デフォルトの名無しさん
2009/08/23(日) 07:38:55リソースがいっぱいあって、実行速度もそれほど気にしないけど、
多機能なアプリを開発したいって人には.NETとC#の方がコストパフォーマンスが良いし、
(C++/CLIは本来のC++を無視した気持ちの悪い独自拡張が多すぎる…)
軽量・高速が重要なネイティブアプリにはATL/WTLが使われるようになったから。
実際、MFCの関連書籍も大半は6.0でとまっていて
もう7.0以降にはほとんど需要がない事実を物語っている。
0008デフォルトの名無しさん
2009/08/23(日) 09:53:10未だにA2Wとか書いてそうだ。
>リソースがいっぱいあって、実行速度もそれほど気にしないけど、
>多機能なアプリを開発したいって人には.NETとC#の方がコストパフォーマンスが良いし、
その為か、9.0SP1(VS2008SP1)で進化が極端な方向に進み始めたな。
元々GUIアプリの基本的な機能を提供するという目的ではあったけど、
今や、表示テーマの変更や、キーボードショートカットのカスタマイズUIまで、
初めから提供されるようになった。
VS2010以降もやる気満々らしいし。開発チームの暴走発言かもしれないけどw
ttp://blogs.msdn.com/dd_jpn/archive/2008/12/04/9174764.aspx
0009デフォルトの名無しさん
2009/08/23(日) 12:45:39ATL/WTL にも興味はあるが、やはりマスターするには時間的なものが・・・。
もっとも、単純なプログラムは なんちゃってMFC 的な独自のクラスを使って書いている。
実質 100KB 程度の実行ファイルが MFC をスタティックリンクしただけで 3MB超になるんじゃ、どっちが主役かわからないもの。(笑)
0010デフォルトの名無しさん
2009/08/24(月) 00:36:02なんもできんので、機能をごく必要なものに限って、
ブラウザとメーラーとワープロつくってやったよ。
喜んでくれた。別に質問じゃないけど、MFC使って作ったから・・誰かに報告したくてね。
すれ汚しスマソ。
0011デフォルトの名無しさん
2009/08/24(月) 06:59:10afxcontrolbars.h はずせばそんな巨大なサイズにならないんじゃない?
0012デフォルトの名無しさん
2009/08/24(月) 19:59:493MB超はデバッグビルドだべ?リリースでも1Mぐらいあるけど
まぁ最近の環境だと昔ほど気にする必要がなくてよいかなよいかな
0013デフォルトの名無しさん
2009/08/24(月) 20:13:410014デフォルトの名無しさん
2009/08/24(月) 20:40:48button[0].Create(・・・);
こんな感じでボタンを動的に生成して、Viewに配置した時に
ボタンのイベントをViewで受け取るにはどうすれば良いですか?
(ボタンの数は、動的に変化します。)
ド素人の僕にご教授お願い致します。
0015デフォルトの名無しさん
2009/08/24(月) 21:00:09いや気にするよ。新しい機能なにも使ってないようなダイアログベースのちょっとした
アプリで実行ファイルメガ単位って嫌すぎる。まぁ、無駄な機能使わなければ小さくも
出来るからいいんだけど。
>>14
ビューのメッセージマップにON_BN_CLICKEDで出来るんじゃない?
0016デフォルトの名無しさん
2009/08/24(月) 21:05:22BN_CLICKEDとかボタンから親ウィンドウに通知してくる
ボタンコントロールはWM_NOTIFYじゃなくてWM_COMMANDだったかもしれん
またはCButtonの派生クラス作ってBN_CLICKEDマップして自前で通知送る
0017デフォルトの名無しさん
2009/08/24(月) 21:18:09ボタンの親を当然ながら View にしておいて、View のメッセージマップに
ON_CONTROL_RANGE( BN_CLICKED, 最初のボタンのID, MAXで作成されたときの最後のボタンのID, OnControlRange)
と書く。
Viewのヘッダに下記を追加
afx_msg void OnControlRange(UINT nID);
あとは View で処理。
void CxxxView::OnControlRange(UINT nID)
{
if ( nID == xxx) ToDO...
}
0018デフォルトの名無しさん
2009/08/25(火) 01:49:26GetWindowTextを使うと思うんですが、データ型は必ずCStringになってしまうのでしょうか?
ここでCharを使う事って出来ますか?
0019デフォルトの名無しさん
2009/08/25(火) 02:01:10CWnd::GetWindowText には下記の二つがある。前者を使えばいい。
int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount) const;
void GetWindowText( CString& rString) const;
exp.
TCHAR sz[128];
GetWindowText( sz, 128);
0020デフォルトの名無しさん
2009/08/25(火) 02:10:38レスありがとうございます
例でTCHARとなっているところはcharでも問題ないですよね・・?
また、LPTSTRが引数になるということは、エディットボックスの中身がcharポインタに入るってイメージでいいのでしょうか?
すみません勉強不足で変な表現があるかも知れませんが
0021デフォルトの名無しさん
2009/08/25(火) 02:28:13プロジェクトの設定で Unicode 文字セットを使っていないなら char でいい。
「Unicode 文字セットを使用する」にしている場合は char は使えない。
>エディットボックスの中身がcharポインタに入る
まあ、そんな感じのイメージ。難しく言うと、「エディットボックスの中身が、配列 sz の先頭要素のアドレスが示すメモリエリアに入る」
0022デフォルトの名無しさん
2009/08/26(水) 09:14:48このFormViewを印刷するにはどうしたら良いですか?
0023デフォルトの名無しさん
2009/08/26(水) 10:59:210024デフォルトの名無しさん
2009/08/26(水) 21:56:36>>23
ボタンをどう印刷すれば良いのか、全く解りません。
MSFlexGridについては、pDCを使って線とテキストで
あたかもMSFlexGridをそのまま印刷してるような感じに出来る事は解ったのですが・・・
よろしくお願い致します
0025デフォルトの名無しさん
2009/08/26(水) 22:47:15pDCを使って線とテキストで描く。
あるいはそれ用のビットマップリソースを用意して貼り付ける。
0027デフォルトの名無しさん
2009/08/28(金) 16:38:440028名無しさん@そうだ選挙に行こう
2009/08/30(日) 12:22:490029デフォルトの名無しさん
2009/09/04(金) 10:12:200030デフォルトの名無しさん
2009/09/07(月) 17:57:10VC++のダイアログ形式でプログラムしているのですが
下記のプログラムで
myDLG.DoModal()
を行うと最初からあったOKボタンを押してもプログラムが死に切っていないようなのですが
どのようにすればいいのでしょうか.
ググったら無限ループとか永久に待機してるとかっぽかったんですが解決法が良く分かりませんでした.
プログラム開始→OKボタン 普通に終了する
プログラム開始→ボタン8→ファイル選ぶ→OKボタン ダイアログは消えるがプログラムは完全に死んでないみたい
といった状況です.
void CtestDlg::OnBnClickedButton8()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
//ファイルダイアログを表示してファイル指定する
CFileDialog myDLG(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"AVIファイル(*.AVI)|*.AVI||");
if(myDLG.DoModal() != IDOK)return;
}
0031デフォルトの名無しさん
2009/09/07(月) 18:42:07おそらく問題は、示されたコード以外の場所にある
003230
2009/09/07(月) 18:57:41をコメントアウトすると問題なく動いていたのでここがだめなのかと思っていたのですが…
ダイアログウィンドウがきえてもプログラムが終了しきれてないのはどういったのが考えられるのでしょうか
003330
2009/09/07(月) 19:11:50んーなんなんだろ…
そして何故かボタンをダブクリしても関数つくれなくなった…クラスウィザードとかいうのが立ち上がる…
0034デフォルトの名無しさん
2009/09/07(月) 19:27:17何を根拠として、こう判断したのかな?
0035デフォルトの名無しさん
2009/09/07(月) 19:30:39画面下部のウォッチと出力のウィンドウが残ったまま
タスクマネージャでみるとtest.exeが起動中
の2点からです.
そして今ダイアログのボタンとか配置する画面で
ボタンをクリックして右のプロパティのところを雷マーククリックして管理イベント開きたいのに
そこが真っ白になってて操作できないという新しい問題が…
作ったボタンダブルクリックしてもMFC クラスウィザードとかいうのが立ち上がるし…
0036デフォルトの名無しさん
2009/09/07(月) 21:25:48プロジェクトのフォルダにある
*.ncb
*.suo
*.user
を一度削除してみろ。
0037デフォルトの名無しさん
2009/09/07(月) 22:17:51return の前に EndDialog を明示的に呼び出す必要がある。
これはモーダルダイアログのウィンドウプロシージャはOSの内部にあるからだ。
(アプリケーションのウィンドウプロシージャがアプリ自身の中にあるのと異なるという意味ネ)
で、MFCにもCDialog::EndDialogがあり、OKとキャンセルではデフォルトで呼ばれるけど
それ以外の場所から終わるときにはこれを呼ぶ必要があるとmsdn様が…
0038デフォルトの名無しさん
2009/09/07(月) 22:21:550039デフォルトの名無しさん
2009/09/08(火) 16:33:28消したら関数の追加などはできるようになりましたありがとうございます.
>>37
OK キャンセル などのボタンは最初に出来ているものでやってます.
ダイアログの×をクリックしても終わらないみたいです.
0040デフォルトの名無しさん
2009/09/08(火) 16:44:12スタックトレースみるとどうなってるよ?
0041デフォルトの名無しさん
2009/09/08(火) 16:59:51VS.NET 2005ですが…
google-glogとかいうのいれなきゃむりなんかな?
0042デフォルトの名無しさん
2009/09/08(火) 17:02:000043デフォルトの名無しさん
2009/09/08(火) 17:12:032つファイル名取得して画像の合成とかやってるんですが
画像の合成の関数とかは普通に動くんですよね.
ただダイアログのOKボタン押してもexeが終わらないと….
0044デフォルトの名無しさん
2009/09/08(火) 17:18:44>画像の合成の関数とかは普通に動くんですよね.
問題なのはこのあたり以降のコトだろうから、>>31 だと言っている。
回答者はエスパーじゃないんだぞ。
0045デフォルトの名無しさん
2009/09/08(火) 17:47:05上にかいたようなものでなく
最初からプログラムにかいておいて上記の関数を呼び出さないでやってみると
処理が終わった後OKボタンをクリックすると無事にexeが終了しました.
ファイルネーム取得関数になんかしらあるとしか思えないのですが…
んでもってファイルネーム取得関数を後半部分コメントアウトして
どの行を行うと終了しないかやってみたところ
if(myDLG.DoModal() != IDOK)return;
を書くと終了しなくなってしまうようでした….
0046デフォルトの名無しさん
2009/09/08(火) 17:54:57>>30 にはそのあたりのことが書かれていないんだが。
0047デフォルトの名無しさん
2009/09/08(火) 17:55:56{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
//ファイルダイアログを表示してファイル指定する
CFileDialog myDLG(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"AVIファイル(*.AVI)|*.AVI||");
�@
}
void CtesthaloDlg::OnBnClickedButton6()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
filename1=("C:\\Documents and Settings\\…\\videocamera3.avi");
filename2=("C:\\Documents and Settings\\…\\videocamera4.avi");
gousei(filename1,filename2);
}
ならOKで�@のところにif(myDLG.DoModal() != IDOK)return;をいれると終了しないと言った感じ
なんか複合的に問題が発生してそうでエスパーじゃなきゃむりそうですね…
一回プロジェクト作り直してみて確認してみようかな
0048デフォルトの名無しさん
2009/09/08(火) 17:58:050049デフォルトの名無しさん
2009/09/08(火) 18:02:33今はコメントアウトされてます
本来なら画像を取り込んでピクチャーコントロールに表示する感じです.
>>48
やっぱりDoModalの問題じゃなさそうですね…
プロジェクト作り直してやってみます
0050デフォルトの名無しさん
2009/09/08(火) 18:29:06新しいプロジェクトで
>>30作る
終了できた!(ボタン1)
二つ目のボタン作る
こっちでも>>30まではできたので画像読み込みもやる
やっぱ終了しない…
>>30まで戻すが何故か終了せず
いやな予感してボタン1を試してみるとボタン1も終了しなくなってた
なんだろう.なんかデバック情報が変な事になるんだろうか
ボタン1については出来た後いじってないのになぁ
エスパーじゃないと無理そうなのであきらめることにします.
0051デフォルトの名無しさん
2009/09/08(火) 18:37:150052デフォルトの名無しさん
2009/09/08(火) 19:31:390053デフォルトの名無しさん
2009/09/09(水) 12:00:350054デフォルトの名無しさん
2009/09/09(水) 18:58:50リンクエラーとなるのですがなぜでしょうか?
#include <afxwin.h>
class CMyWindow : public CFrameWnd
{
public:
CMyWindow();
};
CMyWindow::CMyWindow()
{
Create(NULL, "猫でもわかるMFC", WS_OVERLAPPEDWINDOW);
}
class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMyWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMyApp MyApp;
エラー
error LNK2019: 未解決の外部シンボル __endthreadex が関数 "void __stdcall AfxEndThread(unsigned int,int)" (?AfxEndThread@@YGXIH@Z) で参照されました。
error LNK2019: 未解決の外部シンボル __beginthreadex が関数 "public: int __thiscall CWinThread::CreateThread(unsigned long,unsigned int,struct _SECURITY_ATTRIBUTES *)" (?CreateThread@CWinThread@@QAEHKIPAU_SECURITY_ATTRIBUTES@@@Z) で参照されました。
0055デフォルトの名無しさん
2009/09/09(水) 19:19:16プロジェクトの設定が間違っている。
005754
2009/09/09(水) 21:38:46アプリケーションの設定でWindowsアプリケーション、空のプロジェクトで設定しているのですが
どこが間違いなのでしょうか?
0058デフォルトの名無しさん
2009/09/09(水) 21:45:18おまえウザイな。
自分で勉強するこ覚えろよ、屑
0059デフォルトの名無しさん
2009/09/09(水) 21:48:44参考にしている「猫」のページに書いてある。
0061デフォルトの名無しさん
2009/09/09(水) 22:23:41AでnewしたデータをBに渡して、Bが使い終わったらBの中でdeleteしています。
そうするとBがdeleteした時にheapエラーで落ちるのですが。
どうしてなのか、全く解りません。
Aの中でdeleteしているような個所やB内で2度deleteを実行しているような所
初歩的なバグはありません。
教えて下さい
0062デフォルトの名無しさん
2009/09/09(水) 22:45:01A:「作ったよ」
B:「ありがとう。・・・使い終わったから削除するね♪」
A:「・・・私が作ったのに勝手に削除しないでよ!この甲斐性なしっ!」
良い例
A:「作ったよ」
B:「ありがとう。・・・使い終わったよ♪」
A:「ん、じゃ削除するねっ」
0063デフォルトの名無しさん
2009/09/09(水) 23:08:38ふつーに特になんの経験もなく気持ち悪いと思わないのか?
センスねぇなマジでw
これ結構経験ある奴でもやるんだよね
manko(new chinko);
みたいにnewで作ったもんしか引数うけつけねーようなクラス書くキチガイ
ポインタで渡すと中で強引にdeleteしようとしやがるのw
なんでこんなもん作るんだマジでw
センス0野郎の書くPGは本当にわからないw
0064デフォルトの名無しさん
2009/09/09(水) 23:12:50新しいGDIオブジェクトを生成したとき
…などなど、MFC(というよりWin32APIのせいなんだろうが)は
RAIIの原則をしばしば無視する。
だからその感覚が染み付いている人は
マルチスレッドについても
作る場所と壊す場所が別々で当たり前と感じてしまうのかもしれない。
っていうか、MFCはC++的に見るとキモい使わせ方するライブラリ多いよね。
0065デフォルトの名無しさん
2009/09/09(水) 23:20:55バグがあるんじゃね?
>>62
組み込みでOS使ってたりするとタイミングとか生存期間が非常にしびやな時が多くて
タスク同士の同期をとってたりすると、もうグダグダな〜時が多いから
悪い例の方を使う事が多い
ウィンドウズの場合は、new、deleteする代わりにvectorとかStringとか使って
データの完コピする場合が多いからね〜
0066デフォルトの名無しさん
2009/09/09(水) 23:32:29ウィンドウズも昔はCPU、ソフトが非力だったから相手に後処理を任せて終わりと
昔からの流れが残ってるんだと思ってる。
マルチ・スレッド/タスクで、相手が使い終わったのを待ったりとか
意識しようとすると無駄な時間が多くなる。
0067デフォルトの名無しさん
2009/09/09(水) 23:47:51--
if (pCombo->getCurSel()) {
pCombo->setCurSel(pCombo->getCurSel() - 1);
pCombo->deleteString(pCombo->getCurSel() + 1);
} else {
pCombo->setCurSel(pCombo->getCurSel() + 1);
pCombo->deleteString(pCombo->getCurSel() - 1);
}
--
私みたいにXlibの時代から書いている人間にとって、値を取得してからセットして
もう一回取得するなんてどう見ても待たされそうな処理はなんとももにょってしまう。
それも然り乍ら、なんとも胡乱な振る舞いをさせようとすることよ。
彼奴の頭の中を覗いてみたくもあり、覗きたくなくもあり。
0068デフォルトの名無しさん
2009/09/10(木) 00:05:550069デフォルトの名無しさん
2009/09/10(木) 00:20:59まともな経験がある人ならば、どれが良くてどれが悪いとは安易には言えないはず。
どこで誰がどう削除するかはそのシステムに合わせてインターフェースを
きっちり決めとけば良い話。
A:「頼まれていた会議の書類を作成して、印刷しておきました。」
B:「ありがとう」
↓
(B会議終了)
↓
B:「書類返すよ」
A:(てめーで、捨てろや死ね)
0070デフォルトの名無しさん
2009/09/10(木) 00:32:490071デフォルトの名無しさん
2009/09/10(木) 00:35:430072デフォルトの名無しさん
2009/09/10(木) 00:48:48俺はくみこみ知らんが、ポインタ投げて終了の仕組みも作る時もある
こっちはもう使わないのに相手の顔色見ながら、返却待ちのタイミングを
伺うなんてアホらしい
以上、終了
0073デフォルトの名無しさん
2009/09/10(木) 01:03:21色々とお騒がせして、申し訳ございません
私の考えは、>>72さんと同じ考えでした
それぞれが非同期で動いてる場合、同期をとる仕組みを入れるのが面倒ですし
もう必要ないから、B側で削除してもらっていました
もう少し詳しく言うとスレッドが10個ほどあり、使った奴が削除すると言った仕組みで
動いています
AはBに渡す
Bは使わないならCへ、CはDへと・・・
だからこそ、使った人に削除して貰いたかったのです
それとvectorの話が出ていましたが、vectorとかを使ってデータをコピーしても
構わないと言えば構わないのですが
データサイズが大きい時はそれなりのサイズになってしまうので
データをコピー(newして代入)なんて言う無駄な処理とメモリのフラグメンテーションを
起こすような処理はさせたくなかったのでポインタでやってました
0074デフォルトの名無しさん
2009/09/10(木) 06:35:29>こっちはもう使わないのに
かどうかはわからないよね?
もし、使いたくなっとしても使わないんじゃなくて使えない状態じゃん
しかも、それがわかるのは組んだ自分だけだろ?
下手糞実装ってことは認識して使えよ
0075デフォルトの名無しさん
2009/09/10(木) 08:56:320076デフォルトの名無しさん
2009/09/10(木) 18:36:15呼び出し履歴のことでよかったんですか教えてくださってありがとうございます.
ntdll.dll!7c94e514()
[下のフレームは間違っているか、または見つかりません。ntdll.dll に対して読み込まれたシンボルはありません。]
ntdll.dll!7c94df5a()
kernel32.dll!7c8025cb()
kernel32.dll!7c802532()
ole32.dll!769f5532()
ole32.dll!769e3551()
ole32.dll!769e34c1()
ole32.dll!769d4ecc()
msvcr80.dll!78132bd9()
ole32.dll!76984212()
> highgui110.dll!_CRT_INIT(void * hDllHandle=0x10000000, unsigned long dwReason=4038497417, void * lpreserved=0x00000001) 行 412 + 0x9 バイト C
highgui110.dll!__DllMainCRTStartup(void * hDllHandle=0x10000000, unsigned long dwReason=0, void * lpreserved=0x00000000) 行 512 + 0x8 バイト C
highgui110.dll!_DllMainCRTStartup(void * hDllHandle=0x10000000, unsigned long dwReason=0, void * lpreserved=0x00000001) 行 462 + 0x11 バイト C
上から数行だとこんな感じで highfui110〜の3行が黒文字,他灰色文字になってました.
.dllばっかりならんでてよくわからないですが
0077デフォルトの名無しさん
2009/09/10(木) 19:06:41だからなんだよ。
いい加減、ウザイから氏ね
0078デフォルトの名無しさん
2009/09/10(木) 22:38:32音声のRTPパケットだから二度と使わないし、使いたくなる事は100%ありえない
使いたい頃に使ったら、プロトコルに違反するし、音声がめちゃくちゃになる
二度と使えないのは、仕様書にしてあるから、チーム全員知ってる
なんで、そんなに自分の考えが完璧だなんて、ゴリ押しするんだ
お前はどんだけ偉いんだ
どうせ、お前みたいな奴なんて、そこらへんの派遣野郎だろ
0079デフォルトの名無しさん
2009/09/11(金) 11:00:370080デフォルトの名無しさん
2009/09/13(日) 15:47:55生きてて恥ずかしくないの??
早く死ねば良いのに
一番自分が下手くそなのにWWWWWWWWWWWWWWWWWWW
0081デフォルトの名無しさん
2009/09/13(日) 16:26:24(訳:論破されちゃった!くやしい!ビクッビクッ!)
笑
0082デフォルトの名無しさん
2009/09/15(火) 12:13:25ってやると落ちる。。。
これってダメ?
0083デフォルトの名無しさん
2009/09/15(火) 12:18:51OnInitialUpdateが呼ばれるのは一度だけじゃない。
よって、何度も作ろうとするからエラーになる。
0084デフォルトの名無しさん
2009/09/15(火) 12:26:37ありがとう。
なるほどねー…。
久々にMFCやったから気づかなかった。。。
とりあえず
if( !cToolTipCtrl )
{
m_cToolTipCtrl.Create( this );
}
ってしたらいけた!
0085デフォルトの名無しさん
2009/09/16(水) 17:04:34IPアドレスコントロール(CIPAddressCtrl)の背景色を変更したいのですが、
CIPAddressCtrlのサブクラスとしてCMyIPAddrCtrlを作成し、
以下のようにコンストラクタとOnCtlColorをオーバーライドしても、
背景の一部の色しか変更できません(リンク先の画像を参照ください)。
CMyIPAddrCtrl::CMyIPAddrCtrl()
{
m_Brush.CreateSolidBrush(RGB(255, 0, 0)); // m_Brushはヘッダーで「CBrush m_Brush;」と宣言済み
}
BEGIN_MESSAGE_MAP(CMyIPAddrCtrl, CIPAddressCtrl)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
HBRUSH CMyIPAddrCtrl::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CIPAddressCtrl::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetBkColor(RGB(0, 255, 0));
pDC->SetTextColor(RGB(0, 0, 255)); // 試しにテキスト色も変更しています
return m_Brush;
}
結果:ttp://nukkorosu.80code.com/img/nukkorosu11151.png
上記画像で白色になっている部分の色を変更するにはどうしたらよいでしょうか?
0086デフォルトの名無しさん
2009/09/16(水) 21:16:40まあ、普通のテキストボックスに変えてしまうのが一番だろうね。
0087デフォルトの名無しさん
2009/09/16(水) 21:26:08IP アドレスコントロール は複数のウィンドウからできているので、そのコードでは
子ウィンドウであるエディットコントロールの部分しか変更できない。
白い部分の色を変えるには OnPaint() をオーバーライドして自前で背景を塗りつぶすしかないが、
このときは数値の間にあるドットも自前で描画する必要がある。
>m_Brush.CreateSolidBrush(RGB(255, 0, 0)); // m_Brushはヘッダーで「CBrush m_Brush;」と宣言済み
>pDC->SetBkColor(RGB(0, 255, 0));
・・・背景色と背景ブラシの色が違うなんて。
0089デフォルトの名無しさん
2009/09/17(木) 00:48:35ぐぐったらVirtualAllocExとLVM_GETITEMTEXTメッセージを組み合わせれば良いとわかったので、以下を繰り返して取得しています。
相手ウィンドウのHWNDからpidを求め、PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITEでOpenProcessする
↓
VirtualAllocExで、アドレス指定はNULL、MEM_COMMIT、PAGE_READWRITE、サイズは文字列バッファ(64バイト固定長)+sizeof(LVITEM)ぶんのメモリを確保
↓
ローカル変数でLVITEM変数を宣言、ゼロクリアした後以下を代入
iItem,iSubItem←必要なマス目の座標(いつも同じ場所)
pszText←上記確保したメモリ+sizeof(LVITEM)
cchTextMax←64
↓
そのLVITEM変数のポインタから確保した先頭アドレスにWriteProcessMemoryする
↓
LVM_GETITEMTEXTをSendMessageする
↓
確保したメモリの先頭+sizeof(LVITEM)を64バイトReadProcessMemoryして文字列ゲット
↓
確保した先頭アドレスを指定、MEM_RELEASEにてVirtualFreeExする
↓
プロセスハンドルをCloseHandleする
実際、おおむねこれで取得できているのですが、数十回ほど取得を繰り返すと相手側が「Visual C++ RunTime Error! Abnormal Program Termination」と表示して落ちてしまいます。取得するたびSleep(100)などしてみましたが駄目でした。どなたか解決策をご存知ないでしょうか?
0090デフォルトの名無しさん
2009/09/17(木) 01:17:53自分の書いた処理内容をよく見て、デバッガで追え。
悪いのはおまえだ。
009185
2009/09/17(木) 10:29:06ご回答ありがとうございます。
挙動から入力部分のウィンドウの下にもう一個ウィンドウがあるように
見えたのですが、やっぱりそうだったのですね…。
OnPaintのオーバーライドまでするとなるとちょっと手間なので、
おっしゃるとおりテキストボックスで実装してみたいと思います。
> ・・・背景色と背景ブラシの色が違うなんて。
このほうが何を書いたらどこが変わるかわかりやすいかなぁと思ったので(^^;
実際には同じ色で塗りつぶします。
009285
2009/09/17(木) 20:25:10あまり考えずに>>85に下記のコードを追加したら、それっぽいのができました。
BEGIN_MESSAGE_MAP(CMyIPAddrCtrl, CIPAddressCtrl)
ON_WM_CTLCOLOR()
ON_WM_PAINT()
END_MESSAGE_MAP()
void CMyIPAddrCtrl::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
dc.FillSolidRect(rect, RGB(255, 255, 0));
int w = rect.Width() / 4;
for (int i = 1; i < 4; i++) {
dc.SetPixel(w * i + 1, 11, RGB(0, 0, 0));
dc.SetPixel(w * i + 1, 12, RGB(0, 0, 0));
}
}
これでなんとか目的の動作を組み込めそうです。本当にありがとうございました!
0093デフォルトの名無しさん
2009/09/17(木) 21:03:24あーフォントサイズもやばいかなw
0094デフォルトの名無しさん
2009/09/18(金) 01:16:05もうちょっと真面目に計算すべしw
>dc.SetPixel(w * i + 1, 11, RGB(0, 0, 0));
>dc.SetPixel(w * i + 1, 12, RGB(0, 0, 0));
RGB( 0,0,0) → ::GetSysColor( COLOR_WINDOWTEXT)
0095デフォルトの名無しさん
2009/09/25(金) 16:11:360096デフォルトの名無しさん
2009/09/25(金) 16:26:21_CrtSetBreakAlloc() を呼んでいるだけだから、使い方はそっちを参照すればよろし。
0097デフォルトの名無しさん
2009/09/25(金) 16:39:54おぉ、すばらしい!載ってました!
サンクスです。^^
0098デフォルトの名無しさん
2009/09/28(月) 12:34:57残り時間を保持したまま一時停止や再開する方法はありますでしょうか。
別のダイアログをDoModal()で出して待っている最中も
WM_TIMERが発生するようなので、その間はタイマを止めておきたいのですが、
いったんKillTimer()で止めてしまうと待ち時間が戻ってしまい、
タイミングによっては延々と発生しない状態になってしまいます。
0099デフォルトの名無しさん
2009/09/28(月) 13:02:50もっとも簡単な方法は、DoModal() する前にある種のフラグをたててタイマー処理を回避し、
制御が戻ってくればタイマー処理を復帰させればいい。
CMyDialog dlg;
m_bDisableTimer = TRUE;
dlg.DoModal();
m_bDisableTimer = FALSE;
CxxWnd::OnTimer( ...)
{
if ( m_bDisableTimer) return;
// ToDo...
}
010098
2009/09/28(月) 15:15:03ありがとうございます。
やっぱりそういう方法になるのですね。
この場合もダイアログ表示のタイミングによっては
ToDoのところまで行かない状態が続いてしまいますが、
タイマでやっている以上は避けられないのかな。
0101デフォルトの名無しさん
2009/09/28(月) 16:22:33>ToDoのところまで行かない
ダイアログが表示された時点( WM_INITDIALOG を処理する時点)で、
m_bDisableTimer = TRUE; にする。
0102デフォルトの名無しさん
2009/09/28(月) 21:21:33>>74は、ハヨー死ね、
0103デフォルトの名無しさん
2009/09/29(火) 00:43:13タイマー+カウンターでやる、という手もある。
例えば5000msなら500ms×10カウントとか。
で、OnTimerはこんな感じで。
if ( (counter += (counter < 10)) < 10 ) return;
if ( m_bDisableTimer ) return;
// なんか色々処理
counter = 0;
WM_TIMER直後かつ500ms以内にダイアログを開きなおす、
とかやらなければ実行されるはず。
010498
2009/09/29(火) 09:28:18>>103
ありがとうございます。
自腹でカウンタ処理をやれば、一時停止に近いことはできますね。
タイマ自体を一時停止する方法は無さそうですし、
タイマ+モーダルダイアログって、
やってることはモードレスダイアログっぽくなってしまうんですね。
うかつにメッセージボックスも出せないってことだったのか。
0105デフォルトの名無しさん
2009/09/29(火) 09:36:410106デフォルトの名無しさん
2009/09/29(火) 14:12:42↓ 知ってる?
The WM_TIMER message is a low-priority message.
The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue.
0107デフォルトの名無しさん
2009/10/05(月) 20:56:34Visual Studio 2008 MFC FeaturePackを調査していますが、
追いきれない箇所があったので投稿します。
MFCのSDIで作成したフレームワークで
CFrameWndのメンバにm_wndMenuBar(CMFCMenuBar型)ってのがあります。
これから、m_wndMenuBar.GetHMenu()でメニューハンドルを取得し
DeleteMenu、EnableMenuItem、ModifyMenuなど
今までどおりCMenuと同等な操作をしても、
表示されているメニューバーに変化が無いのです。
何かやり忘れの処理とかあるんでしょうか?
それとも、そういうものなんでしょうか?
※たとえば、DeleteMenuの実行結果はTRUEを返し、
メニューバー[表示(V)]→[ツールバーとドッキング ウィンドウ(T)]→[カスタマイズ...]の
カスタマイズダイアログのコマンドからは消えていますが、
メニューバーの一覧からは消えないのです・・・
何か、コツがあるんでしょうか?
知っている方、情報を願います・・・
0108デフォルトの名無しさん
2009/10/05(月) 21:40:23CMenuをいじった後で、CMFCMenuBar::CreateFromMenuで戻してやると反映するけど。
0109107
2009/10/05(月) 23:53:12{
HMENU hMenu = m_wndMenuBar.GetHMenu();
if (hMenu){
BOOL bRet = ::DeleteMenu(hMenu, ID_EDIT_CUT, MF_BYCOMMAND);
m_wndMenuBar.CreateFromMenu(hMenu);
}
と入れてみたけど変化なし。
OnCreate時じゃダメなんですかね?
0110デフォルトの名無しさん
2009/10/06(火) 00:08:43ほんと馬鹿は始末に負えないな。
ここまで教えてもらって、なんで自力で解決しようとしないのか。
できない馬鹿だからこそ質問を繰り返すんだろうが、そんな自分は屑だと自覚しろ。
0111デフォルトの名無しさん
2009/10/06(火) 00:25:45>BOOL bRet = ::DeleteMenu(hMenu, ID_EDIT_CUT, MF_BYCOMMAND);
言っておくが、ポップアップメニューの項目を削除したいなら CMFCMenuBar をいじってもダメ。
CMFCPopupMenu::RemoveItem() を使う。
0112デフォルトの名無しさん
2009/10/06(火) 00:35:19ホントMFCって意味不明なとこあるものな
正直、はじめはなんかのサンプルをコピペして作っていくしかないと思うな
んでメッセージの流れとか覚えたらそういうのやっとチョボチョボ手が出せるようになる
1度動くもんとコードを誰かに一致させてもらわない限り
人に聞くしかねぇだろうな
俺もサンプル漁るたびにそう思うわ
自分でヘルプ読みながら研究すると大抵糞くだらないことでも1日作業
このフレームワークだりぃよw
最近、VBでは楽にできるらしいエクセルなんかの機能を組み込め的要求がウゼェ
0113デフォルトの名無しさん
2009/10/06(火) 02:06:36ドキュメントも読めない、サンプルソースもおえないアフォは氏ねば?
ヘルプ読みで1日とか、調べ方もしらないんじゃその方がいいだろ。
0114デフォルトの名無しさん
2009/10/06(火) 08:00:34いざやらせてみると時間かかる人ばっかりだったからお前も似たようなもんだと思う(笑)
微妙なところで時間くうだろ?
0115107
2009/10/08(木) 08:20:16どうも、メニューカスタマイズ情報とか保持してるようですね・・・
みなさまありがとうございます
0116デフォルトの名無しさん
2009/10/13(火) 22:10:53オートメーション?
であれば、MFC関連ドキュメント探すよりVBAのヘルプ見た方が速いよ
0117デフォルトの名無しさん
2009/10/14(水) 23:29:27英語版と比べると情報省きすぎ。^^;;;;;;;;;;;;;;;;;;;;;オコルゾ
0118デフォルトの名無しさん
2009/10/15(木) 02:10:21英語版読みなさい^^;;;;;;;;;;;;;
0119デフォルトの名無しさん
2009/10/15(木) 11:30:200120デフォルトの名無しさん
2009/10/15(木) 21:02:37ファイルの拡張子を設定するには、どのような方法があるでしょうか?
0121デフォルトの名無しさん
2009/10/15(木) 21:13:36フレームワークは、CDocument で定義されたインターフェイスを使って、ドキュメントを操作します。
0122デフォルトの名無しさん
2009/10/15(木) 21:47:49CWinApp::OnFileOpen() と CDocument::OnFileSaveAs() を
好きなようにオーバーライドすりゃいい。
0123デフォルトの名無しさん
2009/10/15(木) 23:11:51ワークスペース新規作成時のメニューをよく観察する事
>>122
CDocument::OnFileOpen()と CDocument::OnFileSaveAs()じゃね?
0124122
2009/10/16(金) 00:11:13>CDocument::OnFileOpen()
残念だが、こういうメソッドはない。
CDocManager::OnFileOpen() と書きたかったのかもしれないが、
これとて、ファイルオープンダイアログを表示して得られたファイル名を CWinApp::OpenDocumentFile() に
渡しているだけなので、CWinApp::OnFileOpen() 内でこの操作をすれば、回り道する必要は何もない。
0125デフォルトの名無しさん
2009/10/16(金) 00:14:34なんかいいことあるの?
0126デフォルトの名無しさん
2009/10/16(金) 01:31:36{
『ドキュメント/ビュー アーキテクチャが適さない場合もあります。たとえば、次のような場合です。
・C で記述された Windows 対応のアプリケーションを移植していて、アプリケーションにドキュメント/ビューのサポートを
追加することよりも、移植作業自体を完了することの方が先である場合。
・簡単なユーティリティを作成していて、ドキュメント/ビュー アーキテクチャは不要と判断できる場合。
・元のコードで既にデータ管理とデータ表示が混在している場合。』
}
MFCのドキュメント・ビュー・アーキテクチャがいい悪いは別にして、
MVC的な手法のほうがコードがごちゃごちゃしなくていい場合も多々。
0127デフォルトの名無しさん
2009/10/16(金) 06:21:17アプリケーションはサポートするドキュメントの型それぞれに 1 つのドキュメント テンプレートを持ちます。
たとえば、アプリケーションがスプレッドシート (表計算) とテキストのドキュメントをサポートしていれば、
アプリケーションは、2 つのドキュメント テンプレート オブジェクトを持ちます。
それぞれのドキュメント テンプレートは、対応する型のすべてのドキュメントの作成、管理を行います。
ドキュメント テンプレートは、ドキュメントの型とともに使われるリソース
(メニュー、アイコン、アクセラレータ テーブルなど) の ID を保持します。
ドキュメント テンプレートは、またドキュメントの型についての付加情報を持つ文字列も持っています。
これらは、ドキュメントの型の名前 (例 : "Worksheet")、ファイルの拡張子 (例 : ".xls")、そしてオプションで、
ファイル マネージャや OLE などのユーザー インターフェイスで使われる文字列などを含みます。
0128デフォルトの名無しさん
2009/10/16(金) 06:27:19VCだって設計微妙だしなw
ええーwそこでこの構造使うの〜?w的なw
0129デフォルトの名無しさん
2009/10/16(金) 14:08:29やってることは結局まったく同じですか?
それとも、効率や安全などの面でこっちを使うべきとかありますか?
0130デフォルトの名無しさん
2009/10/18(日) 17:49:00UI付きツール作ってくれってときにね。いろんなC++のSDK使うから
C#とかも使えない。
それよりも困ってるのがリソースかな。特にアイコン。
もっとカッコいいのとか、統一されたデザインとか要求されて困る。
ここはアニメーションさせてくれとか言われると泣きたくなる。
みんなはどうしてる?有料でもいいんでビジネス用途で使える
アイコン集ってものはないかな?ぐぐればいろいろ出てくるけど
どうにも種類が足りなくて。
0131デフォルトの名無しさん
2009/10/18(日) 18:28:44種類は豊富なんだが、商用利用となると・・・。
http://www.iconspedia.com/
0132デフォルトの名無しさん
2009/10/18(日) 19:40:450133デフォルトの名無しさん
2009/10/19(月) 01:23:09ここは知らなかったな〜。ありがと。
>>132
パッケージは販売終了してるね。絵 単品高すぎる。
ttp://jp.infragistics.com/netadvantage/icons.aspx#Overview
ここのがなんかパッケージでなんかよさげなんだけど、サンプル見ると
同じアイコンにショートカット矢印みたいのが付いたのも含めて数に
カウントしてるみたいなんで、11000種類って書いてあっても実際には
1/10くらいなんだけろうなって感じがする。
0134デフォルトの名無しさん
2009/10/20(火) 19:53:46使い捨てツールを作る場合に便利だな。あんまし余計な事を考えなくて済む。
本体となるとさすがに自作ライブラリを優先するけど。
0135デフォルトの名無しさん
2009/10/20(火) 22:10:55今までupg15kで便利なMFCが使えてたけど
これからはupg55k必要。ますます絶滅方向だ。
0136デフォルトの名無しさん
2009/10/23(金) 14:38:26デストラクタでリリースされるにもかかわらず、
this->ReleaseDC(&dc);としたらどうなりますか?
逆にリークの原因になったりしますか?
0137デフォルトの名無しさん
2009/10/23(金) 15:23:09答はNO。
デストラクタでの ::ReleaseDC() が失敗するだけ。
0138デフォルトの名無しさん
2009/10/26(月) 01:39:340139デフォルトの名無しさん
2009/10/26(月) 02:07:56CWnd::GetDC, CWnd::ReleaseDC
0140デフォルトの名無しさん
2009/10/26(月) 02:23:37CWnd::ReleaseDC(pDC);
とするとコンパイルできるのですが、実行するとエラーが出てしまい困ってるんです。
0141デフォルトの名無しさん
2009/10/26(月) 02:35:000142デフォルトの名無しさん
2009/10/26(月) 10:09:16スタティックな関数じゃないんだし、CDialogはCWndの派生クラスだし
そのままGetDC()と書けるだろう
0143デフォルトの名無しさん
2009/10/26(月) 20:36:50理屈としてはCWnd::GetDC()でも通るんじゃないか?
実験してないけど。w
0144デフォルトの名無しさん
2009/10/26(月) 21:04:24通るよ。だから、あえてそこは指摘せずに「原因は別にある」と書いた。
0145デフォルトの名無しさん
2009/10/27(火) 21:40:39最小化したときに右下では無く、左下にアニメーションさせることって可能?
なんかコツあるんですかね?
0146デフォルトの名無しさん
2009/10/27(火) 21:58:520147145
2009/10/27(火) 22:02:06左下を右下への間違い
0148145
2009/10/27(火) 22:11:10MFCでいじっています。
MFCのCMainFrame::OnSize(UINT nType, int cx, int cy)にて、
苦戦中。
0149デフォルトの名無しさん
2009/10/28(水) 08:38:290150デフォルトの名無しさん
2009/10/28(水) 09:53:220151デフォルトの名無しさん
2009/10/28(水) 09:54:330152デフォルトの名無しさん
2009/10/28(水) 11:17:28WS_EX_APPWINDOWを外し、WS_EX_TOOLWINDOWを加える
んで、最小化する手前で
// タスクバーのハンドル
HWND hTaskbar = ::FindWindow(_T("Shell_TrayWnd"), NULL);
// タスクトレイのハンドル
HWND hTasktray = ::FindWindowEx(hTaskbar, NULL, _T("TrayNotifyWnd"), NULL);
hTasktrayにGetWindowRect使えば位置がわかる。
※隠れていてもその位置が求まる。
あとはGetWindowPlacementで現在値を取得し、
WINDOWPLACEMENTのptMinPositionを差し替え、
flagsにWPF_SETMINPOSITIONをセット。
SetWindowPlacementで更新って感じ
0153デフォルトの名無しさん
2009/11/04(水) 23:22:17std::string は使わない派ですか?
0154デフォルトの名無しさん
2009/11/04(水) 23:25:13質問です、文字列を扱う場合MFC使いの皆さんは、CString またはchar* なのでしょうか?
std::string は使わない派ですか?
0155デフォルトの名無しさん
2009/11/05(木) 10:02:510156デフォルトの名無しさん
2009/11/05(木) 10:15:000157デフォルトの名無しさん
2009/11/05(木) 10:42:57まぁ個人で作ってるものだからだけど
0158デフォルトの名無しさん
2009/11/06(金) 19:01:20レスサンクスです
stl を多用したtemplate 非MFCのライブラリがあるのですが
そのライブラリへCString を渡す場合、何か注意すべきところがあれば教えて頂けないでしょうか?
0159デフォルトの名無しさん
2009/11/06(金) 20:01:16stringへのらっぱー書く方が良い
0160デフォルトの名無しさん
2009/11/06(金) 20:09:24そのライブラリがconst char * を受け取るならそのまま渡していいと思う。
そのライブラリがstd::stringを受け取るなら、std::stringのラッバを用意した方がいい。
0161デフォルトの名無しさん
2009/11/06(金) 21:07:22ありがとう。
0162デフォルトの名無しさん
2009/11/07(土) 08:11:44ラッパークラスを意識して書いたことが無いので、勘違いをしている可能性があるので
駄目出し、及びご指導お願いします。
/**
* @brief std::stringからCString(MFC)へ変換
* @date 2009/11/7
* @param[in] std::string str
* @return str.c_str()
*/
class ConvertToCString {
public:
ConvertToCString() : str_("") {}
const CString operator()(std::string str) const {return str.c_str();}
private:
std::string str_;
};
/**
* @brief CString(MFC)からstd::stringへ変換
* @date 2009/11/7
* @param[in] CString cstr
* @return static_cast<LPCTSTR>(cstr)
*/
class ConvertTostring {
ConvertTostring() : cstr_("") {}
const std::string operator()(CString cstr) const {return static_cast<LPCTSTR>(cstr);}
private:
CString cstr_;
};
0163デフォルトの名無しさん
2009/11/07(土) 10:43:16std::string str = "CString_convert";
CString cstr = ConvertToCString(str);
cstr = "std;;string_convert";
str = ConvertTostring(cstr);
こうすると
error C2440: '初期化中' : 'ConvertToCString' から 'ATL::CStringT<BaseType,StringTraits>' に変換できません。
何処が悪いのでしょうか?
CString cs("Hello");
std::string s((LPCTSTR)cs);
std::string ss("Hello");
CString ccs(ss.c_str());
これは動くので、簡単にできると思ったんですが・・・・
0164デフォルトの名無しさん
2009/11/07(土) 15:08:39一応、↓で出来るとは思うが、どうせ c_str() の呼び出しか LPCTSTR へのキャストで済むんだから、
わざわざクラスまで作る必要はないと思う。
コードを見た感じだと、Unicode文字セットを使っている訳ではないようだし。
class ConvertToCString {
public:
ConvertToCString(std::string str) : str_(str) {}
operator CString() const {return str_.c_str();}
private:
std::string str_;
};
class ConvertTostring {
public:
ConvertTostring(CString cstr) : cstr_(cstr) {}
operator std::string() const {return static_cast<LPCTSTR>(cstr_);}
private:
CString cstr_;
};
0165デフォルトの名無しさん
2009/11/07(土) 18:33:27ありがとう、やっぱり勘違いしていました^^;
>わざわざクラスまで作る必要はないと思う。
そうですね、自分もそう思います、ただ一点お聞きしたいのですが
ラッパークラスのイメージといいますか、認識はこのような感じでいいのでしょうか?
0166デフォルトの名無しさん
2009/11/07(土) 23:34:49すべてを分かったつもりになる香具師なのか?
0167デフォルトの名無しさん
2009/11/07(土) 23:48:470168デフォルトの名無しさん
2009/11/07(土) 23:59:580169デフォルトの名無しさん
2009/11/08(日) 00:02:110170デフォルトの名無しさん
2009/11/08(日) 23:19:350171デフォルトの名無しさん
2009/11/09(月) 10:14:270172デフォルトの名無しさん
2009/11/09(月) 16:13:440173デフォルトの名無しさん
2009/11/09(月) 18:08:05MFC Feature Packの影響で、レジストリ情報との差異による問題とかでてきたら、
コマンドラインとかで呼び出せる様にした方がいいかもね。
(それこそ、InitInstanceのあの1行の次の行あたりで)
0174デフォルトの名無しさん
2009/11/09(月) 23:46:570175デフォルトの名無しさん
2009/11/10(火) 00:24:480176デフォルトの名無しさん
2009/11/10(火) 00:27:01::OpenThemeData() でテーマハンドルを取得したのち、::DrawThemeBackground() でパーツを描画する。
0177デフォルトの名無しさん
2009/11/10(火) 15:19:08ボタンを押したときにOnButtonで呼ばれる処理を
ボタン押し続けで連続処理させるいい方法ありませんか?
0178デフォルトの名無しさん
2009/11/10(火) 15:34:310179デフォルトの名無しさん
2009/11/10(火) 15:55:05具体的にどんか感じですか?
ボタン押し続けだと1回しかメッセージきませんよね??
連続にできるってことですか?
0180デフォルトの名無しさん
2009/11/10(火) 15:58:530181デフォルトの名無しさん
2009/11/10(火) 16:09:22(1) ボタン押す→WM_LBUTTONDOWNがボタンに飛んでくる。
(2) ボタン放す→WM_LBUTTONUPがボタンに飛んでくる。
→(1) のタイミングでタイマなりを動かして、一定間隔で親にWM_COMMANDを送る。
→(2) のタイミングでタイマを切る。
ボタンを押さえたままウィンドウが非アクティブになるとWM_LBUTTONUPは飛んでこないから
それなりに工夫は必要。
0182デフォルトの名無しさん
2009/11/10(火) 16:21:20もう少しスマートな方法があるといいんですが…
0183デフォルトの名無しさん
2009/11/10(火) 16:23:31ttp://www.codeproject.com/KB/buttons/autorepeat.aspx
評価は微妙だし、非アクティブ対応も甘そうだし、キーボードにも対応していなさそうだけど、
>>181の実装例。
0184デフォルトの名無しさん
2009/11/10(火) 16:32:43見たところ、確かに非アクティブ対応は甘いね。
OnLButtonUp() では、ReleaseCapture() だけ実行すればいい。
その他の処理は WM_CAPTURECHANGED を捕まえて、そこで実行する。
0185デフォルトの名無しさん
2009/11/10(火) 16:34:46割り当て可能なすべてのアイドル時間がボタンダウンのために処理されるから
ものすごい勢いだぞ^^
0186デフォルトの名無しさん
2009/11/10(火) 17:14:52タイマー嫌なら離したメッセージが来るまで永遠にループさせるしかないな。
0187デフォルトの名無しさん
2009/11/10(火) 17:22:440188デフォルトの名無しさん
2009/11/10(火) 17:30:100189デフォルトの名無しさん
2009/11/10(火) 17:47:580190デフォルトの名無しさん
2009/11/10(火) 18:33:100191デフォルトの名無しさん
2009/11/10(火) 23:06:240192デフォルトの名無しさん
2009/11/12(木) 16:03:27その値を取ったあとに追加や削除などの操作を行っても
当初の場所を指す値としてずっと有効のままなのでしょうか?
それとも、CWnd::GetDlgItem()などのように
どこかのタイミングで無効になるのでしょうか?
0193デフォルトの名無しさん
2009/11/12(木) 17:25:250194デフォルトの名無しさん
2009/11/13(金) 09:34:20これはMSDNのどこかに明示されていますでしょうか?
「ブックマークとして使うと、リスト内の位置を保持できます」
という説明はあるのですが、要素を追加したり、
他の要素を削除をしても対象要素のPOSITION値自体は変わらないものなのか、
そのへんの記述を見つけられません。
> GetDlgItem()もまた然り。
CWnd::GetDlgItem()の説明には
「返されるポインタは、一時的なポインタです。
後で使用するために保存しておくことはできません。」
と書いてあり、実際、アイドル時だかどこかで無効になります。
ダイアログクラス内にDDXメンバとして実体があれば常に有効かもしれませんが。
0195デフォルトの名無しさん
2009/11/13(金) 10:28:18だからキーが使えなくなったらキーの意味ないだろ
心配ならソースついてるんだからMFCソース読めよ
0196デフォルトの名無しさん
2009/11/15(日) 23:32:01を作っています。(ウォークマンにmp3をランダムに転送するため)
SHFileOperationAを使ってコピーを行っているのですが、
ダイアログにコピー処理を書いているので、コピー中にダイアログの操作ができません。
コピーの時間が30〜60分と長いので、もどかしいです。
コピー中もダイアログの操作ができるようにするにはどうすればいいでしょうか?
(コピー用のスレッドを作って、そこでコピー処理をすればいい?
0197デフォルトの名無しさん
2009/11/16(月) 00:17:390198デフォルトの名無しさん
2009/11/16(月) 12:31:390199デフォルトの名無しさん
2009/11/16(月) 13:46:350200デフォルトの名無しさん
2009/11/16(月) 13:54:24ビットマップの白色に部分は透過させて表示したいので
ネットで調べた結果以下のプログラムを描いてみましたが
透過になってくれません
何か間違っていますか?正しい方法を教えてください
環境はXPのVS2005(MFC)です
COLORMAP cm;
cm.from = RGB(255,255,255);
cm.to = GetSysColor(COLOR_3DFACE);
m_bmp.LoadMappedBitmap(IDB_BITMAP, 0, &cm, 1);
m_btn.SetBitmap(m_bmp);
0201デフォルトの名無しさん
2009/11/16(月) 15:35:400202デフォルトの名無しさん
2009/11/16(月) 17:18:10VS2008でメニューのフォントが変だったので悩んだ。
http://takabosoft.com/20090812235606.html
にて書いている人がいたが、この人の方法だとOnCreateの時点ではフォント情報が取得できず、メニューが化ける。
http://blog.csdn.net/codewarrior/archive/2008/09/11/2911209.aspx
にて書いている方法なら正しく表示された。
MFCがBCGControlBarを使うようになったから、その対応も使えるのだな。
0203デフォルトの名無しさん
2009/11/16(月) 17:23:33m_wndMenuBar.Createのあとで、
LOGFONT logfont = {0};
::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &logfont, 0);
CMFCMenuBar::SetMenuFont(&logfont);
0204デフォルトの名無しさん
2009/11/16(月) 18:55:37たまたま見つけたコードを意味もわからずいじって見たけど動きません。
だったら関わるだけ時間の無駄。
0205デフォルトの名無しさん
2009/11/16(月) 20:18:38そのコードは、透過ではなく特定の色をボタン表面の色に変更して載せてるだけ。
透過させたかったらCButton::SetImageListを使え。
これならVista以降の徐々に色の変わるようなボタンでも正しく透過で描画される。
0206デフォルトの名無しさん
2009/11/17(火) 14:20:07>この人の方法だとOnCreateの時点ではフォント情報が取得できず、メニューが化ける。
WINVER >= 0x0600 に設定して、そのプログラムを Vista 以前の環境で実行すると
::SystemParametersInfo( SPI_GETNONCLIENTMETRICS,,,) が失敗するというのは知ってる?
0207デフォルトの名無しさん
2009/11/17(火) 21:32:59そのとおり、コピー用スレッドを作れば良い。
また、一個一個が小さいコピーをたくさんやっているなら、
コピーの合間にメッセージループをはさむ方法もある。
メッセージループの具体形はぐぐれば出てくる。
0208デフォルトの名無しさん
2009/11/18(水) 17:37:27その場合は\rつけても改行されてくれません
改行可能なCenterImageって方法ありませんか?
余白を設定できたりも考えましたが見つかりません
オーナードロー以外でなにかいい案ありましたら
お願いします
0209196
2009/11/18(水) 22:16:48ありがとうございました。
>>198
裏で処理をさせるのをワーカースレッドっていうんですね。
>>207
コピーの時にOS標準のコピーダイアログを出したかったので
SHFileOperationAを使ってのコピーです。
コピーは全部SHFileOperationAに任せますので、メッセージループは使いませんでした。
0210デフォルトの名無しさん
2009/11/19(木) 19:13:350211デフォルトの名無しさん
2009/11/19(木) 19:14:42MFCで作るのがいやんなるよ…
0212デフォルトの名無しさん
2009/11/25(水) 19:14:32外部ファイルの読み込みに関してはEDITSTREAMのコールバック関数を設定して出来ましたが、リソースからRTF形式で読み込むのは難しいのでしょうか?
0213デフォルトの名無しさん
2009/11/25(水) 19:33:370214デフォルトの名無しさん
2009/11/25(水) 19:45:46HRSRC hResInfo = ::FindResource( AfxGetInstanceHandle(), MAKEINTRESOURCE( IDF_RICHTXT), RT_HTML);
HGLOBAL hResData = ::LoadResource( AfxGetInstanceHandle(), hResInfo);
DWORD dwData = ::SizeofResource( AfxGetInstanceHandle(), hResInfo);
LPVOID lpData = ::LockResource( hResData);
CString strBuf( reinterpret_cast<TCHAR*>( lpData), dwData/sizeof(TCHAR));
m_wndRichEdit.SetWindowText( strBuf);
0215デフォルトの名無しさん
2009/11/25(水) 20:17:37区切りが表示され、その表示幅を自分で変更できたりしますが、この機能は標準で付いてる
ものなのでしょうか?
使ってるヴァージョンはVisual C++.net Version2003です
やりたい事はテキストファイルの一覧を表示して、その幅を自分で調整したいと考えています。
_____________________
| 名前 | 電話番号 | 住所 |
| 山田 03-xxxx 東京都xxxx
最初から表示されているダイヤログエディタのコントロールを見ても使える様な物が
見つからないので、後から追加できるものなのかそれとも自分で作らなければならない
物なのでしょうか?
0216デフォルトの名無しさん
2009/11/25(水) 20:54:40そのコントロールは「List Control」という表記なっている。
プロパティでViewを「レポート」に変更すると、そのようなヘッダの付いた表示形式になる。
VS2003でも大体同じような感じだったと思う。
試しに張ってみて、黄・赤・緑とかのアイコンが表示されるならそれでほぼ間違いない。
そういえば、このアイコンはVC4から殆ど変わらないよなあ。
0217デフォルトの名無しさん
2009/11/25(水) 21:13:19List Controlに欲しい機能が付いておりました。
ただ追加した時点では色のアイコンがあるだけで、それらしい機能は
持っていないと思ってしまっていました。
レポートに変更したら上の方に区切りの付いたバーが表示されました。
ありがとうございます。
0218デフォルトの名無しさん
2009/11/26(木) 19:42:26>>214
返答が遅くなりましたが無事読み込ませることが出来ました、ありがとうございます
てっきりリッチテキストそのままだと読み込めないものだと思っていたので意外でした
0219デフォルトの名無しさん
2009/11/26(木) 21:09:36A:「作ったよ」
B:「ありがとう。こっちで作ったのにコピーさせてもらうね」
A:「ん、じゃとりあえずBの仕事が終わるまで待ってるね」
B:「ありがとう。終わったよ〜」
A:「ん、じゃこっちの仕事も終了するねw」
B:「じゃあAの仕事が終わったらこっちで作ったものは削除するね〜」
A:「こっちはもちっと仕事があるから終わったら削除するよ〜」
B:「あれ、いつの間にやらCStringのヒープニオイタモノガコワレテr」
orz
0220219
2009/11/26(木) 21:10:390221デフォルトの名無しさん
2009/11/26(木) 21:14:43B:「ありがとう。こっちで作ったのにコピーさせてもらうね」
A:「・・・ああん、バカ。コピーするならポインタじゃなくて実体をコピーしてよん」
0222デフォルトの名無しさん
2009/11/29(日) 10:43:510223デフォルトの名無しさん
2009/11/29(日) 16:28:220224デフォルトの名無しさん
2009/11/29(日) 18:00:150225デフォルトの名無しさん
2009/11/29(日) 18:25:59/:::::::::::::::::::::::::::::::::`‐、
/::::::::::::::::::::::::::::::::::::::::::::::\
/::::::::::;:ィ::::::::';:::::::::::`ヽ::::::::::::::ヽ
,'::::::;':::/ l:::i::::::ヽ:::\:::::::';:::::::::::::::',
i:::l::::i:/ ';:::';:::::::',\::ヽ:::::::::::☆:::
l::l::;イ__, ヽ、ト、::::ヽ、\:',ヽ〃l::::::
';l l::l ` ‐- l:::::l:::::: こ、ここ、これ読んで下さいっ!
l::::l == 、 ,.ィ== l:::::l:::::::::
l:::::li //////////// l:::::l::::::::::
, -ーl::::lヽ、 r....::´`ヽ /l:::;'> 、:::::
, -ー 、'´`ヽl::::l// ` ‐-r‐ァ' ´ ,':/ー、 ';
/ , ノ ` l::::l li /ニく /⌒ヽ \.i
, └ '´  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ / ノ__ ', ,イ:
/ \ (⌒⌒) , └ '´ / i/
/ ヽ / ー ' / /,.イ
∠ __ / / /
 ̄ ̄ ̄ ̄ ̄─── -------/-‐'´ /
0226デフォルトの名無しさん
2009/11/29(日) 18:52:05彡;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ
イ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r''ソ~ヾ:;;;;;;゙i,
t;;;;;;;リ~`゙ヾ、;;;;;;;;;;;;;;;;;;;;ノ i,;;;;;;! / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
゙i,;;;;t ヾ-‐''"~´_,,.ィ"゙ ヾ;;f^! / お嬢ちゃん、ここはMFCの相談室だぜ。
ト.;;;;;》 =ニー-彡ニ''"~´,,...,,. レ')l. < その手紙をMFCで書いて出直しな。
t゙ヾ;l __,, .. ,,_ ,.テ:ro=r''"゙ !.f'l. \_______________
ヽ.ヽ ー=rtσフ= ; ('"^'=''′ リノ
,,.. -‐ゝ.>、 `゙゙゙゙´ ,' ヽ . : :! /
~´ : : : : : `ヽ:. ,rf :. . :.: j 、 . : : ト、.、
: : : : : : : : : : ヽ、 /. .゙ー:、_,.r'゙: :ヽ. : :/ ヽ\、
:f: r: : : : : : : : !丶 r-、=一=''チ^ ,/ !:: : :`丶、_
: /: : : : : : : : :! ヽ、 ゙ ''' ''¨´ / ,i: : : l!: : : : :`ヽ、
〃: :j: : : : : : : ゙i `ヽ、..,,__,, :ィ":: ,ノ:: : : : : : : : : : : :\
ノ: : : : : : : : : : :丶 : : ::::::::: : : : /: : : MFC : : : : : : : :\
何故かボタンコントロールだけディスエーブルされるのは、仕様?バグ?
チェックボックスとかは全く問題ないんだが・・・・OnCreate()内でEnaqbleWindowやっても
効果無し。MFCのソース
バックグラウンドの更新も変だ・・・・ダイアログアイテムにちゃんとメッセージがポストされてない気がする。
2008で拡張されたMFCは便利だけど、どうも問題が多いし、肝心な情報が公開されてない
気がする。いい加減にM$は、開発環境ぐらいソースを全公開して欲しいよ。w
0228デフォルトの名無しさん
2009/12/01(火) 09:02:48ダイアログバーのときは、コマンドハンドラやON_UPDATE_COMMAND_UIが無いと
ボタンは無効になってたけど、それとは関係無いですか?
それだ!!ありがとうございます。ボタンの件はそれでした。
0230デフォルトの名無しさん
2009/12/02(水) 14:23:200231デフォルトの名無しさん
2009/12/04(金) 16:51:04レポート形式で使用しています。(VC2005)
(1)
リスト行数100で1ページ表示5行で
現在10ページ目の1番目の項目が選択されています。
この状態で一度全ての項目を削除し再入力して
新たに10ページ目の1番目の項目を選択させたいので
SetItemStateなどで選びなおしました。
しかし、10ページ目の1番目が選択されているようですが
表示は1ページ目になっています。
これを10ページ目にしたくてSetScrollPosをしましたが
うまくいかず、表示が変になります
どうやったら10ページ目の表示にできるのでしょうか?
(2)
拡張スタイルにLVS_EX_GRIDLINESを使用していますが
スクロールしたときにグリッドラインの残像が残ってしまいます
この残像を綺麗にけすのはどうしたらいいのでしょうか?
0232デフォルトの名無しさん
2009/12/04(金) 17:01:29CListCtrl::EnsureVisible()
>この残像を綺麗にけすのはどうしたらいいのでしょうか
ウチでは残らないけど? 何か変わったコトしてない?
0233デフォルトの名無しさん
2009/12/04(金) 19:56:54市販アプリでも普通に残像が残っていたので、環境依存なのかもなあ。
昔なった時は、IE3.x時代のだからMSもまともにサポートする気無いのか、
という程度に思っていたのだけど。.NETだと自前で正しく描画していたし。
0234デフォルトの名無しさん
2009/12/07(月) 09:06:092はOSのバグの問題と同じかも。
http://support.microsoft.com/kb/813791
昔ブックマークしていた場所で、ページ自体は無くなってるけど、
このアドレスでググると同じ問題の書き込みがいくつか残ってた。
0235231
2009/12/08(火) 13:26:251は232で解決しました
2は画面のプロパティのデザインで治りました
0236231
2009/12/08(火) 14:11:12改めて、
返事がおくれてすみません
1は232で解決しました
2は画面のプロパティのデザインの効果の
次のアニメーション効果をメニューとヒントに使用するのチェックを外すと
治りました。
ありがとうございました。
0237デフォルトの名無しさん
2009/12/09(水) 15:29:32(もう一度クリックすると元に戻る) どのようなコードでできるでしょうか?
0238デフォルトの名無しさん
2009/12/09(水) 15:45:59チェックボックスのスタイルをBS_PUSHLIKEにすればいいかも
0240デフォルトの名無しさん
2009/12/09(水) 22:48:44error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2019: 未解決の外部シンボル "public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ) が
関数"public: virtual int __thiscall CprototypeApp::InitInstance(void)"(?InitInstance@CprototypeApp@@UAEHXZ) で参照されました
とエラーが出ていますが、原因がわからず困っています。
同じソースを別の人の環境で実行すると何もエラーも出ずにコンパイル・リンカーが通ります。
私も昨日までは通っていましたが、コーディングを設定ファイル?とかがおかしくなってしまったのか、
昨日のデータを使ってもリンカーエラーが出て困っています。
環境として、
自分 VisualStadio 2008 VC++(MFC)
別の人 VisualStadio 2008 VC++(MFC)
本当に困っています。何か知っている方がいらっしゃったら力を貸してください。
0241デフォルトの名無しさん
2009/12/09(水) 23:02:46C/C++関係はそれで解決することが良くある。
0242240
2009/12/10(木) 00:07:23出力ファイルとは、Solution内のDebugフォルダ内のことをさすのでしょうか?
昨日から勉強を始めたため、ほんとにわからないことが多くてすみません。
0243デフォルトの名無しさん
2009/12/10(木) 22:12:26ライブラリパスはソースではなく、コンパイラの設定だから
PCが変われば設定が違う可能性がある。
ちょっと2008が手元にないんでアレだが2005で見ると
ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ→ライブラリファイル
で設定できる。2008も似たようなもんだろ。
その設定をコンパイルが通るやつに合わせてみろ。
0244デフォルトの名無しさん
2009/12/10(木) 22:23:090245デフォルトの名無しさん
2009/12/11(金) 10:27:42popupで表示して小窓がアクティブ状態になると、メインウィンドウが
非アクティブ状態になってしまいます。小窓がアクティブ状態になっても
メインウィンドウがアクティブ状態を失わないようにするにはどうしたら良いですか?
0246デフォルトの名無しさん
2009/12/11(金) 12:49:330247デフォルトの名無しさん
2009/12/11(金) 16:52:41レスありがとう。ただ、WS_EX_PALETTEWINDOW指定しても、メインウィンドウが
非アクティブになってしまいます。何か他の設定が悪いのかも?
ダイアログベースで以下のような感じ
//CtestAppの中でウィンドウ登録
WNDCLASSEX wndclass;
wndclass.lpszClassName = L"TESTWINDOW";
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = DefWindowProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = m_hInstance;
wndclass.hbrBackground = ::CreateSolidBrush(::GetSysColor(COLOR_BTNFACE));
wndclass.lpszMenuName = NULL;
wndclass.hIcon = LoadIcon(IDI_APPLICATION);
wndclass.hCursor = LoadCursor(IDC_ARROW);
wndclass.hIconSm = LoadIcon(IDI_APPLICATION);
RegisterClassEx(&wndclass);
//ボタン押された時にウィンドウ表示
void CtestDlg::OnBnClickedButton1()
{
CRect cr;
GetWindowRect(&cr);
m_cwnd.CreateEx(WS_EX_PALETTEWINDOW, L"TESTWINDOW", L"", WS_VISIBLE | WS_POPUP, cr.left, cr.top, 50, 50, GetSafeHwnd(), NULL, NULL);
}
0248デフォルトの名無しさん
2009/12/11(金) 19:16:14MFCなんだからドッキングツールバーのソースでも読んで勉強すればいいよ
0249デフォルトの名無しさん
2009/12/12(土) 01:15:060250デフォルトの名無しさん
2009/12/12(土) 01:42:470251245
2009/12/12(土) 09:54:120252デフォルトの名無しさん
2009/12/12(土) 10:12:06手持ちのアプリの動作でいうと
VC6はアクティブがどうであろうとメインもツールウィンドウもアクティブになりっぱなしでおかしい
VC2008はアクティブによってメインもツールウィンドウもちゃんと切り替わる
ってなってる
俺もツールウィンドウ作ったときにメッセージのやり取りがおかしくなったときに
VC6みたいにアクティブになりっぱなしになったことあるから
VC6ってバグりっぱで放置してあるだけだと思う
0253245
2009/12/12(土) 12:39:18確かにVS2008だとアクティブ状態が移動しますね。ただ、作りたいのがツールウィンドウではなく、
VS2008で例えると、入力候補ウィンドウみたいなヤツなんです。これポップアップで出ますが、
フォーカスが移っても、親ウィンドウのアクティブ状態は変化ないですよね。
248さんが言ってた”戻せばいい”というのをヒントに、親ウィンドウの
WM_NCACTIVATEとWM_ACTIVATEAPPで細工したら希望通りの動作になりました。
0254デフォルトの名無しさん
2009/12/12(土) 13:11:450255デフォルトの名無しさん
2009/12/15(火) 15:00:48VS2005やVS2008でダイアログベースのプロジェクトを作り、
標準で用意される2つのダイアログ(メインとバージョン情報)に
「サイズ変更枠」と「最大化ボタン」のプロパティをセットしてビルド。
デバッグ開始し、メインダイアログを最大化。
↓
特に問題無い。
そのままバージョン情報ダイアログを出してこっちも最大化。
↓
セカンダリモニタにほんのちょっとウィンドウ枠がはみ出る。
という現象が発生するのですが、
他のかたの環境でも発生しますでしょうか。
0256デフォルトの名無しさん
2009/12/15(火) 19:46:450257デフォルトの名無しさん
2009/12/15(火) 20:26:08あれ、発生しませんか。
社内ではXPマシンすべてで発生するんです。
同じモニタだから、ハードウェア的な問題なんだろうか。
ありがとうございます。
0258デフォルトの名無しさん
2009/12/16(水) 18:28:00それだと他のウィンドウでも同じ現象が出るか
0259ぷれ
2009/12/16(水) 23:51:16CWinthreadにCScrollView派生クラスのハンドルを渡してスレッド側から、
CScrollViewのOnPrepareDC(&dc)をコールすると以下でエラーが発生します。
CWnd::AssertValid()
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);//<--ここでエラー
どうすれば問題解決するでしょうか。
よろしくお願いします。(関連するソースは以下)
CThreadxxx ::CThead(HWND hwnd)
{
m_pMainWnd = AfxGetMainWnd();
m_pView = (CScrollViewxxx*)CWnd::FromHandle(hwnd);
}
int CThreadxxx ::Run()
{
while (WaitForSingleObject(m_hEventKill, 0) == WAIT_TIMEOUT){
if(m_hWndView){
CClientDC dc(m_pView);
m_pView->OnPrepareDC(&dc);
m_pView->Render(&dc);//計算描画処理(重い)
}
}
}
0260デフォルトの名無しさん
2009/12/17(木) 08:52:31ワーカースレッドからはユーザーメッセージ定義してメッセージハンドラで凌いでた
SendMessage()で渡せばメインスレッドで処理されて帰ってくる
0261ぷれ
2009/12/17(木) 09:20:35メッセージで処理してみましたが遅くなってしまいました。
早くする方法はありますでしょうか?ソースは↓みたいな感じです。
int CThreadxxx ::Run()
{
if(m_hWndView)
{
PostMessage(m_hWndView,WM_USER_START_RENDER, 0, 0);
if(WaitForSingleObject(m_hEventEndRender,10000) == WAIT_TIMEOUT));
{
return ;
}
}
BOOL CScrollViewxxx::PreTranslateMessage(MSG* pMsg)
{
CDC *pDC = NULL ;
CClientDC dc(this);
switch (pMsg->message){
case WM_USER_START_RENDER:
OnPrepareDC(&dc);
SetOrigin(&dc);
Render(&dc);
//m_pThreadRender:スレッド
SetEvent(m_pThreadRender->m_hEventEndRender);
break;
}
}
0262デフォルトの名無しさん
2009/12/17(木) 10:25:02こんなイメージ
int CThreadxxx::Run()
{
while(WaitForSingleObject(m_hEventEndRender,10000) == WAIT_TIMEOUT)){
if(m_hWndView){
CClientDC dc(m_pView);
m_pView->SendMessage(WM_USER_START_RENDER, 0, (LPARAM)(CDC*)&dc)) //制御待たせるためにSendMessage
m_pView->Render(&dc);
}
}
}
LRESULT CScrollViewxxx::WindowProc(UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (pMsg->message){
case WM_USER_START_RENDER:
{
ASSERT_KINDOF(CDC, lParam);
CDC* pDC((CDC*)lParam);
if(pDC->GetSafeHdc() != NULL) {
OnPrepareDC(pDC);
SetOrigin(pDC);
}
return 0;
}
return CView::WindowProc(msg, wParam, lParam);
}
0263ぷれ
2009/12/17(木) 11:33:51早速試してみます。
0264ぷれ
2009/12/17(木) 12:58:42試したソースはこんな感じです。
int CThreadxxx::Run()
{
if(m_hWndView)
{
CClientDC dc(m_pView);
m_pView->SendMessage(WM_USER_START_RENDER, 0, (LPARAM)(CDC*)&dc);
CRenderInfo renderInfo;
m_pView->Render(&dc);
SetEvent(m_hEventStop);
}
}
LRESULT CGdsView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
CDC* pDC = (CDC*)lParam;
switch (message)
{
case WM_USER_START_RENDER:
ASSERT_KINDOF(CDC, pDC);
if(pDC->GetSafeHdc() != NULL)
{
OnPrepareDC(pDC);
SetOrigin(pDC);
}
return 0;
default:
break;
}
return CScrollView::WindowProc(message, wParam, lParam);
}
0265ぷれ
2009/12/17(木) 13:01:47判断に迷ってます。
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if(msg.message == WM_USER_START_RENDER)
{
CDC* pDC = (CDC*)lParam;
ASSERT_KINDOF(CDC, pDC);
if(pDC->GetSafeHdc() != NULL)
{
OnPrepareDC(pDC);
SetOrigin(pDC);
}
}else{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
0266デフォルトの名無しさん
2009/12/17(木) 20:12:13何か無駄に話を難しくしているように見えるぞ。
0267デフォルトの名無しさん
2009/12/19(土) 11:16:15クラス A
CListBox m_listA
クラス B
CListBox m_listB
クラス C
fnCommon()
クラスA、クラスBの処理が共通なので、
クラスCの関数を共通処理関数としようと思っています・
クラスCの関数に、クラスAのm_listAなどのメンバを引数に渡せなくて
困っています。どうやればいいでしょうか?
クラスAの処理
{
クラスC: :fnCommon( m_listA );
}
クラスCの処理
クラスC::fnCommon( ClistBox a)
{
a.set・・・();
}
ではうまくいきませんでした、どうすれば別のクラスのメンバを引数として渡せるのでしょうか?
最近はじめたばかりでググっても解決策が見つかりません。
よろしくお願いします。
0268デフォルトの名無しさん
2009/12/19(土) 12:11:08ポインタを渡す、もしくは、CListBoxの派生クラスを作ってそこで処理する。
ClassC::fnCommon(&m_listA);
クラスC::fnCommon(CListBox* a)
{
a->set・・・();
}
CMyListBoxクラス内にfnCommon関数を宣言・定義
クラスAの処理
CMyListBox m_listA;
m_listA.fnCommon();
具体的にはCPropertySheetで作成したコントロールを複数のCPropertyPageに貼りつけて
共用するとか。これができると、CListCtrlやCTreeCtrlやカスタムコントロールで便利なもんで・・・・
試しにやってみたら1枚目には貼れるのですが、2枚目以降は駄目でした。(表示されない。エラー
は無し。)
0270デフォルトの名無しさん
2009/12/19(土) 22:05:050271デフォルトの名無しさん
2009/12/19(土) 22:20:50サンクス。OnSetActive()の段階でコントロールにSetParent()したらイベントが行く様に
なったんだけど、開始ページ以外のCTreeCtrlの文字が表示されない。(マウスクリックすると
表示される。)コントロールにUpdateWindow()などしても更新されないから、更新イベントが
CTreeCtrl内のコントロールに行き渡ってないみたいだ・・・・
0274デフォルトの名無しさん
2009/12/23(水) 00:06:53配列へ格納したいのですがどうしたらできますでしょうか
CxxxDoc *pDoc = (CxxxDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
0275デフォルトの名無しさん
2009/12/23(水) 00:52:33どのように取得したって?
取得できてないじゃん。
0276デフォルトの名無しさん
2009/12/23(水) 01:06:20>>254です、
一応これでエディットビュー のドキュメント(テキスト)が
取得できるようになったのですが、このままでは256 文字がべたで配列に代入されてしまいます
一行づつ取得して、配列へ格納するにはどうしたらいいでしょうか?
CxxxDoc *pDoc = (CxxxDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
void* P = m_viewList.GetHead();
char buf[_MAX_PATH];
CEdit* pE;
pE = (CEdit*) P;
pE->GetWindowTextA((LPTSTR)buf,_MAX_PATH);
0277デフォルトの名無しさん
2009/12/23(水) 05:42:000278デフォルトの名無しさん
2009/12/23(水) 08:41:46pE->GetLine(i, (LPTSTR)buf);
として、得ることにしたのですが、当然のことながら、改行コード以降にゴミが入っています
sizeof(buf); とかstrlen(buf); でサイズを得たいのですが上手く行きません
目的のデータ(文字列+改行コード)を得るコードを教えてもらえませんか?
0279デフォルトの名無しさん
2009/12/23(水) 09:11:09あと、CEdit::GetLine(nIndex, lpszBuffer)は
lpszBufferの中身の先頭WORDにバッファ長が入っていることが前提だ。
0280デフォルトの名無しさん
2009/12/23(水) 09:55:09わざわざ手間がかかるやり方でやってないか?
行数がとてつもなく多いとか、効率考えて普通と違う方法でやろうとしてるならいいけど
0281デフォルトの名無しさん
2009/12/23(水) 10:43:27置換後の文字列を置換前の文字列の位置に上書きしたいのですが、今のままだと、置換前、置換後の文字列両方表示されています、どこがおかしいでしょうか?
>>280
CString を使いたいのですが、<boost/regex.hpp> が使いたいので、文字列は*char かstd::string の方がベターなのです
char szBuf[256];
const int nRow = pE->GetLineCount();
for(int nIdx = 0; nIdx < nRow; ++nIdx) {
// テキストデータ取得。
const int iSize = pE->GetLine(nIdx, szBuf, sizeof(szBuf) - 1);
szBuf[iSize] = '\0';
reg_ex = "<.*?>";
result = re.RegularTagReplace(szBuf, reg_ex);// <boost/regex.hpp> でHTML タグを削除している
const int end = pE->GetWindowTextLength();
pE->SetSel(end, end); // 一番最後に持ってくる
result += "\r\n";
pE->ReplaceSel(result.c_str());
}
0282デフォルトの名無しさん
2009/12/23(水) 12:22:330283デフォルトの名無しさん
2009/12/23(水) 14:09:55とかやってみるができないorz
0284デフォルトの名無しさん
2009/12/23(水) 15:18:25HTMLは特別な場合を除いて改行を無視するから
TAGのカッコの途中で改行が入ったりしてる場合もあるわけだが
0285デフォルトの名無しさん
2009/12/23(水) 16:37:33行単位でタグを取り除くのには、他に目的があります、改行の必要な部分は、あとで
<br> をつけます、しかし上手くいかんな・・・
0286デフォルトの名無しさん
2009/12/23(水) 18:47:25他で聞いてみます。
0287デフォルトの名無しさん
2009/12/27(日) 23:43:33いろんなファイル形式の画像ファイル(特に48bitカラー)を読み込んで、データストリーム
(ピクセルごとのRGB情報)を取得したいと思ってます。
いまはGDI+のImageクラスで画像ファイルを開いて、Image.SaveでIStreamにデータ
ストリームをコピーした後、IStream.Writeでunsigned char[]にコピーするというコードを
試しているんですが、IStreamからunsigned char[]へのコピーがうまくいきません。
Writeの返り値はOkになってるし、コピーされたバイト数も正しいのに、配列は全て
0が入っているという状態です。
考えられる原因は何でしょうか?
あるいはもっと確実な方法があれば、お教えいただけると助かります。
0288デフォルトの名無しさん
2009/12/28(月) 00:31:42IStream::Writeは、IStreamに書き出す、という意味だぞ。
取り出すならIStream::Read。引数の型で気付かなかったのか?
0289デフォルトの名無しさん
2009/12/28(月) 01:01:41ありがとうございます。
明日試してみます。
0290デフォルトの名無しさん
2009/12/30(水) 01:43:31主力は.netだろうしRCやRTMに向けてはそっちの調整だろうな。
リボンアプリの案件が来てて困ってる。2010はデザイナが付いてるし、
βで作っても問題なさそうな気がする。そう思いたいだけなんだけどね。
納期は5月だからβで作ったのを引き継げればいいのだが・・・。
0291デフォルトの名無しさん
2009/12/30(水) 01:47:52需要あんのか
0292デフォルトの名無しさん
2009/12/30(水) 02:02:55Win7が始めて使ったWindows(ペイントなんかがリボンアプリ)ですって人が大勢を占めるようになったら
需要としては結構出てきそう。
市販アプリでもPerfectDiskなんかは既にリボンUI採用してるね。
0293デフォルトの名無しさん
2009/12/30(水) 02:10:15Officeも2010にもするらしいから、見た目を同じにしたいらしい。
個人的には今までのツールバーみたいに、他の処理と無関係なアイコンが
並ばなくていいという点だけは評価できる。ツールバー消したりとか
しなくていいし。機能別にタブみたいなグループでまとめちゃえばいいし。
ただ無駄に高さを取るのがどうしても馴染めない。
0294デフォルトの名無しさん
2010/01/02(土) 20:34:39以上!
0295デフォルトの名無しさん
2010/01/05(火) 08:20:54出来上がったソフトを他のPCで動かそうとしたら起動せず、
イベントログでSideBySideエラーになっていた。
他の人に送ったらマニフェストがどうたらこうたらとか・・・
わけわかんないのでもう一台のPCでコンパイルしようとしたらエラーが出る。
そうか、ExpressにはMFCが入っていないんだね。
最近、自分が浦島太郎に思えることが多いですよ・・・
0296デフォルトの名無しさん
2010/01/05(火) 11:41:560297デフォルトの名無しさん
2010/01/05(火) 19:12:30まあ2008の場合はWinSxSへのコピーのみでマニフェストでアクセス、
という今までと違う変則的な方法だから解り難くてもしようがない。
不評だったのか、2010ではシステムフォルダにもコピーされる仕様に戻るらしい。
0298デフォルトの名無しさん
2010/01/06(水) 09:16:31メッセージマップのところに
//}}AFX_MSG_MAP
というものが入っているのですが(閉じるほうのみ)、
これってVC6などでClassWizardのために入っていたものですよね?
VC2008でもなにか意味のあるものなのでしょうか?
それともテンプレートの残骸?
0299デフォルトの名無しさん
2010/01/06(水) 10:02:34OnSendRawData()ではレスポンスを返さないようにするために
pRawData->cbInData = (DWORD)0;
pRawData->cbInBuffer = (DWORD)0;
として
OnEndOfRequest()で
pfc->WriteClient()
で編集した内容を返そうとしています。
しかし、OnSendRawData()で
pRawData->cbInData = (DWORD)0;
pRawData->cbInBuffer = (DWORD)0;
を入れるとOnEndOfRequest()でWriteClient()をしてもレスポンスが
返されません。
なぜこのような結果になるのでしょうか?
0300299
2010/01/06(水) 10:11:46WriteClient()を呼ぶとOnSendRawData()が発生するんですね。
0301デフォルトの名無しさん
2010/01/25(月) 14:38:28GetFtpConnectionとかでタイムアウトを設定できないでしょうか?
0302デフォルトの名無しさん
2010/01/25(月) 23:15:390303デフォルトの名無しさん
2010/02/03(水) 01:38:21環境は、VC6でMFCダイアログベースです。
2つのアプリケーションAとBを作っているのですが、
以下の処理をそれぞれ追加します。
A:ボタン押下でBをミューテックスオブジェクトを使って排他的に呼出す。
B:ミューテックスオブジェクトを保持。
�@Aにあるボタン押下でBだけは呼出せたのですが、ミューテックスオブジェクトを
使って排他的な呼出し方にする方法が分かりません。
�ABでミューテックスオブジェクトを保持する方法が分かりません。
自アプリケーション の2重起動禁止の場合、CreateMutexを使っていたのですが、
上記の場合、AとBをどのようにすればいいでしょうか?どなたか宜しくお願いします。
0304デフォルトの名無しさん
2010/02/03(水) 08:01:24Aからボタン押下でBを起動、
ただし以前Aから起動した事のあるBが残っている場合は
新たに起動はしない、ってことでOK?
そういうのだったら、B起動時にそのプロセスハンドルを残しておいて、
次のボタン押下時にGetExitCodeProcessで以前起動したプロセスが終了したか確認、とか。
手動でならBを複数起動できる、という必要性がないならBの二重起動禁止で十分だけど。
0305デフォルトの名無しさん
2010/02/03(水) 10:08:47これを読み込んでCStringArrayに再格納できませんでした。どのようにすればいいのでしょうか?
//シリアライズ
CStringArray aBuf;
aBuf.Add( _T("aaa") );
aBuf.Add( _T("bbb") );
aBuf.Add( _T("ccc") );
CFile f;
BOOL bRet = f.Open( _T("hoge.txt"), CFile::modeCreate | CFile::modeWrite );
if( bRet == FALSE) {
return true;
}
// アーカイブを作成
CArchive ar( &f, CArchive::store );
TRY {
aBuf.Serialize( ar );
}
CATCH_ALL(e) {
ar.Close();
f.Close();
return 0;
}
0306デフォルトの名無しさん
2010/02/03(水) 11:52:32読み込むほうのソースを出さないと誰もわからない。
0307305
2010/02/03(水) 15:41:45失礼しました。
サンプルをみて書いたのですが、以下のコードになります。
try{
CStringArray m_saMyArray;
CFile in(_T("hoge.txt"), CFile::modeRead);
CArchive ar(&in, CArchive::load);
CString buffer;
m_saMyArray.SetSize(0);
for(int i = 0; ar.ReadString(buffer); i++) {
m_saMyArray.Add(buffer);
}
ar.Close();
in.Close();
} catch(CFileException e)
{
AfxMessageBox(_T("Read Error !!"));
}
ar.ReadString(buffer)で bufferにすべてのデータが格納されました。
根本的に、読込み方法が間違っているのでしょうか?
ご教授おねがいしますm(_ _)m
0308デフォルトの名無しさん
2010/02/03(水) 16:25:07CStringArray::Serialize()で保存したものは
CStringArray::Serialize()で読み込まないとダメ。
> CString buffer;
> m_saMyArray.SetSize(0);
> for(int i = 0; ar.ReadString(buffer); i++) {
> m_saMyArray.Add(buffer);
> }
m_saMyArray.Serialize(ar);
0309305
2010/02/03(水) 18:14:02ありがとうございます(><
ためしてみます。。
0311デフォルトの名無しさん
2010/02/06(土) 13:24:05iconファイル(拡張子ico)を読み込んでイメージを設定する方法ってありますか?
サイトアイコン(favicon.ico)をダウンロードして、動的にツールバーボタンにイメージ登録するようなことがやりたいのです。
0312デフォルトの名無しさん
2010/02/06(土) 14:06:52icoファイルから読み込む方法は下記のようにできることが分かりました。
HICON hIcon;
ICONINFO iconinfo;
ExtractIconEx(_T("favicon.ico"), 0, NULL, &hIcon, 1);
GetIconInfo(hIcon, &iconinfo);
m_toolbar.SetBitmap(iconinfo.hbmColor);
DestroyIcon(hIcon);
しかしこれでは1種類のアイコンイメージしか使えません。
複数のイメージを使いたい場合は、横方向に連結した1個のbitmapを作る必要があるようです。
どうやって連結するかはまだ分かりませんが、ものすごい不便ですね。
0313デフォルトの名無しさん
2010/02/06(土) 15:36:47気に入らなかったら自作すればいい。
0314デフォルトの名無しさん
2010/02/06(土) 15:45:380315デフォルトの名無しさん
2010/02/06(土) 18:02:15CToolBarCtrlというのがあったんですか。
これだとAddBitmap()で1個ずつ追加できそうですね。
ありがとうございました。
0316デフォルトの名無しさん
2010/02/08(月) 16:28:360317デフォルトの名無しさん
2010/02/08(月) 16:54:48IsShowみたいなのが欲しいです
CWndには無いようです
0318デフォルトの名無しさん
2010/02/08(月) 16:59:38CWnd::IsWindowVisible
0319316
2010/02/08(月) 17:05:26WTLにありますね
0320317
2010/02/09(火) 09:49:26ありとがう
できました
0321デフォルトの名無しさん
2010/02/12(金) 05:57:29CWnd;;OnSysKeyDonwではAltのみのキーも拾うのに
CWnd::OnSysKeyUpでは拾わないのはなぜなんだぜ・・・
AltのみのUPイベントを拾うにはどうすればいいですか、
教えてエロい人
0322デフォルトの名無しさん
2010/02/12(金) 09:31:03Visual Studio 2008の拡張MFCで、CDockablePaneのタブ付きウィンドウ内に
上下分割ウィンドウ(VisualStudioのClass Viewみたいな)って作れます
か?タブウィンドウにする前にドッキング出来ちゃえば簡単に作れそうな
気はするのですが、DockToWindow使ってみても駄目でした。
結局ドキュメントの更新無し=不備なままで2010が出そうですね。
何だかいい加減だなぁ。
0324デフォルトの名無しさん
2010/02/14(日) 12:00:38作れる。ただし自前。
0325デフォルトの名無しさん
2010/02/18(木) 22:35:50new、deleteが早くなって便利そうなんだけど。
ttp://d.hatena.ne.jp/kiwamaru/20090127/1233044005
を参考にreleaseでは機能するみたいだけど、debugでは
#define new DEBUG_NEW
を外してもダメみたい。
0326デフォルトの名無しさん
2010/02/20(土) 12:17:01構成プロパティ - 文字セットが「Unicode文字セット〜」
だとOnDrawItem関数でlpDrawItemStruct->itemActionが
ODA_SELECTを返してこない理由わかる人いますか?
OS:Xp,Vista,Windows7
環境:vs2008
.Net FrameWork:2.0〜3.5
以上の環境で再現できました。
0327デフォルトの名無しさん
2010/02/20(土) 13:27:36Comctl32の6.0以降とそれ以前で挙動が違う、というのが正解。
stdafx.hを見てみればそのからくりが分かる。
0329デフォルトの名無しさん
2010/02/24(水) 11:31:37AFX_MANAGE_STATE(AfxGetStaticModuleState())は
エクスポートされたクラスのすべてのメンバ関数に入れることになるのでしょうか?
メンバ関数の中でダイアログなどのリソースを使う箇所があります。
クラス自体はMFCのクラスを派生させたものではないので、
拡張DLLではなく標準DLLを選びました。
0330デフォルトの名無しさん
2010/02/25(木) 19:13:15CWndを継承して新しく定義したウインドウをCDialogの子ウインドウとして作成しましたが、
ウインドウに対するキー入力メッセージが正常に送られません。
このウインドウをクリックしてから矢印キーを押すと、
親のCDialogに一緒に貼り付けたリストボックスにフォーカスが移って選択が上下してしまいます。
新しいウインドウのイベント関数を色々オーバーライドして調べると、矢印キーを押すと同時に何故かKillFocusが呼ばれていました。
何が原因でしょうか。
0331330
2010/02/25(木) 20:40:07なんかよくわかりませんが、解決しました。
失礼しました。
0332デフォルトの名無しさん
2010/02/25(木) 21:01:32OnGetDlgCode()まで調べたのなら、そこでSetFocus()なんて強引なことをせずに、
DLGC_WANTARROWS や DLGC_WANTCHARS を設定すればよいと思う。
0333デフォルトの名無しさん
2010/02/25(木) 21:34:55クリック時に何が呼び出されるか手当たり次第に関数をオーバーライドして試してたので、
OnGetDlgCodeがそのものズバリの関数だったとは気づきませんでした。
DLGC_WANTARROWSで正常に出来ました。ありがとうございました。
0334デフォルトの名無しさん
2010/03/06(土) 15:21:170335デフォルトの名無しさん
2010/03/09(火) 11:24:04問題はMFCという言葉で買う人がどれくらいいるかだw
0336デフォルトの名無しさん
2010/03/09(火) 11:39:06Macのアプリケーションにあるようなドロワーを
Windowsでやるにはどういう形がやりやすいでしょうか?
こんな感じのダイアログから出たり入ったりするGUIです。
http://images.google.co.jp/images?q=Mac%20%E3%83%89%E3%83%AD%E3%83%AF%E3%83%BC
モードレスダイアログやフローティングダイアログバーを試しましたが、
サブウィンドウのような外見がいやなのと、位置制御などが面倒です。
モードレスダイアログの場合はフォーカスがそっちに移るのも困りもの。
見た目、挙動ともによい方法があったら教えてください。
0337デフォルトの名無しさん
2010/03/09(火) 12:47:57要するにスレ違い
0338デフォルトの名無しさん
2010/03/10(水) 11:01:35確かにそのとおりですね。ご指摘ありがとうございました。
0339デフォルトの名無しさん
2010/03/15(月) 10:00:07CoInitializeEx()を使うとエラーが出てしまいます…
普通のWin32コンソールプログラムだと以下でなんの問題もないのですが
#define _WIN32_DCOM
CoInitializeEx(0, COINIT_MULTITHREADED);
MFCプログラムだと、以下の定義エラーが出てしまいます…
error C2065: 'CoInitializeEx' : 定義されていない識別子です。
error C2065: 'COINIT_MULTITHREADED' : 定義されていない識別子です。
どうぞご教授下さいm(__)m
0340デフォルトの名無しさん
2010/03/15(月) 10:03:160341デフォルトの名無しさん
2010/03/15(月) 10:12:34ちょっと書き方が悪かったですね…
コンソールプログラムだと、以下でOKなんですが
#define _WIN32_DCOM
#include <comdef.h>
CoInitializeEx(0, COINIT_MULTITHREADED);
MFCアプリだと、この上述のコードではエラーになるんです…
何故なんでしょうか?
0342デフォルトの名無しさん
2010/03/15(月) 10:39:150343デフォルトの名無しさん
2010/03/15(月) 10:44:23すみません… 具体的に何か教えていただけませんか?
よろしくお願いしますm(__)m
0344デフォルトの名無しさん
2010/03/15(月) 10:45:22_WIN32_DCOMをプロジェクト設定に書くかstdafx.hの上のほうに持って行く
0345デフォルトの名無しさん
2010/03/15(月) 10:58:23stdafx.hの上ではダメでしたが、
プロジェクト設定に書いたら見事OKでした!
ありがとうございます!助かりました!
本当にいい人だ。 うぅ (/Д`)・゜・。
0346デフォルトの名無しさん
2010/03/15(月) 11:18:590347デフォルトの名無しさん
2010/03/15(月) 11:22:28上ってどこに書きました?
#include <stdafx.h>より上の行ではなく、stdafx.h内の上のほうですよ。
自分の環境では、afx〜.hのインクルードより上に書けば大丈夫でしたが。
0349デフォルトの名無しさん
2010/03/15(月) 13:54:370350デフォルトの名無しさん
2010/03/15(月) 17:40:12ドキュメントなしのとき→IDR_MAINFRAMEのメニュー
ドキュメントが開かれているとき→IDR_MYFILE(仮)のメニュー
このIDR_MYFILEに含まれるメニューの有効/無効を切り替えたいんだけど、
GetMenu()->EnableMenuItem( ID_MENU_IN_IDR_MYFILE(仮), MF_GRAYED )
みたいなことしても反映されません。なぜ??
0351デフォルトの名無しさん
2010/03/15(月) 17:48:55ON_UPDATE_COMMAND_UIに任せるべきかと。
0352デフォルトの名無しさん
2010/03/15(月) 17:56:00サンクス
とりあえずそれでググってくる
0353デフォルトの名無しさん
2010/03/15(月) 20:18:54暇な時(OnIdle)に項目の状態を更新できるコールバックを呼び出してくれるからな。
外側から明示的に状態を更新することはあまり無い。
0354デフォルトの名無しさん
2010/03/15(月) 20:49:58"整数を入力してください"ってーのがクソうざいんだけど
0355デフォルトの名無しさん
2010/03/15(月) 21:57:000356デフォルトの名無しさん
2010/03/16(火) 09:04:49エディットボックスにintを関連付けなければよい。
0357デフォルトの名無しさん
2010/03/16(火) 11:10:58したいのですが、どうすればよいでしょうか?
0358デフォルトの名無しさん
2010/03/16(火) 11:20:08チェックボックスにしてPushLikeにするのがいいかも
0359デフォルトの名無しさん
2010/03/16(火) 21:04:05猫でもわかるらしいのですが、わたしは分からないので
教えてください。
http://homepage2.nifty.com/c_lang/mfc/mfc_01.htm
のMFCプログラムをVC2008でビルドし、実行するとすぐにVS画面へ戻ってしまいます。
プログラムがすぐ終了している感じです
どうすれば、WINDOWを表示できるのですか?
0360デフォルトの名無しさん
2010/03/16(火) 21:05:59break pointしかけてデバックしてみろや
0361デフォルトの名無しさん
2010/03/16(火) 21:13:290362デフォルトの名無しさん
2010/03/16(火) 21:42:560363デフォルトの名無しさん
2010/03/16(火) 22:18:270364デフォルトの名無しさん
2010/03/16(火) 22:20:58かわいそうだから・・・
/D "_WINDOWS"
でOK
0365デフォルトの名無しさん
2010/03/16(火) 23:11:22ウィンドウ別にCWinApp::OnIdleのように処理をするようにしたいのですが、
何か方法なないでしょうか?
単純に思いついた方法はCWinApp::OnIdleで各子ウィンドウを調べて一つずつ
処理させるくらいしか思いつきませんでした。
各子ウィンドウにスレッド処理させる方法も考えたのですが、案件の仕様で
ダメなので使えません。
0366デフォルトの名無しさん
2010/03/17(水) 09:23:18アイドル時の処理というのがどの程度の頻度なのかにもよるけど、
定期的にというものなら、タイマじゃダメ?
0367デフォルトの名無しさん
2010/03/17(水) 09:34:57ウインドウごとにアイドル調べる意味がわからん。
各子ウィンドウにスレッドじゃないんだから中の人はひとりなんだろ
0368357
2010/03/17(水) 10:05:09ありがとうございます。
CButtonのスタイルをPushLikeにしてみて、それで無理そうならチェックボックスに変更してみます
0369デフォルトの名無しさん
2010/03/17(水) 10:22:39MFCならFeature Packも視野に入れるといい。
0370デフォルトの名無しさん
2010/03/17(水) 10:37:210371256
2010/03/17(水) 13:02:45UINT __cdecl CMyEditApp::OnIdleWT(LPVOID pParam) // ワーカースレッド
{
POSITION pos(theApp.GetFirstDocTemplatePosition());
CDocTemplate* pdt(theApp.GetNextDocTemplate(pos));
CMyDoc* pDoc;
if(pdt == NULL || (pos = pdt->GetFirstDocPosition()) == NULL)
{
ml.Unlock();
continue;
}
while(pos != NULL)
{
pDoc = (CMyDoc*)pdt->GetNextDoc(pos);
pDoc->OnIdleWT();
} // 改行がおおすぎますだとー!
0372371
2010/03/17(水) 13:09:06ソース結構削ってるから脳内補完してね
theApp::OnIdle()とExitInstance()からSetEventで起きるワーカースレッドでwhile(1)の中をWaitforMulti〜してます
0373デフォルトの名無しさん
2010/03/17(水) 14:26:59>256さんごめんよ
>>256
0374デフォルトの名無しさん
2010/03/17(水) 20:37:160375デフォルトの名無しさん
2010/03/17(水) 21:50:48表示させたメニュー(CMenu)てどうやって取得しますか?
GetSystemMenu()だと思ってたらとれなかった
0376デフォルトの名無しさん
2010/03/17(水) 21:55:190377デフォルトの名無しさん
2010/03/17(水) 22:14:10Enableさせるにはどうしたらいいでしょうか?
0378365
2010/03/18(木) 00:49:36DocViewは使ってないんですが、少し実験してみます。
ありがとうございます。
0379デフォルトの名無しさん
2010/03/18(木) 16:20:40をMFCダイアログ上に持ってきて使うとか可能ですか?・
VS2008を使ってます
宜しくお願いします
0380デフォルトの名無しさん
2010/03/18(木) 17:16:350381デフォルトの名無しさん
2010/03/19(金) 08:17:22MFCと.netじゃあ言語が違いますし
DLL?とか使うんでしょうか?
0382デフォルトの名無しさん
2010/03/19(金) 08:39:230383デフォルトの名無しさん
2010/03/19(金) 09:06:30Windows フォーム コントロールをホストでぐぐったら
CWinFormsDialogっていうのがあるみたいですね
ただ、これはマネージドC++?ってやつですね
未経験で動くか不安ですがやってみます
0384デフォルトの名無しさん
2010/03/27(土) 23:08:16完全に読み込みが終了したときに再描画をするにはどうすればいいでしょうか?
Visual C++ 2005
0385デフォルトの名無しさん
2010/03/27(土) 23:32:430386デフォルトの名無しさん
2010/03/28(日) 03:16:010387デフォルトの名無しさん
2010/03/28(日) 16:04:29どのメッセージを受け取るの?
0388デフォルトの名無しさん
2010/03/28(日) 16:21:34ON_NOTIFY メッセージで LVN_ITEMCHANGED をキャッチする
0389デフォルトの名無しさん
2010/03/29(月) 00:22:23ありがとうございます!やってみます!
0390デフォルトの名無しさん
2010/03/29(月) 00:58:25ありがとうございます。
0391デフォルトの名無しさん
2010/03/29(月) 20:14:21してそのPage内にエディット、ボタンなどのコントロールを配置しました。
ボタンが押されたことをCFormViewがで知りたいので、イベントハンドラウィザード
でCFormViewにOnBnClickedButton11を追加しましたが
OnBnClickedButton11が呼ばれません。
お分かりになる方、ご助言願います。
Visual Studio 2008
0392デフォルトの名無しさん
2010/03/29(月) 20:58:44だから、それを曾祖母さんに知らせるのは親の役目。
0393デフォルトの名無しさん
2010/03/29(月) 22:46:07子から曾祖母さんのCWnd*は取得できて、曾祖母さんのメソッドをコールするために
曾祖母さんのヘッダをincludeしたら、循環参照でビルドできないんで、
他に通知する術はありますか?
0394デフォルトの名無しさん
2010/03/29(月) 22:58:09前方宣言すりゃよかろ。
>他に通知する術はありますか?
曾祖母さんのCWnd*が取得できてるなら、曾祖母->SendMessage(「押されちゃったよ〜ん」)してもよかろ。
ナニゴトにも会話は大事。
「押されちゃったよ〜ん」は WM_APP+1 でよかろ。
0395デフォルトの名無しさん
2010/03/31(水) 23:26:06ダイアログクラス内のメンバをいじる重い処理をワーカースレッドにする際、
AfxBeginThreadにthisを渡しているものをよく見かけるんだけど、
これって、CWndオブジェクトをスレッドを跨いで使っていることにはならない?
0396デフォルトの名無しさん
2010/04/01(木) 04:59:160397デフォルトの名無しさん
2010/04/01(木) 08:06:31「通常、スレッドは自分自身が作成した MFC オブジェクトしかアクセスできません。」
上のような説明を読む限りは、動かないのではと思うのだけど。
0398デフォルトの名無しさん
2010/04/01(木) 08:53:500399デフォルトの名無しさん
2010/04/01(木) 12:16:01つか、痴れてるかw
0400デフォルトの名無しさん
2010/04/01(木) 21:53:00GetNextItem(-1,LVNI_SELECTED|LVNI_FOCUSED);
でいいですか?
0401デフォルトの名無しさん
2010/04/02(金) 10:44:420402デフォルトの名無しさん
2010/04/03(土) 03:13:04MDI
リボンにエディットボックスをつけようと思い、
MainFrameのInitializeRibbonでpPanel->Add(new CMFCRibbonEdit(IDC_RIBBON, 200) );
としていますが、実行してみるとエディットはありますが、グレイになっています。
どうすれば、エディットを使用できるようになるのでしょうか?
0403デフォルトの名無しさん
2010/04/09(金) 16:25:43・MFC FeaturePack 機能をリソースエディタで使える
・リソースエディタにリボンデザイナーの追加
・インテリセンス機能の大幅改善(1行入力した時点でコンパイルエラーを指摘)
・ClassWizard をVC6 形式で復活
・Find 機能の大幅拡張
これは買いだな
0404デフォルトの名無しさん
2010/04/09(金) 16:37:281行でよかった。もし1字だと使いもんにならん。w
0405デフォルトの名無しさん
2010/04/09(金) 19:39:18ベータ版ではまだダメだったけど。
0406デフォルトの名無しさん
2010/04/09(金) 21:26:12自分でシコシコ計算するの?なんか便利なメンバある?
0407デフォルトの名無しさん
2010/04/09(金) 21:27:39>・ClassWizard をVC6 形式で復活
Ctrl+W!!
0408デフォルトの名無しさん
2010/04/09(金) 21:29:53DT_CALCRECT
0409デフォルトの名無しさん
2010/04/09(金) 22:58:58即レスありがとー。教えてもらったのでうまく出来ました。
0410デフォルトの名無しさん
2010/04/10(土) 00:15:47リソースエディタでのデザイン時より、実行時のほうの高さが高いんですけど
なんでですか?
0411デフォルトの名無しさん
2010/04/10(土) 00:30:440412デフォルトの名無しさん
2010/04/10(土) 01:24:05フォントの違い
0413デフォルトの名無しさん
2010/04/10(土) 18:53:140414デフォルトの名無しさん
2010/04/10(土) 19:15:450415デフォルトの名無しさん
2010/04/11(日) 17:24:180416デフォルトの名無しさん
2010/04/12(月) 18:54:22「いま自分自身にスクロールバーが表示されているか(グレー化も含む)」を
知る方法はありますか?
スクロールバー領域も含めたクライアント領域のサイズが欲しいのですが、
GetClientRect()はスクロールバー領域は含まれないので、
「表示されているときにはGetSystemMetrics(SM_CXVSCROLL)の値を加える」
という処理を付けたいのです。
0417デフォルトの名無しさん
2010/04/12(月) 19:19:28>自分自身のスタイルに依存せず
の意味が不明だが、WS_VSCROLLが付加されているかどうかを調べればよいのでは?
0418デフォルトの名無しさん
2010/04/12(月) 19:38:29これでよかったのですね。
WS_HSCROLLやWS_VSCROLLって、作成時に使うものであって、
SetScrollInfo()でスクロール幅をいじって表示状態が変わったときに
勝手に連動して切り替わってくれるものではないと思ってました。
ありがとうございます。
0419デフォルトの名無しさん
2010/04/14(水) 02:05:24例えばDirectWriteに対応したCEditDWクラスとか。
0420デフォルトの名無しさん
2010/04/14(水) 13:46:480421デフォルトの名無しさん
2010/04/15(木) 15:47:33リストBOXをクリック(又はダブルクリック)したら
小窓を出すようにしたいのですがうまくいきません
リスト項目が存在しててクリックした場所が
項目の上にあれば問題ないのですが
項目が無いところをクリックしても無反応です。
ハンドラは以下のを使ってます。
ON_LBN_DBLCLK
ON_LBN_SELCHANGE
項目が無いところをクリックしても
小窓が出るようにするうまい方法ありませんか?
0422デフォルトの名無しさん
2010/04/15(木) 15:53:23CListBoxを派生してWM_LBUTTONDBLCLKあたりを自分で処理すればよいかと。
0423デフォルトの名無しさん
2010/04/15(木) 15:55:36リストボックスをリストコントロールに変えれば、お望みのことができる。
0424デフォルトの名無しさん
2010/04/15(木) 16:11:13ちょっと小窓開くだけの処理で派生とかしたくない;;
0425デフォルトの名無しさん
2010/04/15(木) 19:31:19コモンコントロール汎用のNM_CLICKとかで対応できるんじゃないか?
0426デフォルトの名無しさん
2010/04/15(木) 19:32:35。。。
0427デフォルトの名無しさん
2010/04/17(土) 18:18:50CMFCPropertyGridCtrl内のプロパティの値が変化したときのメッセージを
受け取ろうと思って以下のコードを入れてみたのですが、
プロパティを変更しても呼ばれないです・・・
メッセージマップ
BEGIN_MESSAGE_MAP(CPropertiesWnd, CDockablePane)
(中略)
ON_MESSAGE(AFX_WM_PROPERTY_CHANGED, &CPropertiesWnd::OnChangePropList)
END_MESSAGE_MAP()
int CPropertiesWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
(中略)
// CMFCPropertyGridCtrlの作成
m_wndPropList.Create(WS_VISIBLE | WS_CHILD, rectDummy, this, ID_PROP_LIST)
(中略)
}
LRESULT CPropertiesWnd::OnChangePropList(WPARAM wParam, LPARAM lParam)
{
プロパティ変更時の処理
}
0428427
2010/04/17(土) 18:27:20CMFCPropertyGridCtrl内のプロパティ値が変更されたときのメッセージを
受け取る方法は無いのでしょうか?
ご教授お願いします・・・。
0429デフォルトの名無しさん
2010/04/17(土) 18:40:360430デフォルトの名無しさん
2010/04/17(土) 19:29:362005から自動でこうなる
0431デフォルトの名無しさん
2010/04/17(土) 22:11:59CMFCPropertyGridCtrlを派生させ、
仮想関数ValidateItemData内で
CMFCPropertyGridPropertyのポインタpPropから必要な値を取得し処理をする。
0432427-428
2010/04/18(日) 01:04:04派生先で処理を書いたらできました。
ありがとうございました!
0433デフォルトの名無しさん
2010/04/18(日) 17:21:50WS_MINIMIZEBOXを設定すればいいらしいのですが、Createされた後に
このフラグをセットするにはどうすればいいのですか?
0434デフォルトの名無しさん
2010/04/18(日) 17:36:58リソースエディタで設定すればいいだけじゃないの?
何かのタイミングで最小化ボタンを追加するの?
0435デフォルトの名無しさん
2010/04/18(日) 17:53:28プロパティウィンドウにありましたね
お手数おかけしました。
ありがとうございました。
0436デフォルトの名無しさん
2010/04/19(月) 22:32:44例えばアクセラレータキーで[A]キーを使用していると、Aの文字が打てなくなります。
これでは困るので、一時的にアクセラレータキーを無効にする方法を相談したいです。
わかる方いらっしゃいましたらどうかご教示お願いします。
0437デフォルトの名無しさん
2010/04/19(月) 22:38:37これが間違い。Ctrl+A とかにする。
0438デフォルトの名無しさん
2010/04/19(月) 22:43:46ありがとうございます。
一応[A]キーってのは極端な例のつもりだったのですが、
WM_CHARで使うキーは避けるしかないということなんですね。
0439デフォルトの名無しさん
2010/04/20(火) 17:24:57常に気にしてなきゃいけなくなるだろう
0440デフォルトの名無しさん
2010/04/20(火) 22:14:21メインウィンドウのPreTranslateMessage()で。
CFrameWnd::PreTranslateMessage()のソースを読めば分かる
>>421
ついでに、そちらも派生したくないのであればPreTranslateMessage()でいける。
0441デフォルトの名無しさん
2010/04/20(火) 22:28:000442デフォルトの名無しさん
2010/04/20(火) 22:41:22何か疑問でも?
0443デフォルトの名無しさん
2010/04/21(水) 09:32:25複数行のedit上にフォーカスある時はリターンで閉じないだったかな
みんなリターンやエスケープで閉じないよう直してるから忘れた。
0444デフォルトの名無しさん
2010/04/21(水) 15:45:110445デフォルトの名無しさん
2010/04/22(木) 02:33:24CString str(_T("\"));
とするとコンパイルエラーなるから
CString str(_T("\\"));
としたら、本当に2つ入っている・・・
0446デフォルトの名無しさん
2010/04/22(木) 03:13:550447デフォルトの名無しさん
2010/04/22(木) 03:53:410448デフォルトの名無しさん
2010/04/22(木) 07:58:45確認方法自体が間違っていないか?デバッガで中身を覗いてみろ。
0449デフォルトの名無しさん
2010/04/22(木) 23:44:43その子ダイアログの中のコントロールにフォーカスがある状態だと、
ALTを押してもメニュー(CMFCMenuBar)に移ってくれません。
さらに、逆にメニュー表示中にそれらのコントロールをクリックすると、
メニューが消えないままフォーカスが移ってしまいます。
CFormViewやCPaneDialog自身に置いてあるコントロールからだと
ちゃんと動くのですが、このへんの仕組みに詳しいかたはいらっしゃいませんか?
0450デフォルトの名無しさん
2010/04/23(金) 00:32:20SetExtendedStyleを実行してますが、設定されていないようです。
spy++で確認
なぜですか?
0451デフォルトの名無しさん
2010/04/23(金) 10:35:53というか子ダイアログだとか置くだとかどうにでも取れる表現だな
0452デフォルトの名無しさん
2010/04/23(金) 21:14:28確認方法が間違っているから。
ウィンドウの拡張スタイルとLVS_EX_???とは無関係。
0453デフォルトの名無しさん
2010/04/23(金) 21:39:44これで確認してみては?
CListCtrl::GetExtendedStyle
0454デフォルトの名無しさん
2010/04/23(金) 21:49:01LVS_EX_DOUBLEBUFFERはcomctl32のバージョン6からのものだから
manifestでバージョン6のものが適用されているかどうか確認してみ。
あと、「LVS_EX_DOUBLEBUFFER」がちゃんと設定されていても
spy++のバージョンによっては拡張スタイル欄に出てこないものがある。
VC2008付属のspy++(ver9.00.30729)ではちゃんと出るが、
例えばVC6付属のspy++(ver6.00.8168)では出ない。
VC6のは新しいスタイルができる前のものなんだから当然のこと。
0455デフォルトの名無しさん
2010/04/24(土) 17:46:10プログラムの概要は、社内LANの複数のIPアドレスに対し、
スレッドを複数立てて順番にpingを打ち、対象アドレスの生死を判定するものです。
IPアドレスは概算で3000件以上で、それを50個ほどのスレッドを立てて
順番に処理していく事を想定しています。
pingを打つ処理はクラス化してあり、クラス構築時にDLLのハンドルを渡し、
pingを打つ関数は、アドレスを文字列で渡し、結果をintで返します。
このクラスオブジェクトをスレッドに持たせて実行したいと考えてます。
スレッドの挙動としては、起動したらICMPの初期化をし、一覧からIPアドレスを引き取り、
pingを打って結果を格納し、また次のアドレスへと進んでいきます。
そして、全てが終わったら自殺するものを想定しています。
また呼び出し側では、処理状況をダイアログのブログレスバーに表示し、
全てのスレッドが終了したら開始前の状態に戻ります。
中止ボタンを押せば、その時点で全てのスレッドを終了させます。
このようなスレッドの実装方法を教えてください。
環境はVC6です。
なお、セキュリティ管理の都合上、Vector等で探してきた既存ツールの使用は禁止です。
0456デフォルトの名無しさん
2010/04/24(土) 17:59:17arpにしよう
0457デフォルトの名無しさん
2010/04/24(土) 18:07:38pingを打つ処理を担当する50個のスレッドを生成。
スレッド側は新しいタスクの取得しては応答を戻し、
新しいタスクが無い時は終了する。
コントローラ側は全スレッドが完了したら作業終了と判断する。
こんな感じ?
0458299
2010/04/24(土) 18:58:260459デフォルトの名無しさん
2010/04/24(土) 19:00:52既存のまともなネットワーク管理ツールがどうやってるかぐらい調べた方がいい。
0460デフォルトの名無しさん
2010/04/24(土) 19:29:15本気でそういう方法がよけりゃスパムメール送るツールでも参考にすればいい。
0461デフォルトの名無しさん
2010/04/25(日) 03:02:270462デフォルトの名無しさん
2010/05/16(日) 07:33:09今は前より選択肢が増えてるから最盛期には及ばないかな?
ツールはMFC派な俺には楽しみな限り
資料とかいっぱい出てくれると最高なんだが
0463デフォルトの名無しさん
2010/05/16(日) 08:12:440464デフォルトの名無しさん
2010/05/16(日) 15:52:03Vistaや7なんかの新世代OS向けの
最新機能を備えたネイティブアプリを開発する上では強力なツールにはなりそうだ
0465デフォルトの名無しさん
2010/05/16(日) 23:53:57標準で作成される
ウィンドウメニューの「新しいウィンドウを開く」の挙動を
VisualStudioと同じように現在のビューと同じ内容のウィンドウを開くにしたいのですが
とりあえず泥臭い方法ですが
void CMainFrame::On*******()
{
// 現在アクティブなドキュメントとヴューを取得
CMDIChildWnd* pActiveChild = MDIGetActive();
CDocument* pDocument = pActiveChild->GetActiveDocument() ;
CView* pView = pActiveChild->GetActiveView() ;
// 現在のビューのテキストを取得
int ndx = pView->GetWindowTextLength()+1;
wchar_t *buff = new wchar_t[ndx] ;
pView->GetWindowText(buff, ndx) ;
// ドキュメントに新しいビューを追加し有効にする
CDocTemplate* pTemplate = pDocument->GetDocTemplate();
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
pTemplate->InitialUpdateFrame(pFrame, pDocument);
// 新しく開かれたビューにテキストを書き込む
pView = pFrame->GetActiveView() ;
pView->SetWindowText ( buff ) ;
pView->UpdateData() ;
delete [] buff ;
}
と実装したのですが
もう少しスマートな方法ないですか?
標準で用意されててもいいような気もするのですが・・・
0466デフォルトの名無しさん
2010/05/17(月) 12:59:10チュートリアルにスプリッタでそういう仕様のサンプルがあった
0467デフォルトの名無しさん
2010/05/17(月) 23:05:45>int ndx = pView->GetWindowTextLength()+1;
>wchar_t *buff = new wchar_t[ndx] ;
>pView->GetWindowText(buff, ndx) ;
CEdit::GetHandle()を使えば、バッファを用意しなくてすむ・・・程度かな。
0468デフォルトの名無しさん
2010/05/22(土) 17:01:06みたいなダウンキャストをしてもちゃんと動いてるっぽいんですが
MFCではそれが安全なように設計されてると考えてOKですか?
それとも危険な場合がありますか?
0469デフォルトの名無しさん
2010/05/22(土) 17:17:26MFC がサポートする CObject の実行時型指定機構では、マクロ DECLARE_DYNAMIC、IMPLEMENT_DYNAMIC、
DECLARE_DYNCREATE、IMPLEMENT_DYNCREATE、DECLARE_SERIAL、IMPLEMENT_SERIAL を使います。
これらのマクロは、実行時の型チェックによって安全なダウンキャストを保証します。
0470デフォルトの名無しさん
2010/05/26(水) 15:30:04以下の関数がビルド時にエラーになって使えないのですが、原因がなにかわからないでしょうか?
: error C2039: 'SetSelectedColumn' : 'CListCtrl' のメンバではありません。
GetItemCount()などは問題なく使えているんですが、SetSelectedColumnやSetViewが
上のエラーが出てしまいます。
自分のマウスによる操作以外でアイテムを選択状態にしたいのですが、
上の関数以外を使って実現することってできるのでしょうか?
0471デフォルトの名無しさん
2010/05/26(水) 15:39:52#define _WIN32_WINNT 0x0501
0472デフォルトの名無しさん
2010/05/26(水) 16:02:15ビルドは_WIN32_WINNTの変更だけでは更にエラーがでたので、
stdafx.hにある4つを書き換えることでエラーは消えたのですが、SetSelectedColumnを
つかっても選択状態になることはありませんでした。
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
#define _WIN32_WINDOWS 0x0501
#define _WIN32_IE 0x0501
べつのキーワードでググったら使える関数(SetItemState)が見つかったので、問題は
解決しました。ありがとうございました。
0473デフォルトの名無しさん
2010/06/01(火) 16:24:24inet_addrが返す値がちがうんですけどどういうことですか?
どのように使用してますか?
例えば”127.0.0.1”の場合
GetAddressは0x7f000001
inet_addrは0x0100007f
を返します
0474デフォルトの名無しさん
2010/06/01(火) 17:02:03inet_addrはビッグエンディアンで返すから。
ntohlとかで変換する。
0475デフォルトの名無しさん
2010/06/01(火) 17:05:04他のライブラリと行ったり来たりするから変換が必要になる
0476デフォルトの名無しさん
2010/06/02(水) 07:09:37CFileDialogを使用中にカレントディレクトリが変わらないようにする方法ってありますか?
OFN_NOCHANGEDIRを指定した場合、ファイル選択後に元に戻るのは確認しましたが
選択中はどうしても選択しているフォルダにかわってしまいました。
0477デフォルトの名無しさん
2010/06/02(水) 08:06:190478デフォルトの名無しさん
2010/06/02(水) 08:24:53CFileDialogやめて直にapi呼べばいい。
0479デフォルトの名無しさん
2010/06/02(水) 08:30:28ならMFC関係ないな
0480デフォルトの名無しさん
2010/06/02(水) 10:57:520481デフォルトの名無しさん
2010/06/02(水) 12:57:24ヴァカは氏ねば? コモンダイアログ使ったことないだろ、雑魚PGが。
>>476
呼ぶ前にGetCurrentDirectory、呼んだ後にSetCurrentDirectory。
0482デフォルトの名無しさん
2010/06/02(水) 13:03:440483デフォルトの名無しさん
2010/06/02(水) 13:35:12質問者が
OFN_NOCHANGEDIRを指定した場合、ファイル選択後に元に戻る
と言ってるからそんなことしても意味ないだろ
0484デフォルトの名無しさん
2010/06/02(水) 14:05:15質問者がOFN_NOCHANGEDIRも出してるのに
それすらも知らないとはw
それとも3行以上の文章は読めないとか
0485デフォルトの名無しさん
2010/06/02(水) 14:08:13>CFileDialogを使用中にカレントディレクトリが変わらないようにする
具体例を示せ。
どういう状況のとき、どうしたいのか。
0486デフォルトの名無しさん
2010/06/02(水) 18:45:500487デフォルトの名無しさん
2010/06/02(水) 20:09:530488デフォルトの名無しさん
2010/06/02(水) 23:31:05VC6の時はついてたけど。今はどこにあるのかな?
0489デフォルトの名無しさん
2010/06/03(木) 00:00:200490デフォルトの名無しさん
2010/06/03(木) 00:15:55というか入っていなかった日には非難轟轟だな。
0491デフォルトの名無しさん
2010/06/03(木) 00:28:58LineToなどで線を引いいたりするにはどうすればいいでしょうか?
0492491
2010/06/03(木) 00:29:39VC++2005です
0493デフォルトの名無しさん
2010/06/03(木) 14:48:26小 M // ̄> ´  ̄  ̄ `ヽ Y , ´ ) F え
学 F L_ / / ヽ C |
生 C / ' ' i マ
ま が / / く !? ジ
で 許 l ,ィ/! / /l/!,l /厶,
だ さ i ,.lrH‐|'| /‐!-Lハ_ l /-!'|/l /`'メ、_iヽ
よ れ l | |_|_|_|/| / /__!__ |/!トi i/-- 、 レ!/ / ,-- レ、⌒Y⌒ヽ
ね る _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ ,イ ̄`ヾ,ノ!
l の 「 l ′ 「1 /てヽ′| | | 「L! ' i'ひ} リ
は ヽ | ヽ__U, 、ヽ シノ ノ! ! |ヽ_、ソ, ヾシ _ノ _ノ
-┐ ,√ !  ̄ リ l !  ̄  ̄ 7/
レ'⌒ヽ/ ! | 〈 _人__人ノ_ i く //!
人_,、ノL_,iノ! /! ヽ r─‐- 、 「 L_ヽ r─‐- 、 u ノ/
/ / lト、 \ ヽ, -‐┤ ノ キ 了\ ヽ, -‐┤ //
ハ キ { / ヽ,ト、ヽ/!`hノ ) モ |/! 「ヽ, `ー /) _ ‐'
ハ ャ ヽ/ r-、‐' // / |-‐ く | > / / `'//-‐、 /
ハ ハ > /\\// / /ヽ_ ! イ ( / / // / `ァ-‐ '
ハ ハ / /! ヽ レ'/ ノ > ' ∠ -‐  ̄ノヽ /
{ i l ! / フ / -‐ / ̄/〉 〈 \ /!
0494デフォルトの名無しさん
2010/06/03(木) 19:14:07気がつかなかった。
0495デフォルトの名無しさん
2010/06/05(土) 16:31:59移動させたい場合に用意されている関数で実現する方法ってないでしょうか?
ググってもソートはあるのですがアイテム単体での移動をしてる例題が
ありませんでした。
左の表示を右のように並べ替えたい。
0001 テストデータ1 サンプル1 0001 テストデータ1 サンプル1
0002 テストデータ2 サンプル2 0005 テストデータ5 サンプル5
0003 テストデータ3 サンプル3 0002 テストデータ2 サンプル2
0004 テストデータ4 サンプル4 0003 テストデータ3 サンプル3
0005 テストデータ5 サンプル5 0004 テストデータ4 サンプル4
…
…
itemMove(5,2)みたいに出来ればいいのですが・・・
ごり押しで書き換えれば実現できそうですが、内容のコピーの処理時間が無駄に
成りそうなので挿入1回で済む方法があればと思いまして。
0496デフォルトの名無しさん
2010/06/05(土) 16:38:180497デフォルトの名無しさん
2010/06/06(日) 01:49:17ググりかたが悪いんだろ。いや、悪いのは頭か。
ドラッグで順番入れ替えるサンプルとか見たことないのか、この低脳。
0498デフォルトの名無しさん
2010/06/06(日) 03:31:46コントロールに全部任すのは楽だけど、いろいろ拡張したいときに
不便になるからオーナーデータがお勧め。
0499デフォルトの名無しさん
2010/06/06(日) 11:15:080500495
2010/06/06(日) 17:20:35挿入はInsertItemのアイテムのインデックス値を指定してやれば可能でした。
最初のリストを作ったときはアイテム数をインデクス値にして最後に追加する処理をしていたので、
思い込みでリストの最後にしか追加されないと思って、この関数は全くチェックしていませんでした。
0501デフォルトの名無しさん
2010/06/06(日) 19:14:34難しいとかじゃなくて、センスのなさだろ。
ふつうに考えて、どこに挿入するかなんて、指定できて当然。
そういうことに頭の回らない、ヴァカさ加減を自覚しろ。
0502デフォルトの名無しさん
2010/06/07(月) 01:05:09質問してみてから自分なりの回答に気がつくパターンだな。
まぁ慣れだ。いろいろ試してみるといい。
0503デフォルトの名無しさん
2010/06/15(火) 20:33:12表示がグレーになって追加できません。
他のプロジェクトはできるのですが、、、
プロジェクトファイルが壊れちゃったんでしょうか?
0504デフォルトの名無しさん
2010/06/15(火) 20:34:040505デフォルトの名無しさん
2010/06/15(火) 20:39:08ncbファイル消したら治りました。。。クソVSめ。。。
0506デフォルトの名無しさん
2010/06/16(水) 12:00:05これをバイト数で返す方法ありますか?
大文字小文字混在文字列だと単純に×2にもできませんよね??
0507デフォルトの名無しさん
2010/06/16(水) 12:28:53でどう?
UNICODEの時は単純に文字数×2だし
マルチバイトの時はGetLength==バイト数だし
0508デフォルトの名無しさん
2010/06/17(木) 07:32:58ってやってもレポートビューになりません。
0509デフォルトの名無しさん
2010/06/17(木) 08:51:150510デフォルトの名無しさん
2010/06/20(日) 19:06:49どのような関数を使用するのか教えてください。
0511デフォルトの名無しさん
2010/06/20(日) 19:25:17クリップボードの内容を弄りたい、って事でOK?
MFCに拘るなら、
COleDataObject::AttachClipboardでデータを持って来たり、
COleDataSource::SetClipboardでデータをセットしたりとか、
そんな感じかと。
0512デフォルトの名無しさん
2010/06/20(日) 20:00:440513デフォルトの名無しさん
2010/06/23(水) 23:18:48http://tsushima.2ch.net/test/read.cgi/news/1277208679/
0514デフォルトの名無しさん
2010/06/23(水) 23:48:00BOOL bDefault=FALSE;
size_t nSize = WideCharToMultiByte(CP_ACP, 0, szData/*データ*/, -1, NULL, 0, NULL, &bDefault);
でどう?
0515名無しさん@そうだ選挙に行こう
2010/07/11(日) 17:09:28そのタブが前に来ないようにするのってどうやんの?
0516名無しさん@そうだ選挙に行こう
2010/07/11(日) 20:16:520517名無しさん@そうだ選挙に行こう
2010/07/11(日) 23:12:41・→――
↓
|
というデフォルトの座標系を
|
↑
・→――
|
|
このように変換したいと考えています。
(原点を左上隅から、(左隅、コントロール中央)に移動し、Y軸を反転させる)
pDC->SetViewportExt(300, -300);
pDC->SetViewportOrg(0, 300/2);
とやってみましたが、Y軸は反転せず、ピクチャコントロールの
上半分も描画されない状態です。どなたか解決方法ご教示お願いします。
0518デフォルトの名無しさん
2010/07/12(月) 02:59:110519デフォルトの名無しさん
2010/07/12(月) 03:41:23WM_TIMERがどうしても見つかりません。どこにあるのでしょうか?
よろしくお願いします。
環境:VC++ 2008, MFC
参考URL:http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/program/C/DialogBase/control/timer/index.htm
0520デフォルトの名無しさん
2010/07/12(月) 19:43:33ググってみるとVisual Studioのウォッチウィンドウ云々と出てくるのですが、
まさにそういったことがしたいのです。
ヒントでもよいので、教えていただけると嬉しいです。
>>519
VC++ならクラスビューで、クラスを選択してプロパティ。
プロパティビューの中でメッセージボタンをクリックするとWM_TIMERがあるはずです。
0521デフォルトの名無しさん
2010/07/12(月) 20:05:52こんなの?
http://www.codeguru.com/cpp/controls/treeview/classes/article.php/c13167/Tree-List-Control.htm
0522デフォルトの名無しさん
2010/07/12(月) 20:12:17色んなサイト見てみたのですけど、
「自前で」と書かれてるものばかりで困ってしまったもので。
0523デフォルトの名無しさん
2010/07/12(月) 20:14:51読んでみます。
ありがとうございます。
0524デフォルトの名無しさん
2010/07/16(金) 15:46:110525デフォルトの名無しさん
2010/07/16(金) 16:55:40おまえの脳みそじゃ無理だな
0526デフォルトの名無しさん
2010/07/16(金) 18:53:590527デフォルトの名無しさん
2010/07/16(金) 20:44:240528デフォルトの名無しさん
2010/07/21(水) 08:15:40わからないならレスすんなよ
0529デフォルトの名無しさん
2010/07/21(水) 13:30:540530デフォルトの名無しさん
2010/07/21(水) 13:34:260531デフォルトの名無しさん
2010/07/21(水) 13:38:580532デフォルトの名無しさん
2010/07/21(水) 13:47:460533デフォルトの名無しさん
2010/07/23(金) 16:23:27OnQueryEndSession で FALSE を返しても画面が暗くなり、
終了しないプログラム一覧が表示されてしまいますが、これを回避したいです。
0534デフォルトの名無しさん
2010/07/23(金) 16:32:45MFC関係ないし。
なんとなく文面もムカつくから、スレチとだけ言っておく。
0535デフォルトの名無しさん
2010/07/23(金) 16:35:450536デフォルトの名無しさん
2010/07/23(金) 16:41:360537sage
2010/07/28(水) 07:20:24WM_COMMAND内で、どのアクセラレーターが押されたのか
判別する方法ってない?
もしくは、アクセラレーターに付属のパラメーターをつけて、
WM_COMMANDで取得する方法。
ユーザーが動的に追加していくコマンドとして
一つのCOMMANDを複数のアクセラレーターで共有しているので、
それぞれを判別したい。
0538デフォルトの名無しさん
2010/07/28(水) 13:29:56使ってるなら、lParamでアクセスできるようにして入れるとか?
0539537
2010/07/28(水) 14:22:33lParamは0だった。
0540デフォルトの名無しさん
2010/08/05(木) 15:02:35PreCreateWindow を上書きしてもコールされません。
OnCreateも駄目でした。
クラス内で生成時にスタイルを設定させたいのですが
どうやればいいのでしょうか?
0541デフォルトの名無しさん
2010/08/05(木) 20:25:51あれは、既に作成済みのコントロールに対してサブクラス化することで、
派生クラスにメッセージをルーティングしているだけだから。
普通にCreateから始めるしか無いんじゃないか?
0542デフォルトの名無しさん
2010/08/07(土) 15:07:34目的のスタイルのものを表示してアクティブにしてやれば解決だぜ
0543デフォルトの名無しさん
2010/08/12(木) 19:50:31この場合CAsyncSocketをCSocketみたいな同期クラスに作り直して使った方がいいんだろうか?(CSocketは嫌)
「非同期ソケットでいけるだろ」とか「同期ソケットでマルチスレッドの方が簡単だろ」とかアドバイスよろしく。
0544デフォルトの名無しさん
2010/08/13(金) 19:12:41普通に非同期でいけるだろ。
そもそも同期ソケットでマルチスレッドとか、複数アカウントを同時にチェックしたいとか
そういうことか? せいぜい数個のアカウントならどっちでもいいだろ。アフォか。
0545デフォルトの名無しさん
2010/08/13(金) 20:23:500546デフォルトの名無しさん
2010/08/19(木) 06:22:110547デフォルトの名無しさん
2010/08/28(土) 14:56:25最小化ボタンを付けるのを忘れてしまいました、後から追加することはできないのでしょうか?
0548デフォルトの名無しさん
2010/08/28(土) 15:26:30事故解決シマスタ
0549デフォルトの名無しさん
2010/09/10(金) 20:09:23などでググったんだけどわからなかったから教えてください。
CListCtrlのサブアイテムのテキストを複数行にして、
セル(?)の高さも適切に調節したいんだけど、やる方法はありますか?
0550デフォルトの名無しさん
2010/09/10(金) 21:48:26事故解決シマスタ
0551デフォルトの名無しさん
2010/09/11(土) 02:31:44オーナードローのやり方がわからないって話か?
0552デフォルトの名無しさん
2010/09/11(土) 08:10:28MFCのみでやりたいんじゃないか
0553デフォルトの名無しさん
2010/09/12(日) 00:57:17サンプルなんて、普通に見つかるじゃん。
それとも、英語はダメなヴァカ?
0554デフォルトの名無しさん
2010/09/13(月) 20:50:18複数のクライアントからの接続を受付られるようにしようとしてます。
1対1で通信できるところまでは作成できました。
OnReceiveで、受信できる準備ができたことはわかるが、どのソケットから受信可能なのか
知る方法はありますか?複数との通信の場合は、どのようにしたらいいのでしょうか?
0555デフォルトの名無しさん
2010/09/13(月) 20:53:110556デフォルトの名無しさん
2010/09/13(月) 21:05:44クライアントからの接続要求は、
Acceptメソッドで別々のCAsyncSocketに振り分ける事になると思うのだが。
何か作り方を間違っていないか?
0557デフォルトの名無しさん
2010/09/13(月) 21:40:15作り方は間違ってないだろ。
複数セッションの概念は理解してなさそうだが。
0558デフォルトの名無しさん
2010/09/13(月) 22:56:49CAsyncServerDlgクラスで CArray<CServerASock*> m_lstcSockをメンバに持たせること。
OnAcceptで、クライアントと通信するソケットを配列に追加する。
CServerASock::OnReceiveで以下のようにソケット自身も渡す。
void CServerASock::OnReceive(int nErrorCode)
{
//if (m_dlgP) m_dlgP->OnReceive(nErrorCode); //修正前
if (m_dlgP) m_dlgP->OnReceive(this, nErrorCode); //修正後
CAsyncSocket::OnReceive(nErrorCode);
}
このようにしてみると、CAsyncServerDlgで管理するソケット配列と受信できるソケット
との対応が取れるようになり、うまくいきました。
0559デフォルトの名無しさん
2010/09/17(金) 10:09:29ハンドラを追加しようとしたら
コード要素’XXXX’が読み取り専用であるため、追加削除操作は実行できません
と、エラーになります。
いろいろネットで探して解決策をやってみました
・関連するソースを閉じる
・ncbファイルを削除する
しかし、どれをやっても解決しません
手動で追加できなくもないですがかなり不便です
どうか解決策しってたら教えてください
0560デフォルトの名無しさん
2010/09/17(金) 10:13:130561デフォルトの名無しさん
2010/09/17(金) 10:32:370562559
2010/09/17(金) 11:05:19色々いじってたら治りました
恐らくxxxxのヘッダファイルをプロジェクトに
登録してなかったから見たいです
#includeで読んでたから大丈夫かと思ったんですが
VS側からみるとヘッダどこ?って感じだったんだと思います
0563デフォルトの名無しさん
2010/09/17(金) 14:28:12ダイアログの中にリストコントロールを置いておいて、
セルをクリックするとエディットコントロールが起動するって機能を作っています。
このときのエディットコントロールはCEditを継承したもの(CMyEditとします)です。
このエディットは複数行OKであり、Enterキーにより改行させるところまでは実装しました。
改行キーが押されたときに、テキストの高さからRectを計算し、MoveWindowしています。
現状、このコントロールは、改行を増やしていっても、
親ウィンドウ(この場合はリスト)の最下部より下には表示できません。
これをなんとか、親ウィンドウ高さに関係なく、エディットコントロールの高さを決めることはできませんか?
1つだけ、試したみた方法がありますがうまくいきませんでした↓↓
CreateのときにWS_CHILDを指定していると親ウィンドウの内部にしか表示できない、
という情報を見つけたので、CreateExを使ってWS_POPUPを指示してCreateしようとしましたが、
エラーが発生しました(戻り値0)。下のように書きました。
myEdit.CreateEx(0, "EDIT", 0, WS_POPUP|ES_MULTILINE.(略), rect, parent, -1);
0564デフォルトの名無しさん
2010/09/17(金) 15:26:13別にウインドウ出してそこにコントロール貼るのが普通な気がする
0565デフォルトの名無しさん
2010/09/17(金) 15:48:58根本的な部分で、Windowsプログラミングを理解してない気がするが、
MFCとかC#とか、Win32 APIを直に使った経験がないからそうなるんだろうか。
いまどきProgramming Windowsを読めとはいいにくいが、ネット上での情報収集ぐらいできんものか。
0566デフォルトの名無しさん
2010/09/17(金) 15:55:06なるほど、最悪それで回避可能かもしれません
>>565
ググッたか→4時間ぐらい戦った
Win32 API→経験なし
MFC経験だったそんなにないけど、やらなきゃいけないんですよ。
CreateExのやり方調べたり、自作クラスをRegisterしてみたりもしましたよ。
でもたどり着けなかったんです。
そんなに言うならきっと経験豊富だと思うので
キーワードだけでも教えてくれるとうれしいなぁ
0567デフォルトの名無しさん
2010/09/17(金) 15:58:360568デフォルトの名無しさん
2010/09/17(金) 16:21:41たとえば、ツリービュー、リストビューのラベル編集。
ツールバーのサブメニューだったり、ドロップダウンリストのリスト部だったり。
イベントを受けて、領域を決めて、ウインドウを表示する。
表示内容は異なるが、やってることは全部一緒。ラベル編集はともかく、他のは親のサイズに関係なく表示できてるでしょう?
(ラベル編集でもできるけど)
0569デフォルトの名無しさん
2010/09/17(金) 16:26:03追記:使うのはPOPUPであってる
0570デフォルトの名無しさん
2010/09/17(金) 16:35:40いや、MFCならクラスだからスタイルなんか気にせずCEditだろ。
ttp://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c1077
0571デフォルトの名無しさん
2010/09/17(金) 16:38:53実は今回修正しているソースにリストから起動するコンボボックスがあるので見てみました。
確かに、コンボボックスは親のサイズに関係なく描画できていました。
ただ、そのコンボボックスのCreateにはWS_CHILDを使っているし、
特別なことをやっているようには見えませんでしたが…
POPUPだということなので(ありがとうございます)、さらに調べてみます。
0572デフォルトの名無しさん
2010/09/17(金) 16:44:01はみ出るのはドロップダウンだけ
0573デフォルトの名無しさん
2010/09/17(金) 16:49:210575デフォルトの名無しさん
2010/09/17(金) 16:52:420576デフォルトの名無しさん
2010/09/17(金) 16:54:320577571
2010/09/17(金) 19:07:27もし、心優しい誰かが、ここ見ればすぐわかるからてめぇで読めやっつって
どこか教えてくれると最高。
では、ひとまずお世話んなりました
0578デフォルトの名無しさん
2010/09/17(金) 19:28:54http://www.youtube.com/watch?v=P5sWncFiYnA
0579デフォルトの名無しさん
2010/09/17(金) 21:01:26なんか難しく考えすぎてないか?
親をリストコントロールにしてるから、コントロールの領域でクリップされてるんだろ?
親の指定をダイアログにしてやれば解決するよ。試してみれ。
0580563
2010/09/17(金) 23:10:49ダイアログ→エディットになるようにしてみたけど、確かだめだったような…
ちなみにエディットはリストがcreateしています。
せっかくアドバイスいただいたとこ申し訳無いのですが、
確認できないので、また来ます。
0581デフォルトの名無しさん
2010/09/18(土) 08:38:05ダイアログを親にしたところで、結局そのダイアログの外には出せないよ。
0582デフォルトの名無しさん
2010/09/18(土) 08:58:04参考になるサイトない?
0583デフォルトの名無しさん
2010/09/18(土) 09:20:190584デフォルトの名無しさん
2010/09/18(土) 14:20:29VS2010で調べてみたが、nIDに-1を指定しているのが原因っぽい。
Win32レベルでエラー返しているので2005でも事情は変わらないかと。
WS_POPUPだと、この引数はメニューハンドルと解釈されるので、
こんなメニューハンドル知らね、ってところなんじゃないか?
0585デフォルトの名無しさん
2010/09/18(土) 14:30:35リストコントロールでクリップされる→ダイアログを親に
これだけ分かってりゃ、そんなこと言われなくても分かるだろ。ヴァカが。
ダイアログでのクリップを避けるなら、デスクトップを親にして、ダイアログの
移動にあわせてMoveWindow。
他人の揚げ足とるぐらいしか能(脳だな)がないなら、部屋から出てくるなよ。
0586デフォルトの名無しさん
2010/09/18(土) 15:01:210587デフォルトの名無しさん
2010/09/18(土) 15:26:05ヒント:自炎
0588デフォルトの名無しさん
2010/09/19(日) 13:01:000589デフォルトの名無しさん
2010/09/19(日) 13:23:02というか、最近の拡張は全部趣味でやっているとしか思えんw
0590デフォルトの名無しさん
2010/09/19(日) 13:32:040591デフォルトの名無しさん
2010/09/19(日) 15:15:450592デフォルトの名無しさん
2010/09/19(日) 15:32:380593デフォルトの名無しさん
2010/09/19(日) 17:14:290594デフォルトの名無しさん
2010/09/23(木) 18:08:11メッセージボックスを閉じるにはどうしたらいいでしょうか?
0595デフォルトの名無しさん
2010/09/23(木) 18:41:070596デフォルトの名無しさん
2010/09/24(金) 15:25:504台の最近買ったサーバー機(WindowsServer2008-32bit)があります
そのうち3台は買ってきたそのままで、1台は自分でクリーンインストールしなおしました。
ここに同じプログラムを起動してfor文の重い処理を走らすと
クリーンしたPCだけまともな速さで動いて他の3台は遅すぎです
処理が動いてない時は0%なので他のプログラムが邪魔してるようにも思えず
どうしてこんなに処理速度に影響がでてるんでしょうか?
CPUはXeon E3110 3GHzです
このような現象を知っていたら解決策を教えてください
0597デフォルトの名無しさん
2010/09/24(金) 16:27:250598デフォルトの名無しさん
2010/09/24(金) 16:52:380599デフォルトの名無しさん
2010/09/24(金) 17:13:21ウイルス対策ソフト関係は入ってないです
もう、全Pcインストールし直しを考えてます
全然原因がわからない
0600デフォルトの名無しさん
2010/09/24(金) 17:18:530601デフォルトの名無しさん
2010/09/24(金) 18:38:36MFCがプログラムの全部の動きを仕切ってるとでも思ってるのか?
0602デフォルトの名無しさん
2010/09/24(金) 18:59:320603デフォルトの名無しさん
2010/09/24(金) 19:12:020604デフォルトの名無しさん
2010/09/24(金) 22:13:51MFCで作ったプログラムで問題が出ていると書いてある
つまるMFCを使わないプログラムなら差が出ないのかどうかをはっきりさせろ
0605デフォルトの名無しさん
2010/09/28(火) 11:27:57VCのセットアッププロジェクトであるPCにソフトを入れました。
その時のアイコンが気に入らなかったので作りなおして
新たにソフトを入れ直しました。
その後に、デスクトップに手動でショートカットを作ったら
デスクトップ上だけ前のアイコンに変わりました。
前のアイコンを保持していたexe等はアンインストール&完全削除してるのに
なぜ前のアイコンが出てくるんでしょうか。
最新のexe内には前のアイコンは保持されてません
恐らくWindowsが保持してる?気がするんですが
Windowsが保持してるアイコン情報削除する方法ありますか?
0606デフォルトの名無しさん
2010/09/28(火) 11:33:280607デフォルトの名無しさん
2010/09/28(火) 11:36:550608デフォルトの名無しさん
2010/09/28(火) 11:41:12再起動
0609デフォルトの名無しさん
2010/09/28(火) 12:05:45http://hibari.2ch.net/test/read.cgi/win/1283383900/
0610デフォルトの名無しさん
2010/09/28(火) 12:25:13アイコンキャッシュをクリア
0611デフォルトの名無しさん
2010/09/28(火) 13:00:33クリアして再起動してもダメでした
午後もつぶれそう
0612デフォルトの名無しさん
2010/09/28(火) 13:26:470613デフォルトの名無しさん
2010/09/28(火) 14:09:45自己解決しますた
0614デフォルトの名無しさん
2010/09/28(火) 16:42:55こっち来たら自己解決って、、、吹いた
騙り?
0615デフォルトの名無しさん
2010/09/30(木) 13:58:33中古でVS2005買うかもしれないので・・
0616デフォルトの名無しさん
2010/09/30(木) 14:34:48が、2008 or 2010の方がいいな。
0617デフォルトの名無しさん
2010/09/30(木) 16:25:08オヌヌメは2008か2010ですか。ありがとうございます。
私のPCは2008Expのソースを保存するたびに固まるので
2005にしたいんです(;ω;)
できると聞いて、うれちんこ☆
0618デフォルトの名無しさん
2010/09/30(木) 17:06:08ここでこんな質問をしてる時点でほぼ不可能だとは思うが・・・。
0619デフォルトの名無しさん
2010/09/30(木) 17:15:02だったら2008か2010のがいいし、2008Sp1以降なら
ウィザードでクリックするだけでタブ付きMDIが出来上がるw
0620デフォルトの名無しさん
2010/10/01(金) 21:19:31ぽっくんのDDR1512MBのマシンじゃ、2008は固まってしまうんです><;
0621デフォルトの名無しさん
2010/10/02(土) 01:19:47家のPCもDDRの1.5GBだが、x64Win7+VS2010を動かせているぞ。
……とかボケてみたり。環境は嘘じゃないけど。
0622デフォルトの名無しさん
2010/10/02(土) 10:29:200623デフォルトの名無しさん
2010/10/04(月) 10:48:24自分で考えたのはファイルサイズ分のメモリを動的に確保して
ファイルの内容をごそっとメモリに展開します。
そして、CMemFileか何かにメモリを割り付けて
ファイルのごとくアクセスするってやり方です。
もっと簡単に出来そうな方法ありますでしょうか?
VSは2005です
ちなみに読ませたいファイルはテキストファイルで
カンマ区切りで情報が格納されています。
したがってfgetsで1行1行読み込ませています
行が10万行とかあるので読み込むのに
20秒とかかかってしまいます。
3秒くらいでサクッと読めたら嬉しいです
0624デフォルトの名無しさん
2010/10/04(月) 11:32:49(シークタイムとヘッダ移動の発生回数を減らす)
プログラム的な解決ではないが、
・Ramphantomを入れる
・SSDを使う
0625デフォルトの名無しさん
2010/10/04(月) 12:42:04でぐぐるといいと思う
0626デフォルトの名無しさん
2010/10/04(月) 13:07:28結局時間かかるよ
0627623
2010/10/04(月) 13:24:29626さんのおっしゃるとおりで実はカンマ区切りの処理を取り込むのに
処理全体の95%近く処理時間がかかっていました。
ファイル読み込みだけにしたら1秒もかからず起動しました。
カンマ区切りの読み取り部分を高速化してみます。
0628デフォルトの名無しさん
2010/10/04(月) 17:33:29fseekで一発で飛べるようにしろよ
0629デフォルトの名無しさん
2010/10/04(月) 17:55:42単純なテキストををバイナリに変更要求するとか、おまえセンスなさすぎ
0630デフォルトの名無しさん
2010/10/04(月) 18:03:5110万行とか続いた時点で単純なテキストじゃねーよすでにw
0631デフォルトの名無しさん
2010/10/04(月) 19:04:010632デフォルトの名無しさん
2010/10/04(月) 21:09:55経験が少ないとわかんないんだろ?
大量にデータが増えたときにかなり多くのリスクも入ってしまっているから
データが少ないときと同じように管理したって駄目なんですぅー(笑)
ハイ、残念♪
0633デフォルトの名無しさん
2010/10/04(月) 21:41:23残念なのはおまえの頭だ。
データ量のリスクとかアフォかと。
おまえが考えるシステムってのは、さぞや穴と虫だらけなんだろうなw
0634デフォルトの名無しさん
2010/10/04(月) 21:49:05横から突っ込むけど
今回の場合ってテキストでやるよりバイナリでやったほうがメリット多いんじゃないの?
10万行もあって処理速度が大事なのにテキストでやり続けるメリットは何?
0635デフォルトの名無しさん
2010/10/04(月) 22:08:12>>623が求めるのは、高速なファイルアクセス処理であって、データの変換は必要ない。
コンバートしてから処理するより、普通に考えたらそのままテキストで処理した方が速いよな。
バイナリにしろとか言ってる馬鹿は、全体の処理時間を考えてないだろ。
特に制限がないなら、いったんデータを全部メモリに読み込んでそれから処理。
これでいいんじゃね?
0636デフォルトの名無しさん
2010/10/04(月) 22:21:50リリース時に決まっているデータであれば
はじめからバイナリにしておいたほうがよくないか?
そこの仕様は>>623には書いてないが・・・
0637デフォルトの名無しさん
2010/10/04(月) 22:22:14精々数10MBだろ。普通に一括読み込みするだけじゃん。
0638デフォルトの名無しさん
2010/10/04(月) 22:32:01>>623を読む限り、なんども処理するから高速化したいんだろう? (違ってたらアレだが)
どう考えても>>637が正解としか思えん。
時間コストが、(変換+処理)<(テキストベタ処理)にならん限りバイナリにするメリットが
まったくないわけだが。
0639デフォルトの名無しさん
2010/10/04(月) 23:12:19テキスト10MBを読む(1文字ずつ処理すると)とPC固まるぞ
文字列処理は結構重い
自分でやってみた経験がないなら黙ってたほうがいいとおもうけどね
0640デフォルトの名無しさん
2010/10/04(月) 23:14:410641デフォルトの名無しさん
2010/10/04(月) 23:15:28やったことないんでしょ?
黙ってろよ
0642デフォルトの名無しさん
2010/10/04(月) 23:15:430643デフォルトの名無しさん
2010/10/04(月) 23:17:52たかが数十MBを1byteづつ処理したってPC固まったりしねぇよw
PCもプログラムのヘボそうだが、一番ヘボいのは脳味噌だなwww
0644デフォルトの名無しさん
2010/10/04(月) 23:33:49はい、やったことないのバレバレ
なんだかんだいって重くなんだよ
てめーが想定してんのは10万行のデータをなんの比較・加工もしねーで
領域に格納した場合だけしか脳みそにねーだろ?
普通によくある処理をしただけでも1MBだって3秒は動かないね
0645デフォルトの名無しさん
2010/10/04(月) 23:41:55残念だったな。経験してるよ普通になw
アニメーション付き3Dのモデルデータのコンバータなんか作ったことあるか?
テキスト形式の.xで100MBぐらいのやつを処理すると、まさにそんな感じだ。
PCが固まる? おまえとおまえのpgが糞だからだお? www
これ以上恥かく前にキエロよな?
0646デフォルトの名無しさん
2010/10/04(月) 23:45:46ハイハイ、やってみてからいってねw
0647デフォルトの名無しさん
2010/10/04(月) 23:54:48まさか、Cでawkより重くなるほど器用なプログラムの話がしたいわけでもあるまいに。
0648デフォルトの名無しさん
2010/10/05(火) 00:08:00例を出すにしても
100万行のテキストファイルとか頭悪いな
0649デフォルトの名無しさん
2010/10/05(火) 00:11:270650デフォルトの名無しさん
2010/10/05(火) 06:57:210651デフォルトの名無しさん
2010/10/05(火) 07:10:38そんなアフォなことしねーよ
0652デフォルトの名無しさん
2010/10/05(火) 07:27:21テキストでトークン分解してるのが遅いんでしょ?
早くはできないと思う
0653デフォルトの名無しさん
2010/10/05(火) 07:33:340654デフォルトの名無しさん
2010/10/05(火) 23:03:10無い方を使うとヒープが壊れる事があったりして困ります。
両者の違いって何ですか?
調べてみても引数無の方は情報が無くって・・・
0655デフォルトの名無しさん
2010/10/05(火) 23:44:42ソース見ろよ、大馬鹿糞野郎
0656デフォルトの名無しさん
2010/10/10(日) 03:14:36下記コードで▼hogehoge.cppのEditChange()を呼び出すと、
関数内で呼ばれる別クラス関数CHogeDlg::ChangeEdit1の
edit1->SetWindowText(text);
の部分でEXEが落ちてしまいます。(コンパイルは出来る)
同じCHogeDlgクラス内からChangeEdit1を呼んだ時は
問題なく値が挿入されるのですが…。
あとedit1->SetWindowText(text);の一文を消して
代わりにAfxMessageBox(text);の一文を入れてやると、
別クラスから呼んでもtextの中身がメッセージボックスで表示されるので、
別クラスからの呼び出し方に問題があるわけではなさそうです。
どなたかアドバイスいただけますでしょうか。
■hogeDlg.hのpubulicに
void ChangeEdit1(char* text);
●hogeDlg.cppに
#include "HogeDlg.h"
void CHogeDlg::ChangeEdit1(char* text){
CEdit* edit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
edit1->SetWindowText(text);}
▼hogehoge.cppに
#include "HogeDlg.h"
void HogeHoge::EditChange(){
CHogeDlg cdd;
char* t="unko";
cdd.ChangeEdit1(t);}
0657656
2010/10/10(日) 03:17:15#pragma once
#include "afxwin.h"
#define WM_NOTIFYICON (WM_USER+1)
class CHogeDlg : public CDialog{
public:
CHogeDlg(CWnd* pParent = NULL); // 標準コンストラクタ
enum { IDD = IDD_Hoge_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート
private:
NOTIFYICONDATA m_Icon;
protected:
HICON m_hIcon;
afx_msg HRESULT OnNotifyIcon(WPARAM wPram, LPARAM lParam);
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedStart();
protected:
virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
public:
void ChangeEdit1(char* text);
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);};
0658デフォルトの名無しさん
2010/10/10(日) 07:46:40>CHogeDlg cdd;
が違う。
あとMFCなんだからCString使えば?
0659デフォルトの名無しさん
2010/10/10(日) 09:02:49CHogeDlgのインスタンスを持っているクラスか関数からHogeHogeクラスのインスタンスに何らかの形で引き渡すか、
いっそのことアプリケーションクラスから辿れるように作るか。
0660デフォルトの名無しさん
2010/10/10(日) 09:33:59例えば、ファイルを読んで、何か編集処理をして、結果をeditへ表示
みたいな処理だとすると
1 dialogクラスで領域を確保
2 dialogクラスからファイルを読む外部ルーチンを呼ぶ
3 dialogクラスから編集用の外部ルーチンを呼ぶ
4 dialogクラスで結果をeditへ表示
2と3を外部ルーチンでやるとしても
外部からeditを触る必要はないと思うんだけど
どういう考えで外からeditを触ろうとしているのかな?
0661デフォルトの名無しさん
2010/10/10(日) 13:44:03>>659
> ダイアログクラスのインスタンスへのポインタを渡してやらなきゃ無理
とのことなので
CHogeDlg* cdd=new CHogeDlg;
cdd->ChangeEdit1(t);
あるいは
void (CHogeDlg::*pChangeEdit1)(char*) = &CHogeDlg::ChangeEdit1;
CHogeDlg cdd;
CHogeDlg* pCdd = &cdd;
(pCdd->*pChangeEdit)(t);
のように書いてみたいんですがIDC_EDIT1に代入できませんでした
>>660
>外部からeditを触る必要はないと思うんだけど
実際にIDC_EDIT1に値を代入する部分(SetWindowText)はCHogeDlgクラスに書いてあるので
そもそも外部から触っているという意識はありませんでした…
意図はネットワーク越しに変数が動的に送られてくるのでダイアログクラス外からアクセスした方が簡単だったからです。
頓珍漢な答えになっているかも知れませんが。
0662デフォルトの名無しさん
2010/10/10(日) 14:00:32そんな行き当たりばったりの書き方じゃいつか破綻するぞ。
0663656
2010/10/10(日) 14:10:07メンバ関数へのアドレスを得て、ポインタにセットしたのですが、
やはりSetWindowTextの部分でEXEが落ちます…
http://kuronuko.com/genericcpp/memberpointer.html
0664デフォルトの名無しさん
2010/10/10(日) 14:33:22cdd->CreateDialog(IDD_DIALOG??);
cdd->ShowWindow(SW_SHOW);
(cdd->GetDlgItem(IDC_EDIT1))->SetWindowText("abc");
cdd->UpdateData(FALSE);
こんな感じでどうだ?
0665デフォルトの名無しさん
2010/10/10(日) 14:39:23orz
0666656
2010/10/10(日) 15:40:22別クラスのhogehoge.cppからIDC_EDIT1への値の代入までやってしまう方法ですね、なるほど
resourse.hを見てIDD_HOGE_DIALOGに変更してUpdateData(FALSE)を削除してやってみましたが、
マクロ 'CreateDialogA' に指定された実引数の数が少なすぎます。
'CreateDialogParamA' : 'CHogeDlg' のメンバではありません。
のエラーが出ました
0667デフォルトの名無しさん
2010/10/10(日) 16:41:31>>662
0668デフォルトの名無しさん
2010/10/10(日) 16:43:32モードレスダイアログ
あたりでぐぐってくれ。
cdd->CreateDialog(XXXX)
↓
cdd->Create(this)
必要なくなったら、下記も忘れずにな。
cdd->DestroyWindow();
delete cdd;
0669デフォルトの名無しさん
2010/10/10(日) 22:14:49ありがとうございます!
なるほどモードレスダイアログかあ
0670デフォルトの名無しさん
2010/10/16(土) 15:14:370671デフォルトの名無しさん
2010/10/29(金) 19:39:42http://slashdot.jp/security/10/10/28/2224214.shtml
0672デフォルトの名無しさん
2010/10/29(金) 19:48:33通常の検索ルートを通ってしまうわけか。
0673デフォルトの名無しさん
2010/11/02(火) 19:05:46CString a[10];
char b[10][256];
lstpcpy(b[0],a[0]);
でa[0]="abc"の値がb[0]にコピーされません。
何か問題ありますでしょうか?他の方法がありましたら教えていただけますようお願いします。
0674デフォルトの名無しさん
2010/11/02(火) 19:10:010675デフォルトの名無しさん
2010/11/02(火) 19:17:08lstpcpyはlstrcpyの間違いと思える。
そうなら、引数に渡すものが違う。lstrcpyの第二引数はLPCTSTR。
他人が書いた関数を使わせてもらうのだから、こっちがそれに合わせなければならない。
CStringにoperator LPCTSTRがあるのでそれ使う。
「CString LPCTSTR」でググると説明いっぱい出るよ。
0676デフォルトの名無しさん
2010/11/02(火) 19:21:41lstrcpy なら自動的に型変換(operator LPCTSTR)が呼び出されるんじゃないの?
0677デフォルトの名無しさん
2010/11/02(火) 19:24:05ウォーニングが出てませんか?
0678デフォルトの名無しさん
2010/11/02(火) 19:31:25b[0]に入ってないってのは何で確認してる?
0679673
2010/11/02(火) 19:32:45はいlstrcpyの間違いです。VS2005ですが、ワーニングは出てません。
デバッガで関数は実行されるのですが、値が入りません。
0680デフォルトの名無しさん
2010/11/02(火) 19:35:390681デフォルトの名無しさん
2010/11/02(火) 19:37:17きちんと全部そのまま書けばいいのに・・・。
0682デフォルトの名無しさん
2010/11/02(火) 19:37:25はい値は入ってます。
関数実行後、第一引数に値が入ってません。
うまく動かなかったので、デバッグモードでステップ運転で確認してます。
0683673
2010/11/02(火) 19:39:35デバッグビルドです。
0684デフォルトの名無しさん
2010/11/02(火) 19:44:37TCHAR b[10][256];
a[0] = _T("abc");
lstrcpy(b[0], a[0]);
MessageBox(b[0]);
これをそのままコピーして実行して"abc"と表示されれば問題なし。
他の部分に問題がある。
0685質問者
2010/11/02(火) 19:48:19家にはデバッグ環境がないため、明日会社で実行してみます。
0686デフォルトの名無しさん
2010/11/02(火) 23:31:49この程度の内容なら
MFCをサポートするコンソールアプリケーションを新規に作って、
問題を単純化したソースを作成し、
ソース全文を貼り付ける。
エラーや警告が出ればその内容を示す。
異常だとした判断基準や、出力結果などを示す。
ことは簡単に出来そう。
多くのケースで、
問題を単純化したソースを作成
の段階で自己解決する。
掲示板で聞くより速くて効率的。
0687デフォルトの名無しさん
2010/11/13(土) 23:57:48ダイアログベースアプリケーションで使っています。
ExecWB関数にOLECMDID_FINDを使うとページ内検索ウィンドウが出るところまで来ました。
この検索ウィンドウを閉じたことを知りたいのですが、どうしたらいいでしょう。
コールバック関数を設定してあげればいいとは思うのですが、設定する関数がどれなのか、
どこなのか、理解出来ていません。どうかご教示願えませんでしょうか。
0688デフォルトの名無しさん
2010/11/20(土) 00:35:26VC++MFCだとちょっとしかありませんよね
VC++ってWindowsアプリケーションを作成するには不向きなのですか?
0689デフォルトの名無しさん
2010/11/20(土) 00:41:510690デフォルトの名無しさん
2010/11/20(土) 00:48:570691デフォルトの名無しさん
2010/11/20(土) 11:03:54訳判らん位MFCクラスが一気に増えるぞ。
0692デフォルトの名無しさん
2010/11/20(土) 11:24:43基本的にすべてのアプリをネイティブで作れる
たとえると、C++ & MFC は一昔前のアセンブラみたいなもので、
C#/VB はRAD の延長だな
生産性も、経験豊富でなれたやつな人なら C#に負けない
ただ、欠点は習得(実用レベルを作るまで)にえらい時間がかかること
だから、新人教育には使わない -> MFC 人口は減るという運命にある
しかし無くなることはない
なぜなら、ネイティブアプリを作るほぼ唯一の手段だから
0693デフォルトの名無しさん
2010/11/20(土) 14:58:56> なぜなら、ネイティブアプリを作るほぼ唯一の手段だから
"ほぼ"を考慮しても言いすぎ。
0694デフォルトの名無しさん
2010/11/20(土) 18:12:28大事なことなのでもう一度言う
MFCは糞
0695デフォルトの名無しさん
2010/11/20(土) 22:19:45あの、ポトペタ環境がどうもなじめない
下手な奴一緒だと、メインフォームで数千行なんてコード書いてきそうw
0696デフォルトの名無しさん
2010/11/20(土) 22:23:57数千行のmain()とどっこいどっこいではないかと。
0697デフォルトの名無しさん
2010/11/21(日) 05:13:41C#もMFCも同じだな。
0698デフォルトの名無しさん
2010/11/21(日) 10:09:52むしろかゆいところに手が届かずに不便さを感じる。
C#から入ってしまったやつには、MFCを使いこなすのはほぼ無理。
0699デフォルトの名無しさん
2010/11/21(日) 13:56:54C#も.netが用意してないことはDllImport("user32")でSendMessage()とかなっちゃうのがなぁ。
ListViewのスクロールが見つからなくてぐぐって結局SendMessage(LVM_SCROLL)。
なんかがっかり。台無し。
0700デフォルトの名無しさん
2010/11/21(日) 14:57:17リスト ビュー コントロールの内容をスクロールします。
0701デフォルトの名無しさん
2010/11/21(日) 17:46:48あるじゃん
0702デフォルトの名無しさん
2010/11/21(日) 21:46:09MFCをちゃんと使えるやつが、C#を使う理由がわからん
0703デフォルトの名無しさん
2010/11/21(日) 21:48:400704デフォルトの名無しさん
2010/11/21(日) 21:54:50それは、C++やMFCが使いこなせていない証拠
0705デフォルトの名無しさん
2010/11/21(日) 21:55:55全然"MFCをちゃんと使"ってない自信がる。
つーか"C++すらちゃんと使"ってねぇな。
0706デフォルトの名無しさん
2010/11/21(日) 21:58:35そう思うのはC#を使いこなせていない証拠
0707デフォルトの名無しさん
2010/11/21(日) 22:03:50C#なんて使いこなせてもなんのやくにもたたん
次VSでは外されるんだからw
0708デフォルトの名無しさん
2010/11/21(日) 22:07:44話しがズレててアホにしか見えないけど、C#が時期VSから外れるってマジ?
0709デフォルトの名無しさん
2010/11/21(日) 22:22:170710デフォルトの名無しさん
2010/11/21(日) 22:28:590711デフォルトの名無しさん
2010/11/21(日) 23:21:55ここからつめていったほうがいいとおもう
0712デフォルトの名無しさん
2010/11/21(日) 23:58:170713デフォルトの名無しさん
2010/11/22(月) 00:00:220714699
2010/11/22(月) 09:52:28それなの?
ってか単純にSendMessage(LVM_SCROLL)を置き換えてもスクロールしないんだけど、
なんかやりようがあるのかな。
CListCtrl::Scroll相当のものなら名前「Scroll」にしそうだけど。
ってスレ違いだね。C#スレ行くわ。
0715デフォルトの名無しさん
2010/11/23(火) 08:32:30MSはサンプルコード書けよな
ドキュメントなんていっくら詳しく書いたって動作がわからなきゃ意味ねーんだっつの
通常のとCEで違うコード書かなきゃいけないとか普通にやりやがるし
それ、やるんだったらサンプルコード書けと
0716デフォルトの名無しさん
2010/11/23(火) 10:07:430717デフォルトの名無しさん
2010/11/23(火) 12:37:200718デフォルトの名無しさん
2010/11/23(火) 12:57:00外人のセンスってこうなのかってよく思う。
0719デフォルトの名無しさん
2010/11/24(水) 18:22:57日本語版のMDSNはクソみたいなページだらけだけど。
0720デフォルトの名無しさん
2010/11/24(水) 18:35:190721デフォルトの名無しさん
2010/11/24(水) 22:02:340722デフォルトの名無しさん
2010/11/24(水) 22:40:250723デフォルトの名無しさん
2010/11/26(金) 11:30:57自作のボタンでやりたいのですが、SendMessageなどで簡単に実装可能でしょうか?
0724デフォルトの名無しさん
2010/11/26(金) 12:40:470725デフォルトの名無しさん
2010/11/26(金) 17:39:41ドキュメントはいくら詳しくても動作の理解の助けにはならない、の意か?
サンプルが欲しいのは、どっちの理由
・実際のコードの方が解説より分かりやすい
・コピペで自分のプログラムに取り込める方が役に立つ
0726デフォルトの名無しさん
2010/11/26(金) 19:55:24>・実際のコードの方が解説より分かりやすい
これ
実際に動くために必要なコードがわからない場合が多い
〜メッセージ処理中にやらないと動作しないとか
そういう暗黙的な取り決めが多すぎ
0727デフォルトの名無しさん
2010/11/27(土) 09:19:31実は記事の方が出鱈目でしたっていう日経新聞みたいな
0728デフォルトの名無しさん
2010/11/27(土) 17:57:23技術文書に書いてないカラクリてんこ盛り
MFCは特にその傾向が強い
MFC使いになるのが難しいのはその辺に原因がありそう
0729デフォルトの名無しさん
2010/11/27(土) 18:12:34ただブラックボックスにして使い難くしただけの糞クラス
0730デフォルトの名無しさん
2010/11/27(土) 18:13:25俺今、技術文書書いてる所
詳しく解説しようと思っているが、サンプルも沢山入れるようにしよう
0731デフォルトの名無しさん
2010/11/27(土) 18:32:39そういうのはブラックボックスとは言わない。
まあソースが無かったらキレていただろうけどw
0732デフォルトの名無しさん
2010/11/27(土) 18:38:22仕組みも何もやってることは同じだから説明するまでもないんだよ
特にわかりにくいと思われる部分はちゃんと解説あったはず。
0733デフォルトの名無しさん
2010/11/27(土) 19:28:14あんまり詳しい解説入れられても動くコードがないとこのまわりはさっぱりわからない
逆に動くコードさえあったらあんまり解説はいらない
面倒だからといって他の機能もはいったごった煮サンプルを作られると
今度はどの要素がその注目部分を動かしているのか特定できない
0734デフォルトの名無しさん
2010/11/27(土) 19:39:510735デフォルトの名無しさん
2010/11/27(土) 20:35:33それで気付いたんだが、explorerが再起動したら通知領域に再登録しないといけないんだよな。
市販アプリでもそれをしていないのがあって、タスクトレイに無いのに気付かず最小化すると二度と復旧できないと言う。
おまけに、登録してあるときに強制終了されるとアイコンが残骸として残ってしまうし。
そう言う、所謂TIPSだらけなのがMFCのいやらしいところだよね。
0736デフォルトの名無しさん
2010/11/27(土) 21:07:090737デフォルトの名無しさん
2010/11/27(土) 22:41:32MFCに標準で含まれていなかったと思うのだが。
0738デフォルトの名無しさん
2010/11/27(土) 23:05:59MFCとほとんど関係ないC言語の質問するやつとかいるから
そういうたぐいの人間かもしれない。
0739デフォルトの名無しさん
2010/11/27(土) 23:29:370740デフォルトの名無しさん
2010/11/28(日) 08:37:310741デフォルトの名無しさん
2010/11/28(日) 13:28:51リボンバー使ったウィンドウの外枠の表示がおかしくなるんだが
どうにかならん?
0742デフォルトの名無しさん
2010/12/04(土) 12:43:39作画の全てをOnDrawでやると動作がモッサリしてしまうので、
下記の処理にしています。
1.ViewのコンストラクタでCDCとCBitmapのオブジェクトを作成し、
2.必要な時にCDCとCBitmapを書き直す。
3.OnDrawでは用意された上記CBitmapを貼り付ける処理だけを行う。
4.ViewのOnDestroyでCDCとCBitmapのオブジェクトを削除する。
上記処理に何か問題ありますか?
問題あるとしたらどういった問題でしょうか?
色んなサイトを見ると、
"使い終わったCDC,CBitmapはすぐに削除しなさい"
見たいな事が書かれているので、上記処理をやって良いのかどうか迷っています。
0743デフォルトの名無しさん
2010/12/04(土) 13:22:20CDC絡みは、Win9x系でシステム全体の共有DCの使える数の制限がきつかったからだな。
WinNT系はメモリ量に制限されるだけだから、直ぐ解放とかは特に不要。
ただ、毎回GetDCしたところで大したコストにならない気もするけど。
CBitmapはViewが閉じられる時に使い終わったと解釈できるから、
そのやり方で問題ないかと。頻繁に生成・削除を繰り返すものじゃないし。
0744デフォルトの名無しさん
2010/12/05(日) 22:46:08どうも。
CBitmapはそれでOK。
CDCはそれでもまず問題ないが、
毎回作り直しても大した負荷にならんから、
作業が終わったら破棄するのがあえて言えば無難。
って感じですかね。
0745デフォルトの名無しさん
2010/12/13(月) 16:50:53基板(チップ)のサンプルがMFCベースでした。
Expressエディションでコンパイルできなくて困ってまつorz
0746デフォルトの名無しさん
2010/12/13(月) 17:09:55基板とやりとりする部分はMFCだろうが何だろうが関係ないはず
0747デフォルトの名無しさん
2010/12/13(月) 17:32:480748デフォルトの名無しさん
2010/12/13(月) 22:40:21Expression Studioも前バージョンは3万円くらいだったはずなのに
現バージョンは1200万円くらいするんだっけ?高いなー。忘れたけど。
0749デフォルトの名無しさん
2010/12/15(水) 00:47:14別ににんしょうなんてないし
0750デフォルトの名無しさん
2010/12/31(金) 09:02:25少なくともおまえよりは優秀なんだが。
0751デフォルトの名無しさん
2010/12/31(金) 09:07:010752デフォルトの名無しさん
2010/12/31(金) 16:46:230753デフォルトの名無しさん
2010/12/31(金) 17:33:020754デフォルトの名無しさん
2010/12/31(金) 23:15:20♪罪と罰の酒を飲もうよ
♪ここは愚か者 の酒場さ
0755デフォルトの名無しさん
2011/01/04(火) 18:45:190756デフォルトの名無しさん
2011/01/06(木) 12:16:050757デフォルトの名無しさん
2011/01/11(火) 10:45:51いるのですが、ボタンすべてが一斉に切り替わって欲しいところで、パラパラと目で見てわかる程度の速度で
切り替わる結果になってしまっています。
これを一気に切り替えるか、最低でも速度を上げたいと考えているのですが、CWnd::Invalidate()などを利用して
もうまくいってくれません。
Aero(というか、パフォーマンスオプションの視覚効果)が邪魔をしているのではないかという当たりをつけたのですが、
これを、当該処理中だけ切り替えるなどの方法、またはそうまでしなくても速く切り替えを行う方法などはありますでしょうか?
環境はWindows 7 Pro、Visual Studio 2008で、動作実施を行う対象はXP〜7までとなっています。
0758デフォルトの名無しさん
2011/01/11(火) 11:18:59ダイアログ自身のSetRedraw()で行けるかも
0759757
2011/01/11(火) 12:44:09> ダイアログ自身のSetRedraw()で行けるかも
それも思いついて試したのですが、やはりだめでした。
症状が出ているのが開発用のノーパソで、現在のところはほかのマシンでは同様にならないので大きな
問題とは認識されていないのですが、実際に動かす環境で起こるのは可能な限り避けたいところなのです。
0760デフォルトの名無しさん
2011/01/11(火) 12:58:58頭使えば可能なはずだし、無理ならマシンの問題
0761デフォルトの名無しさん
2011/01/12(水) 21:35:27同時に有効・無効にしたいコントロールを一つのタブに乗せる
0762デフォルトの名無しさん
2011/01/13(木) 15:52:060763デフォルトの名無しさん
2011/01/15(土) 11:44:43「安全マーク」のつけ方がわかりません。
「IObjectSafety」を実装すればよい、という記述は見つけましたが、
実際どうするかわかりませんでした。
ご教授いただけないでしょうか?
ATLでやる場合の情報は見つけたのですが、MFCは見つけられませんでした。。
0764デフォルトの名無しさん
2011/01/15(土) 12:10:300765デフォルトの名無しさん
2011/01/15(土) 13:31:22それにぴったりのを見つけたからリンク貼っとく。
http://abilify.web.fc2.com/ActiveX/IObjectSafety.htm
昔作ったことがあったのに、もう完全に記憶から抜け落ちているなあ……
0766デフォルトの名無しさん
2011/01/19(水) 09:57:42ご存知でしたら教えていただけないでしょうか。
過去ログで、CanBeResizedをオーバーライドすればいいような
ことが書いてあったので、やってみたんですけどリサイズ出来
てしまうんです。
0767デフォルトの名無しさん
2011/01/20(木) 08:00:49Create()時にAFX_CBRS_RESIZEを付けてないですか?
0768デフォルトの名無しさん
2011/01/20(木) 11:16:07付けてました。というかデフォルトでAFX_DEFAULT_DOCKING_PANE_STYLE
を渡していました。
AFX_CBRS_RESIZEとAFX_CBRS_FLOATをはずすとリサイズしなくなりました。
ありがとうございました。
0769デフォルトの名無しさん
2011/01/28(金) 22:15:58MFCやる時、少しは役に立つもの?それとも、もう時代遅れ?
家のPC環境でMFC動かせないのだが、少しは近いことやろうと思うんだけど・・
0770デフォルトの名無しさん
2011/01/28(金) 22:17:41その前に、MFCはC++前提なのでC++を理解することのほうが
Windows APIを理解するよりもずっとむつかしーあるよ。
0771デフォルトの名無しさん
2011/01/28(金) 22:42:40MFCのがアナクロ
0772デフォルトの名無しさん
2011/01/28(金) 23:04:27猫プログラミングのC++も並行してやってるけど、C++を先に固めた方が良さそうすね
0773デフォルトの名無しさん
2011/01/28(金) 23:22:40ではMFCにたどり着く頃には爺になっちゃうよ
C〜C/C++(ベターC)&Win32API〜C#orJava〜MFC
がオススメ
0774デフォルトの名無しさん
2011/01/29(土) 00:14:270775デフォルトの名無しさん
2011/01/29(土) 00:29:33C++なんてめんどい言語勉強するより
C#やJava学んだほうがずっと早いし有意義だよ。
0776デフォルトの名無しさん
2011/01/29(土) 00:38:130777デフォルトの名無しさん
2011/01/29(土) 09:02:530778デフォルトの名無しさん
2011/01/29(土) 21:19:19ウチは組み込み系だからツール作るのにMFCは結構ありがたい。
必要ないときはC#使うけど。
0779デフォルトの名無しさん
2011/01/29(土) 21:53:190780デフォルトの名無しさん
2011/01/29(土) 23:03:32.netとかあんまり手間変わらんかったよ
0781デフォルトの名無しさん
2011/01/29(土) 23:33:54仕事で使うんだからしょうがないべさ
0782デフォルトの名無しさん
2011/01/30(日) 00:47:38組み込み系は、Cのライブラリとか使う事もザラにあるから、
MFCは割と気軽に組み込めてお手軽で良いよな。
大方がAPIのラッパー程度な設計なのが逆に役立つ。
0783デフォルトの名無しさん
2011/02/04(金) 17:12:50マイクロソフトに対する評価が下がっていく…。
さっさとアナウンスしろや。
0784デフォルトの名無しさん
2011/02/04(金) 17:41:33ごめん
0785デフォルトの名無しさん
2011/02/06(日) 14:15:47VisualStudio2005でダイアログベースのMFCアプリケーションを作っているのですが、
同一のコードから簡略版と高級版の両方をビルドできるようにしたいと考えて、stdafx.h
の中にフラグ(#define MY_FLAG)を書いておき、切り替えの必要な場所はそのフラグの
有無でビルド時に書き換わるようにしました(#ifdef MY_FLAG〜#endifでくくった)。
それはそれで機能しているんですが、以下の3つについてはこの方法で切り替える事が
できずにいます。
・生成される実行ファイルの名前(=プロジェクト名)
・生成される実行ファイルのアイコン(=IDR_MAINFRAMEで指定されているアイコン)
・生成される実行ファイルを右クリックした際の詳細情報(=VS_VERSION_INFO)
これらも同様の方法で切り替えるようにするべくresource.hや.rcファイルにも#ifdef〜を
手で書き込んでみたのですが、これらは頻繁にVisualStudioによって書き換えられて
しまうため、すぐに#ifdef節が消されてしまってうまく機能させることができません。
何かよい方法は無いでしょうか。
0786デフォルトの名無しさん
2011/02/06(日) 15:04:190787デフォルトの名無しさん
2011/02/06(日) 17:34:02*.rcの方は専用の記述方法があったと思う。TEXTINCLUDEとかそんなタグだったかと。
その辺りの記述をよく見て味噌。
0788デフォルトの名無しさん
2011/02/06(日) 19:12:22ありがとうございます。
試してみることにします。
0789デフォルトの名無しさん
2011/02/06(日) 21:27:33書き換えられない場所がちゃんとあr
0790デフォルトの名無しさん
2011/02/07(月) 23:32:39基本的なクラスの概念が分かっていればOkな気がするんだが
0791デフォルトの名無しさん
2011/02/07(月) 23:33:00.rcファイルはresディレクトリ直下の.rc2ファイルをincludeしてて、これはVisualStudioに
変更されたくないリソースを記述する場所として用意されているようです。>>789さんの
言うところの書き換えられない場所ということですね。
試しに、.rcファイルのIconセクションとVersionセクションを、コメント書きのキャプションごと
カット&ペーストで.rc2に移植したところ、VisualStudioのリソースビュー上ではIconフィルタ
とVersionフィルタが丸々無くなりましたが、ビルドされるアプリケーションで元のリソースの
構成が崩れることはありませんでした。つまりVisualStudioによっては触れないが、ビルドに
はきちんと反映されるということです。そこで>>785の#ifdef〜#endifを用いたところ、思惑通り
に機能させることができました(ただし、フラグの書いてある場所を.rc2からも参照させる必要
があるため、フラグを書くためだけのヘッダーファイルを別に作って、stdafx.hと.rc2の両方に
includeさせる必要がありましたが)。
この方法ではアイコンとVS_VERSION_INFOの切り替えのみ対応することができ、依然として
実行ファイル名の切り替えは出来ませんが、そのくらいだけなら手動でも問題ないので、
これにて解決としたいと思います。お騒がせいたしました。
0792デフォルトの名無しさん
2011/02/07(月) 23:57:39STLがまともに実装されていない時代にベースが開発されてるからね。
互換性の意味でもテンプレート化はされていない。
さらに、VC自体がテンプレートの動作がおかしいというのもある。
VCは名前解決のルールからしておかしいので
テンプレートメタプログラミングとかやると、動かないことがしばしば。
0793デフォルトの名無しさん
2011/02/08(火) 14:32:05デフォルトでは出力ファイル名は $(projectname).exe だから
プロジェクトのプロパティで
それを好きな名前に変えればいい。
リソースの ifdef で使う定義も
リソースコンパイルのコマンドラインへの追加で対応すればいい。
/d "***"
0794デフォルトの名無しさん
2011/02/08(火) 22:21:43なるほど。そんな時代的な背景が有ったとは・・。
0795デフォルトの名無しさん
2011/02/09(水) 09:40:090796デフォルトの名無しさん
2011/02/09(水) 22:06:17試してみました。
まず>>791で作ったフラグ用ヘッダーファイルのincludeを取り除き、現在のプロジェクト構成を
元にして新しいプロジェクト構成を新規作成し、そのプロパティに以下の変更を加えました。
・[C/C++]→[コマンドライン]の「追加のオプション欄」に「/D "MY_FLAG"」を書き加えた。
・[リソース]→[コマンドライン]の「追加のオプション欄」に「/d "MY_FLAG"」を書き加えた。
・出力ファイル名を書き換えた。
これにより、VisualStudioのツールバー上で構成を切り替えるだけでビルドの内容を切り替える
ことができるようになりました。これは全くもって自分が欲していたとおりの結果です。お教え
いただき、本当にありがとうございました。
0797デフォルトの名無しさん
2011/02/12(土) 09:05:42VC4〜6あたりで開発していたころは、
MFCと相性悪いという理由でSTLは会社から禁止されていたな。
0798デフォルトの名無しさん
2011/02/13(日) 21:51:13CTabCtrl::AdjustRectでもビラビラを含んだ領域でしか取れないよね?
手動で適当にrect.top+=20したりするしかないの?
0799デフォルトの名無しさん
2011/02/14(月) 15:28:210800デフォルトの名無しさん
2011/02/14(月) 16:39:470801デフォルトの名無しさん
2011/02/14(月) 16:56:000802デフォルトの名無しさん
2011/02/14(月) 17:46:04子ダイアログを切りかえる実装方法だと、子ダイアログを表示する位置を
合わせるのに、ビラビラ以外の表示領域を取得しないわけにはいかんだろう。
0803デフォルトの名無しさん
2011/02/14(月) 18:01:25ググればいくらでも出てくるだろ?
0804デフォルトの名無しさん
2011/02/14(月) 18:28:310805デフォルトの名無しさん
2011/02/14(月) 23:05:490806デフォルトの名無しさん
2011/02/22(火) 21:41:47.56これってVS2008では廃止??
今後廃止予定だから
推奨されないだけで機能としてはまだ使えるんですかね?
0807デフォルトの名無しさん
2011/02/23(水) 08:07:19.03http://support.microsoft.com/kb/318734/ja
新規で使おうとか考えないほうが身の為だと思う。
というか、VS2010のMFCだとこの関数呼び出しの箇所がコメントアウトされているぞ。
機能するかどうかすら怪しい。
0808デフォルトの名無しさん
2011/02/23(水) 10:11:01.87コメントアウト・・・。
ってことは。
これに代わる機能があるからそっち使ってね。
ってこと?
探したけどそれすらもないような。
とゆーか、配列の解放ってVSでコンパイルしたときに
デストラクタとして自動生成され・・・ない?
0809デフォルトの名無しさん
2011/02/23(水) 19:26:53.08Visual C++6.0以前は、テンプレート絡みが色々怪しいところも多いし。
0810デフォルトの名無しさん
2011/02/24(木) 17:04:00.42フォームコントロールを画面表示させようとしてます
コントロール側には3Dグラフを描画します。
MFC側からグラフ用のデータを渡したいんですが
どのようにして渡すんでしょうか?
渡す周期は500msくらいです。
VS2008使ってます。
普通のダイアログ画面が相手ならSet関数でメモリ渡しするんですけど
MFCとフォームコントロールとプロジェクトが別になってます
0811デフォルトの名無しさん
2011/02/25(金) 09:58:59.730812810
2011/02/25(金) 14:59:20.24関数渡し出来ました
0813デフォルトの名無しさん
2011/02/27(日) 21:53:44.270814813
2011/02/27(日) 22:55:28.51groupboxが原因でした(Zオーダーの問題かな?)
0815デフォルトの名無しさん
2011/03/01(火) 00:25:55.74時刻コントロールの背景色を変更したいのだが、
WinXPでは色が変わっているのだが、Win7では変わらなかった。
Win7でもちゃんと背景色が変わるようにするにはどうしたらいいのか……
以下、ソース
CDateTimeCtrlEx : CDateTimeCtrl
BOOL CDateTimeCtrlEx::OnEraseBkgnd( CDC* pDC )
{
BOOL bRet = CDateTimeCtrl::OnEraseBkgnd( pDC );
CRect rect;
GetClientRect( &rect );
pDC->FillSolidRect( &rect. RGB( 0, 255, 0 );
return bRet;
}
0816デフォルトの名無しさん
2011/03/01(火) 12:56:20.82ビジュアルスタイルを外す
0817デフォルトの名無しさん
2011/03/02(水) 11:17:08.64親Dialogでやりたいんですけど良い方法ありますか?
子のHScrollの引数を親にSendMessageする感じですか?
直接親のHScrollにかけたらうれしいんですが
スクロール関数が呼ばれないようです
0818デフォルトの名無しさん
2011/03/02(水) 21:37:45.59しかしここから何かアクションを起こしてもビュークラスに対して
ON_COMMAND
を発生させることはできません。
WM_COMMANDとCN_COMMAND使えばできるように見えたのですが、
うまく行きませんでした。どのようにすればいいのでしょう?
0819デフォルトの名無しさん
2011/03/05(土) 19:13:44.53演習で「afxcoll.h」というファイルが必要でして自PCに存在せず
ググるとMFC クラスなるものの中にあるようなのですが、
MFC クラスはどうやったらダウンロード出来るのでしょうか?
無料でインストールできるものなんでしょうか?
お手数ですがご教授のほどよろしくお願い致します。
0820デフォルトの名無しさん
2011/03/05(土) 19:16:55.310821819
2011/03/05(土) 19:34:32.78ご教授ありがとうございます。
ご指摘いただいた場所は実は見つけていて、
コピーして入れたんですが、次から次にヘッダが要求されて
エラーの嵐で・・・
MFC自体売り者らしいので買わないととてもじゃないけど
無理ですかね。。JNIの演習なんですけど。。
0822デフォルトの名無しさん
2011/03/05(土) 21:39:56.95大した機能は無いから、必要最小限のクラスとメソッドをでっち上げるのも
一つの手じゃないか?
シリアライズとか使っていたら少々面倒だけど。
0823デフォルトの名無しさん
2011/03/06(日) 03:28:23.48それぞれ別々にあるの?
MFC自体のソースコードからして
完全に別物としてあるの?
0824デフォルトの名無しさん
2011/03/06(日) 09:28:51.48完全に別物とか正気の沙汰じゃない。
DLLはOSの仕様上別々に用意しないと話にならないな。
0825818
2011/03/07(月) 23:03:27.96MDIで作ってたので子フレームに送信したらいけました。
失礼しました。
0826デフォルトの名無しさん
2011/03/15(火) 10:52:12.580827デフォルトの名無しさん
2011/03/18(金) 06:01:43.060828デフォルトの名無しさん
2011/03/25(金) 18:40:44.51SetWindowText()で表示しようとしています。
このとき文字列中の数値で、小数点を揃えて出すために、以下のような書式を組みました。
CString str;
double a=100.05;
double b=10.1;
double c=1.0;
double d=1000.11
str.format("%4.2f\n%4.2f\n%4.2f\n4.2f\n", a, b, c, d);
これをSetWindowText()したところ、小数点の位置が揃いませんでした。
ダイアログのOnShowWindow()中で、エディットボックスに対してフォントの指定を行い、
固定ピッチフォントを指定したりしたのですが、フォントは変わっているにもかかわらず、
数値の部分だけ、数値の前に入ってほしいスペースの数が変わらないままです。
(コピペでチェックして、スペースの数自体が少ないことを確認)
フォントの指定は以下の通りです。
logfont.lfCharSet = DEFAULT_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = DEFAULT_QUALITY;
logfont.lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
::_stprintf_s(logfont.lfFaceName, LF_FACESIZE, _T("%s"), _T("MS ゴシック"));//フォント名
どこかに見落としがありますでしょうか? また、他に確認すべき項目はありますでしょうか?
0829デフォルトの名無しさん
2011/03/26(土) 09:05:43.49"%4.2f"というのは、全体で4文字、そのうち小数点以下に2文字という意味。
0830デフォルトの名無しさん
2011/03/26(土) 10:05:53.96………!? チェックしてみます!!
0831デフォルトの名無しさん
2011/04/14(木) 23:39:14.38「スタティックライブラリでMFCを使用する」にした場合、今までより実行ファイルのサイズが大きくならない?
もうこれは諦めるしかない?以前のように小さくする方法はない?
ちなみに今回の更新についてのページ。
http://www.microsoft.com/japan/security/bulletins/ms11-025e.mspx
0832デフォルトの名無しさん
2011/04/15(金) 07:16:05.30ついでにWin2000で動かないバイナリになった!
0833デフォルトの名無しさん
2011/04/15(金) 11:50:56.95まぁ元々サイズがでかいけど。
0834デフォルトの名無しさん
2011/04/20(水) 07:55:03.26ユーザーのMFCが更新されただけで動かなくなるから
2000切ったわ
0835デフォルトの名無しさん
2011/04/27(水) 09:51:55.40VS2008で、ダイアログアプリケーションのリソースをDLLに分離し、
AfxSetResourceHandle()で読み込む、という手順を取ろうとしています。
(DLLはリソースのみ、リンカで/NOENTRY指定)
DLLのロード、AfxSetResourceHandle()まではうまくいくのですが、
メインとなるダイアログ上にタブコントロールを作り、その上にダイアログを
貼り付けようとするところで失敗してしまいます。
BOOL CMyApp::InitInstance()
{
HINSTANCE hinst;
hinst = LoadLibrary(_T("Resource.dll"));
ASSERT(hinst);
AfxSetResourceHandle(hinst); ←ここは成功する
……
BOOL CMy3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
bRet = TRUE;
if(this->m_MyTabPage1.Create(CTabMyPage1::IDD, this) == 0){bRet = FALSE;} ←ここで失敗
if(this->m_MyTabPage2.Create(CTabMyPage2::IDD, this) == 0){bRet = FALSE;} ←ここも失敗
……
これ以外のリソースについては全て読み込まれているようなのですが、ここだけ失敗してしまいます。
リソースの分離以前は正しく動作しており、何が問題なのか想像がつかない状態です。
なにをどうしたら良いか、教えてください。
0836デフォルトの名無しさん
2011/05/05(木) 16:02:12.33xp 32bitではピクチャボックスをBitBltにて画像保存できたのですが、
win7、64bitでは保存はできるのですが、保存した画像になにも表示されていません。
(シングルディスプレイでも)
どうすれば、キャプチャできるようになるでしょうか。
0837デフォルトの名無しさん
2011/05/06(金) 03:28:52.000838デフォルトの名無しさん
2011/05/13(金) 03:46:24.05OpenGLはよく分からないけど、テクスチャに描画して、
そのテクスチャを保存してはどうだろうか。
画面に出したい場合はそのテクスチャを貼り付けた
四角形ポリゴンを描画すればいい気がする。
0839デフォルトの名無しさん
2011/05/13(金) 06:51:20.14↓でサイズとWin2Kの問題解決するみたい
http://hibari.2ch.net/test/read.cgi/tech/1290969016/229,241
0840デフォルトの名無しさん
2011/05/15(日) 18:51:11.320841デフォルトの名無しさん
2011/05/26(木) 10:47:36.05これをディスプレイ解像度800×600の状態で起動した後、ディスプレイ解像度を大きなサイズ(例:1280×1024)に変更すると、アプリがめっちゃ大きなサイズになってしまいます。
OnInitDialogで取得したウィンドウサイズを保持しておいて、OnWindowPosChangingの引数WINDOWPOS構造体のcxとcyを修正してやると現象は抑えられるのですが、いまいちスマートでない気がします。
何か原因をご存知の方いらしたら教えてください。
ちなみに、Win7でもXPでも起きます。
0842デフォルトの名無しさん
2011/05/26(木) 16:40:25.40原因は知らないけどOnWindowPosChanging()の先頭に以下を追加すればいいと思う。
lpwndpos->flags |= SWP_NOSIZE;
0843デフォルトの名無しさん
2011/05/26(木) 17:35:03.98なるほど。
確かに、cx、cyを無視で良いですね。
ありがとうございます。
これでスッキリしました。
0844デフォルトの名無しさん
2011/05/31(火) 13:12:05.85これからも、がんばってください。
0845デフォルトの名無しさん
2011/06/01(水) 18:27:32.03IEコンポーネントを埋め込んでいるのですが、
OSにインストールしているIEがバージョン9.0なのに、
IEコンポーネント内のIEのバージョン判定をすると7.0になっています。
IEコンポーネント内のIEのバージョンは、何に基づいて決まるのでしょうか?
この問題で非常に悩んでいますので、教えてください。
0846デフォルトの名無しさん
2011/06/01(水) 19:54:39.03と思いつつ、これが参考になるかもしれないし、ならないかもしれない。
http://social.technet.microsoft.com/Forums/ja-JP/internetexplorerja/thread/d830909f-350e-4ad9-9e7c-0efb866c2c85/
0847デフォルトの名無しさん
2011/06/12(日) 03:18:27.25たんだが、チェックボックスなどの他のコントロールのテキストの
バックグラウンドが透過できない。ブラシをビットマップにすると
ちゃんと全てのコントロールのバックグラウンドがビットマップで塗られる。
m_beBackgroundをNULL_BRUSHでクリエイトすると透過せずに、デフォルトのバック
グラウンドカラーが塗られる。これはバグかなぁ。
どなたか解決した方いますか?透過が使えないのは非常に不便ですね。
0848デフォルトの名無しさん
2011/06/13(月) 10:43:31.08コントロールの透過は実際に透過してるわけではなくて背景色で
塗りつぶしているからね。
だからNULL_BRUSHで透過しないのはある意味「仕様」になる。
0849デフォルトの名無しさん
2011/06/13(月) 15:00:33.81CStaicの場合もそういう動作になるなら仕様なんだけどね。
相変わらず仕様が統一されてないのが何とも・・・
0850デフォルトの名無しさん
2011/06/13(月) 16:45:38.41CStaticが特別だと思うべきでは?
昔からそうなってるんだから「相変わらず」も何もないと思うけど。
だから、『ある意味「仕様」』と書いたんだけど。
まあ、その「仕様」がクソなのは間違いないな。
0851デフォルトの名無しさん
2011/06/13(月) 20:44:08.81まあ、MSに倣って自前で用意するのが一番なんだろうな。
0852デフォルトの名無しさん
2011/06/14(火) 10:13:51.32MFCだとCMapのKEYに値を詰め込んでいく方式になりますか?
VALUEにあたるものはなにもないので、ちょっと変な感じもするのですが。
0853デフォルトの名無しさん
2011/06/14(火) 10:30:51.85C++0xかboostのunordered_set
順序付きならstd::set
0854デフォルトの名無しさん
2011/06/14(火) 12:31:50.750856デフォルトの名無しさん
2011/06/14(火) 14:16:45.790857デフォルトの名無しさん
2011/06/14(火) 15:42:14.41「スタティックリンクライブラリでMFCを使用する」にして
プロジェクト作ると、デバッグ出力に
SXS: Invalid parameter(s) passed to FindActCtxSection*()
dwFlags = 0x00000001
ReturnedData = 002BF750
->cbSize = 0
って、感じのメッセージが5つくらい出るんだけど、なにこれ?
一応動作してるぽいから気にしなくて良いのかもしれんが・・・
環境は、Win7 64bit VS2008 pro SP1
0858デフォルトの名無しさん
2011/06/14(火) 17:53:45.80これかな?
http://blog.m-ri.de/index.php/2011/04/14/bug-black-patchday-for-all-os-from-xp-and-later-3-mfc-8-0-vc-2005-or-mfc-9-0-vc-2008-linked-dynamically-to-the-mfc-may-not-find-the-mfc-language-dlls-after-installation-of-the-security-packs-d/
0859デフォルトの名無しさん
2011/06/14(火) 22:35:46.44FIX: Multithreaded MFC application may stop responding in Windows
that has an MUI language pack installed if the application is developed in Visual Studio 2008
http://support.microsoft.com/kb/2495003
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=34190
0860デフォルトの名無しさん
2011/06/15(水) 08:36:48.99http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=e6a8e024-12ee-43d5-9aae-4c721505d6df
4月公開の更新を置き換え。
0861857
2011/06/15(水) 12:17:59.79ありがとう。
今月の定例のWindowsアップデートで、 >>860の更新入ってた。
それいれたらメッセージ出なくなりました。
0862デフォルトの名無しさん
2011/06/21(火) 22:24:45.51とたんに難しく感じるのは私だけ?
0863デフォルトの名無しさん
2011/06/22(水) 08:27:48.140864デフォルトの名無しさん
2011/06/22(水) 09:52:59.870865デフォルトの名無しさん
2011/06/26(日) 08:27:36.690866デフォルトの名無しさん
2011/06/26(日) 14:07:23.15無いものを構築するならどれもそこそこ大変だろ
0867デフォルトの名無しさん
2011/06/26(日) 15:05:13.56mfcは.netやvclと違って、win32を機能ごとに纏めただけで、抽象化度合いが低いから、より理解はし難い
gui部分もほとんど手入力
0868デフォルトの名無しさん
2011/06/27(月) 08:48:48.480869デフォルトの名無しさん
2011/06/27(月) 16:46:38.340870デフォルトの名無しさん
2011/06/27(月) 16:55:05.600871デフォルトの名無しさん
2011/06/27(月) 23:20:21.39イミフ
0872デフォルトの名無しさん
2011/06/28(火) 00:05:32.16それはあんたの神レベルが低いだけ
高レベルなら、まわりから神扱い
0873デフォルトの名無しさん
2011/06/28(火) 00:43:46.03そんな職場はSTLもわからん屑の集まり。
0874デフォルトの名無しさん
2011/06/28(火) 00:47:39.52今ならともかく、10年前とかは何で作ってたんだよ。その現場は。。。
昔は客の方から指定されて嫌でも使わざるを得なかったはずだが。。。
0875デフォルトの名無しさん
2011/06/28(火) 07:53:08.890876デフォルトの名無しさん
2011/06/30(木) 21:48:06.42しかも、Viewっていうものも、ウィンドウに1つしかおけないし、しょぼい
エディットや、リスト程度・・・
これじゃ、大したアプリつくれなくないですか?
もしかしてMFCって初心者?
0877デフォルトの名無しさん
2011/07/01(金) 00:46:21.92.netではどうか知らんが、昔はvbのコンポーネントはvcとmfcで開発されてた
0878デフォルトの名無しさん
2011/07/01(金) 06:59:56.550879デフォルトの名無しさん
2011/07/01(金) 09:00:30.74素晴らしいライブラリがあっても大したアプリは作れないと思う。
0880デフォルトの名無しさん
2011/07/01(金) 09:48:07.38View1個という制約はないよ
0881デフォルトの名無しさん
2011/07/01(金) 09:54:33.42MFC 【えむ-えふ-しー】[名]
Windowsアプリケーション開発用のクラスライブラリの一種で、
Microsoftから提供されているMicrosoft Foundation Classのこと。
SleipnirはMFCを使って作られている。
0882デフォルトの名無しさん
2011/07/01(金) 12:52:05.99BEGIN
MENUITEM "コマンド1", ID_COMMAND1
MENUITEM "コマンド2", ID_COMMAND2
END
MFCのアプリケーションで上記のようなサブメニューがあって、
コマンド1もコマンド2もグレー化すべき状態のときに、
親メニュー内の"サブメニュー"のポップアップ項目自体(IDなし)を
グレー化する方法がMSDNのどこかに書いてあった記憶があるのですが、
どなたか憶えていらっしゃいませんでしょうか。
0883デフォルトの名無しさん
2011/07/02(土) 02:07:40.46pMenu->EnableMenuItem(nPopUpPos,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
のこと?
0884デフォルトの名無しさん
2011/07/04(月) 00:17:04.490885デフォルトの名無しさん
2011/07/04(月) 00:18:22.830886デフォルトの名無しさん
2011/07/04(月) 08:50:34.38それを、メニューの位置関係に依存せずに
ID_COMMAND1などのCCmdUI更新時のタイミングで行う方法が
どこかに書いてあったと思ったのですが、勘違いですかね。
0887デフォルトの名無しさん
2011/07/06(水) 07:39:50.75このコントロールをViewとして使用した場合はどうすればいいのですか?
CListCtrlのCListViewみたいに使いたいです。
0888デフォルトの名無しさん
2011/07/06(水) 07:55:34.29なに言ってんの?
0889デフォルトの名無しさん
2011/07/06(水) 12:09:36.28はぁ?
0890デフォルトの名無しさん
2011/07/06(水) 13:27:24.440891デフォルトの名無しさん
2011/07/07(木) 00:12:27.52馬鹿のやり方だな。
CViewからの派生クラスに、メンバでCYListCtrを持たせて使うのが常道だろ。
ググればその手のサンプルもあるし、少しは勉強しろよ屑。
0892デフォルトの名無しさん
2011/07/07(木) 00:33:33.29CMFCListCtrlとかCMFCTreeCtrlとか。
0893デフォルトの名無しさん
2011/07/07(木) 13:04:04.220894デフォルトの名無しさん
2011/07/07(木) 13:44:42.26http://www.geocities.co.jp/Hollywood-Kouen/2198/
0895デフォルトの名無しさん
2011/07/07(木) 15:15:05.76VB6のプログラムをMFCに移植するにあたって、
画面上のオブジェクト(コントロール)の、座標とかテキストとかフォント設定とかを頻繁に弄るわけですが、
VBではプロパティで値を入出力する仕組みになっていて、例えば座標は
m_edit.Left = 10
m_edit.Top = 10
m_edit.Width = 100
m_edit.Height = 100
みたいに書けるわけです。
しかしMFCでは
RECT r;
r.left = 10;
r.top = 10;
r.bottom = 110;
r.right = 110;
m_edit.MoveWindow(&r);
みたいに書かないといけません。
移植の効率と、ミスをなくすために、
”プロパティ”を後から多重継承で実装できるようなインターフェースクラスのサンプルってどこかにないでしょうか?
0896名無し募集中。。。
2011/07/07(木) 15:44:00.15などの移植用の関数を作ればいいんじゃないカナ
あとMFCと多重継承は相性が悪いのでやめたほうがいいと思う
0897デフォルトの名無しさん
2011/07/07(木) 16:07:09.17例えば、VBで下のように一行で書けるものを移植するには、
m_edit.Width = m_edit.Width + 10
MFCでは、
RECT r;
m_edit.GetWindowRect(&r);
r.right += 10;
m_edit.MoveWindow(&r);
というように、結構見た目が違うようなソース変更を強いられる訳です。
VC++にも一応propertyの実装があって、
http://msdn.microsoft.com/en-us/library/yhfk0thd(v=vs.80).aspx
それを使ってCWnd派生のコントロールをすべてVBと同じインターフェースで操作できるようにすることも
可能っぽいので聞いてみました。
0898デフォルトの名無しさん
2011/07/07(木) 16:41:01.070899895
2011/07/07(木) 18:03:06.66ほぼVBのソースコードのまま移植できることが確認できました。
感動です。
MFCのボタン、エディット、コンボボックス、チェックボックス、ダイアログ・・・etcの各クラスに
多重継承して使っていこうと思います。
0900デフォルトの名無しさん
2011/07/07(木) 18:31:30.70自己満足なソースだと他の人が保守しにくいんだよな
0901デフォルトの名無しさん
2011/07/08(金) 13:09:27.38MFCのクラスはすべてCObjectからの派生なので、MFCクラス同士の多重継承ができないというだけで、
相性が悪いわけではない。
「なんかよく分からないけど多重継承したらコンパイルエラーが出た。相性悪いなぁ。」
とか言ってる人は、多重継承を根本的に理解していない。
0902デフォルトの名無しさん
2011/07/08(金) 14:52:38.37揚げ足取りみたいですまんが、すべてではない。
程度の低い馬鹿ほど、こういう情報を確認もせずに信じ込んで他へ垂れ流すので気をつけて欲しい。
0903名無し募集中。。。
2011/07/09(土) 05:06:22.78http://msdn.microsoft.com/ja-jp/library/62x3wzxy(v=vs.80).aspx
それらをひっくるめて(>>895程度の移植で効率とかミスと言う人のレベルを合わせて)相性と表現した
0904デフォルトの名無しさん
2011/07/09(土) 14:28:44.76MSが本当にやりたかったのはC#とかだろう。
新しいことが覚えられないお爺ちゃんプログラマが、ほとんどC言語の感覚でMFCを使うケースが多い。
だから「MFCで多重継承?そんなの邪道wwwwwwつか保守しにくいwwwww」と脊髄反射してしまう。
0905デフォルトの名無しさん
2011/07/09(土) 16:59:50.700906デフォルトの名無しさん
2011/07/09(土) 23:20:36.65こいう奴らって大抵は、MFCに挫折した奴がおおいよねw
0907デフォルトの名無しさん
2011/07/10(日) 10:11:17.39CStringって気持ち悪いし、C○○Arrayとか何それ?vecor使えよって。
0908デフォルトの名無しさん
2011/07/10(日) 12:39:50.620909デフォルトの名無しさん
2011/07/10(日) 14:39:04.65あれは互換用に残してあるだけの旧クラスだから。
配列ならCArrayかCTypedPtrArrayを使うのが普通。
まあSTLが大体機能する今となっては、vectorでも一向に構わないと思うが。
0910デフォルトの名無しさん
2011/07/10(日) 17:16:29.11でもUnicodeとMBCSを同じプログラムの中で両方とも使いたい場合もあるのよ。
STLならstringとwstringで明確に共存できるけど、CStringの場合はどうなってしまうのか意味不明。
0911デフォルトの名無しさん
2011/07/10(日) 17:27:27.97CStringA と CStringW で使い分ければいいんじゃないの?
ttp://msdn.microsoft.com/ja-jp/library/5bzxfsea(v=vs.80).aspx
0912デフォルトの名無しさん
2011/07/10(日) 17:40:58.830913デフォルトの名無しさん
2011/07/10(日) 20:51:24.690914デフォルトの名無しさん
2011/07/10(日) 20:53:14.270915デフォルトの名無しさん
2011/07/10(日) 21:20:30.19MS純正でなくても良ければ売り物も有るし、codeguruとかにfreeでなかったかな。
0916デフォルトの名無しさん
2011/07/10(日) 21:51:11.530917デフォルトの名無しさん
2011/07/10(日) 22:39:55.110918デフォルトの名無しさん
2011/07/11(月) 19:53:47.430919デフォルトの名無しさん
2011/07/12(火) 21:48:07.930920デフォルトの名無しさん
2011/07/13(水) 01:04:59.98http://msdn.microsoft.com/en-us/library/dd145045(v=VS.85).aspx
使い分けるというより、両方を呼び出した結果で座標変換を行う感じ。
0921デフォルトの名無しさん
2011/07/13(水) 01:09:12.08解決
0922デフォルトの名無しさん
2011/07/14(木) 13:32:24.15どこかにサンプルがあったと思ったのですが、ググっても見つからずに困っています。
たしかCEditの派生でやってたと思うのですが……ご存じの方、教えていただけたら幸いです。
どうやって?
なんとかmzは馬鹿だと思っていたが、間抜けだったのか。
0925デフォルトの名無しさん
2011/07/16(土) 01:05:38.07言えないって風潮ないですか?
.NETなんてインタプリタみたいなwのなんてできてもって感じ
0926デフォルトの名無しさん
2011/07/16(土) 01:49:49.76MFCに関しては、それが客に求められていない限り、できれば避けて通った方がいい。
Win32APIをMSDNのヘルプを見て使える程度の知識があれば十分。
0927デフォルトの名無しさん
2011/07/16(土) 12:30:00.822、3年前まではその通りだった
今じゃ過去のメンテや特殊なケース以外はないな
新規プロジェクトはほぼ.NETの方向にいっとる
要は使えるレベルのMFC使いが少ないことが原因
なぜ少ないか?
習得に時間がかかりすぎるから
つまり、MFCは非効率な開発体系ということを認識したMSが
.NET の方へ誘導している
言語人口は減る一方で増えることはない
かつてのCOBOLの運命にあるな
0928デフォルトの名無しさん
2011/07/16(土) 13:20:41.61事実上はデファクトスタンダードであることに疑問を挟む余地はない
0929デフォルトの名無しさん
2011/07/16(土) 13:51:19.590930デフォルトの名無しさん
2011/07/16(土) 13:57:47.590931デフォルトの名無しさん
2011/07/16(土) 14:27:55.11MFCを習得したやつは、どの言語も短期間で習得できる
なぜなら、どの言語もMFCよりもはるかに簡単だから
0932デフォルトの名無しさん
2011/07/17(日) 11:05:10.540933デフォルトの名無しさん
2011/07/17(日) 11:40:22.04標準付属のライブラリの使い方は全然分からない奴がいたら面白いなあ。
0934デフォルトの名無しさん
2011/07/17(日) 13:33:30.27ライブラリはオンラインマニュアルないと使えないわ。
0935デフォルトの名無しさん
2011/07/17(日) 17:02:50.56c++も難解
mfcも難解
だから、他の言語やクラスライブラリ覚えるのは楽になる
(と言うか、mfc覚えないで済むなら覚えなくて良い)
0936922
2011/07/19(火) 07:57:37.84やっぱむりだよねぇ? 別の物と勘違いしてるんじゃ無いかと……
連休中、英語の技術文書も検索してみたけど見つからなかった……
答え知ってる方、教えてください……orz
0938デフォルトの名無しさん
2011/07/19(火) 10:33:55.34ttp://www.codeproject.com/
リードオンリーならリストボックスのが手っ取り早いとは思うけどな。
0939デフォルトの名無しさん
2011/07/19(火) 11:27:57.47別の手段考えたほうがいいね
0940デフォルトの名無しさん
2011/07/19(火) 12:46:20.560941デフォルトの名無しさん
2011/07/19(火) 21:50:15.650942デフォルトの名無しさん
2011/07/19(火) 21:52:17.29MFC でPictureControlを使ってPNG画像を表示させてるのですが
下の画像みたいに、PictureControlのアイコン部分だけ描画されなくて困ってます。
解決方法があれば教えてください。
http://freedeai.saloon.jp/up/src/up6224.png
0943デフォルトの名無しさん
2011/07/19(火) 22:01:39.370944942
2011/07/19(火) 22:07:00.41CStatic m_PCAboutImage;
CImage m_ImageAbout;
LoadFromResourceGraphic( IDB_PNG1, _T("PNG"), AfxGetInstanceHandle(), &m_ImageAbout );
これで、OnCreate時にリソースから画像を取得して
HDC hDC = m_PCAboutImage.GetDC()->GetSafeHdc();
m_ImageAbout.BitBlt( hDC, 0, 0, 600, 150, 0, 0, SRCCOPY );
これで、OnPaint時描画してます。
0945デフォルトの名無しさん
2011/07/19(火) 22:39:52.58StaticコントロールはCS_PARENTDCだから、
親のクライアントに直接描画するのと殆ど変わらないし、
その上にStaticコントロールの描画が重ねられた結果、
描画されないように見えている、ってオチじゃね?
0946デフォルトの名無しさん
2011/07/19(火) 23:25:13.81決め打ちならPictureControlを使う意味があるの?
OnPaint時ってメインダイアログの?
なら直接メインダイアログに描画すればいいんじゃないの?
0947デフォルトの名無しさん
2011/08/09(火) 22:41:56.83SendMessage(WM_CLOSE)でも
EndDialog(IDCANCEL)でも閉じるのに
CFileDialogのモーダルダイアログだと閉じないんですが、
どうすれば閉じられるでしょうか?
0948デフォルトの名無しさん
2011/08/10(水) 09:10:44.37CFileDialogというクラスの正体は、ファイルダイアログ内の子ダイアログなので、
CFileDialogのGetParent()に対してSendMessage()なりEndDialog()なりを行う。
0949デフォルトの名無しさん
2011/08/20(土) 16:57:19.34このコントロールは、AddBitmap(), AddString(), AddButtons()という順番でボタンを追加していくのですが、
追加されたボタンを削除することはDeleteButton()でできます。
しかしAddBitmap(), AddString()で追加されたイメージや文字列を削除する方法がありません。
これはコントロールオブジェクトそのものをdeleteしないとダメなんでしょうか。
0950デフォルトの名無しさん
2011/08/21(日) 16:29:30.65DoModal()を読んだ後に、子ダイアログのエディットボックスへ
1から100までカウントアップを表示させたものを作りたいです。
方法を教えてください。よろしくお願いします。
0951デフォルトの名無しさん
2011/08/21(日) 16:32:21.83どの辺で引っかかってるの?
0952デフォルトの名無しさん
2011/08/21(日) 19:48:13.61イベントハンドラなしに動かしたいと考えてます。
OnInitDialogでの処理では駄目だと思うのですが、
何を使ったらよいのか分からない状態です。
便利なクラスとかサンプルなどを教えて頂けると幸いです。
よろしくお願い致します。
0953デフォルトの名無しさん
2011/08/22(月) 11:57:12.76タイマーで経過表示でもしたいのか?
何故OnInitDialog()ではダメだと思ったのか?
0954デフォルトの名無しさん
2011/08/22(月) 14:21:39.65ダイアログの中だけで完結してもいいのか、
とか聞こうと思ったんだけど、イベントハンドラとか
言ってるってことは、実行中に画面書き替えたいとか
そういうこと?
InvalidateしてUpdateWindowするとか、
DoEventみたいなことしたいなら、
{MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
AfxGetThread()->PumpMessage();
}}
呼ぶとかしてみては
0955デフォルトの名無しさん
2011/08/22(月) 16:19:57.18おまいらは社内規格で良いだろうが、それにつき合わされる外部の
人間はウンザリ。もう、いいかげんにしろと。
0956デフォルトの名無しさん
2011/08/22(月) 16:28:05.270957デフォルトの名無しさん
2011/08/22(月) 16:37:32.530958デフォルトの名無しさん
2011/08/22(月) 18:07:08.87>>953
子ダイアログでプログレスバーみたいなものを作りたいためです。
OnInitDialog()では、処理はするけど1,2,3・・・99,100のように順々に表示されず、いきなり100が子ダイアログ表示されるのではないのでしょうか。
そのため、OnInitDialog()では駄目だと思いました。間違ってたらすいません。
>>954
私はダイアログの中だけで完結させたものを作りたいと考えてます。
子ダイアログ生成後に画面を書き換えるという操作をしたいと考えてます。
InvalidateしてUpdateWindowするというのと、DoEventについて調べてみようと思います。
アドバイスありがとうございました。
0959デフォルトの名無しさん
2011/08/24(水) 23:30:48.92OnInitDialogの中でSetTimerでタイマーセットして、
OnTimerでカウントアップすればいいんじゃないの?
0961デフォルトの名無しさん
2011/08/29(月) 18:43:55.64どうすればいいでしょうか。
0962デフォルトの名無しさん
2011/08/29(月) 19:19:52.96ビットマップを貼りたいだけなら
・リソースにビットマップを追加する
・リソースエディタでTypeをビットマップにする
・Imageに追加したビットマップのIDを指定する
で出来る。
プログラム内部で色々な図形を書きたいならオーナー描画を勉強すべし。
(その場合ピクチャーコントロールは忘れていい)
0963デフォルトの名無しさん
2011/08/29(月) 22:32:02.79ありがとうございます
ピクチャーコントロールはできてるんですが
その上に図形を描写したいんです。
0964デフォルトの名無しさん
2011/09/03(土) 15:34:11.78あるダイアログにスタティックテキストとリストコントロール載せてるんですが、
スタティックテキストの内容を1秒に1回更新していて結構ちらつきます。
このちらつきを抑えるためにダイアログにWS_EX_COMPOSITEDっていうウィンドウスタイル指定してるんですが、
この方法だと、リストコントロールのヘッダ以外が描画されなくなってしまいます。
なんかいい方法ありますか?
環境
Vista
VC2008 Pro
0965デフォルトの名無しさん
2011/09/03(土) 19:50:17.86普通だと内容更新は即再描画に繋がっているから、
WM_SETREDRAW+InvalidateRectで描画をWM_PAINTまで遅延させてみたらどう?
DWMが何か空気呼んでうまくやってくれそうな気がしないでもない。
0966デフォルトの名無しさん
2011/09/05(月) 06:10:11.940967デフォルトの名無しさん
2011/09/05(月) 07:59:24.560968デフォルトの名無しさん
2011/09/05(月) 13:17:09.20作ろうと思えばいつでも作れる
0969デフォルトの名無しさん
2011/09/06(火) 05:59:48.91何もしなくても、アプリケーションの再起動時にCDockablePaneの状態やスタイルやリボンの状態が復元されるのですが
この情報の保存先はどこにあるのでしょうか?
0970デフォルトの名無しさん
2011/09/06(火) 06:45:03.370973デフォルトの名無しさん
2011/09/09(金) 00:26:56.08再起動マネージャとかちょっと試してみたいな。
2008用に更新パッケージとかないのかな。
0974デフォルトの名無しさん
2011/09/10(土) 09:28:08.33このファイルの目的は何で、何が記述されているんですか?
0975デフォルトの名無しさん
2011/09/10(土) 09:58:30.99そのままヘッダーファイル読めば良いじゃん
mfcの理解が深まるぞ
0976デフォルトの名無しさん
2011/09/10(土) 14:24:19.10MFC でDLLを作りたいです、しかしダイアログなどは必要ありません、このようなMFC のDLL の作り方なのですが、これでいいでしょうか?
新規プロジェクト→Win32 コンソール アプリケーション→アプリケーションの設定より下記の項目にチェックを入れる
アプリケーションの種類
コンソールアプリケーション
追加のオプション
空のプロジェクト
共通ヘッダーファイルを追加
MFC
0977デフォルトの名無しさん
2011/09/10(土) 14:31:40.65アプリケーションの種類
☓コンソールアプリケーション
○DLL
です
0978デフォルトの名無しさん
2011/09/10(土) 23:33:27.390979デフォルトの名無しさん
2011/09/12(月) 12:14:01.150980デフォルトの名無しさん
2011/09/12(月) 18:28:47.23ヤダァ(`Д´(ω・´川)<おばさんが君の布団でオナラしてあげるよ
| ̄ ̄ ̄ ̄ ̄ ̄ ゙̄|
| | ̄ ̄ ̄ ̄| |
| | @ @| |
| |@ @ | |
| |____| |
|__________|
(⌒ ⌒;:゙:ヽ.' 。 /. ゚
从 `(´⌒;`:;ノ:人;;⌒`:" / 从 。
.(´;(´⌒(;・"⌒`);/`):';⌒`)`)。.' ゚
。((;;; _, ,_). | | | ||" :';))’: (⌒ ⌒;:゙:
(`Д´(ω;´川) ゚(⌒ ;:゙。:ヽ.'/)
| ̄ ̄ ̄ ̄ ̄ ̄ ゙̄|`):';⌒`)`)。.' ゚
| | ̄ ̄ ̄ ̄| |⌒`).(´;(´⌒(;・"⌒`);
| | @ @| | ブボボ!ブボボボボボボボボボボボボ!!!
| |@ @ | |⌒`) :; 从 )
| |____| |(⌒)) \ ))
|__________| ヽ
0981デフォルトの名無しさん
2011/09/14(水) 08:54:23.6664bitに移行するのは可能ですか?
0982デフォルトの名無しさん
2011/09/14(水) 09:04:13.460983デフォルトの名無しさん
2011/09/14(水) 14:26:54.32MDIとは無縁のただの分割ウィンドウを作りたいだけなのですが、サンプルはMDIのものばかりで、どのように実現すればよいのかよく分かりませんでした
というより、Splitterの付いた(汎用?)2ペインウィンドウの作成方法を教えてください。お願いします。
0984デフォルトの名無しさん
2011/09/14(水) 15:03:45.520985デフォルトの名無しさん
2011/09/14(水) 15:45:38.55プロジェクト形式をWindows エクスプローラにすれば要望通りのものになるかと。
0986983
2011/09/15(木) 12:11:08.62プロジェクト時にシングル&エクスプローラー形式のソースを見た所、
CMainFrame上に
CSplitterWnd m_wndSplitter; を配置し、
OnCreateClient 上にて
CreateStatic(this, 1, 2);
CreateView(0, 0, RUNTIME_CLASS(CHogeView), CSize(100,100), pContext);
CreateView(0, 0, RUNTIME_CLASS(CFugaView), CSize(100,100), pContext);
とすることで望み通りに動きました
ありがとうございました。
0987983
2011/09/15(木) 12:12:11.12CreateView(0, 1, RUNTIME_CLASS(CFugaView), CSize(100,100), pContext);
ちょっとミスしたので訂正しときます。
0988デフォルトの名無しさん
2011/09/15(木) 18:02:13.12開発環境:VisualStudio2005
回答お願いします。
MFCのエディットコントロールにログを吐き出すプログラムを作ってみました。
大量のログを表示させると途中で止まってしまいます。
なので100行毎に古いログを消すと言う処理を入れてみたのですが上手く行きません。
どうすれば良いか誰か教えて下さい。
引数:エディットボックスに表示する文字列(可変長で\0終端)
CEdit m_EdLogMsg;
void testDlg::__printf_s(CHAR szMsgBuffer[])
{
UINT EditMax; // テキストの最大値
// エディットボックスに表示できる最大バイト数を取得する
EditMax = m_EdLogMsg.GetLimitText();
// 100行を超えたら古いログを消す(本当はEditMax Byteを超えた場合に古いログを消したい)
if(m_EdLogMsg.GetLineCount() > 100){
printf("Log Over.\n");
m_EdLogMsg.SetSel(0, 1);
m_EdLogMsg.Clear();
}
// カーソルを最後に移動させる
m_EdLogMsg.SetSel( EditMax, EditMax, FALSE );
m_EdLogMsg.ReplaceSel(szMsgBuffer,0);
m_EdLogMsg.ReplaceSel("\n",0);
}
0989デフォルトの名無しさん
2011/09/15(木) 18:08:46.620990デフォルトの名無しさん
2011/09/15(木) 18:36:55.40自分で調べろ、屑
0991名無し募集中。。。
2011/09/15(木) 18:52:51.66http://hibari.2ch.net/test/read.cgi/tech/1316080347/l50
■忘れた><
0992デフォルトの名無しさん
2011/09/15(木) 19:48:19.88988ではないがそんなに気になるか?
単に質問か解答を区別して書き込んでるだけだと思うのだが
0993デフォルトの名無しさん
2011/09/15(木) 22:22:49.11どこまでを古いログと見なすつもりなんだ?
0994デフォルトの名無しさん
2011/09/15(木) 22:24:08.12この手の質問で「上手く行きません」ってよく書くけど、どこがどううまくいかないか書けば答えやすいのに・・・。
それはともかく、ツッコミどころ満載だけど、
100行超えたとき全部クリアするなら、SetWindowTextで設定すれば良いんじゃないの?
>m_EdLogMsg.SetSel(0, 1);
>m_EdLogMsg.Clear();
の意味わかってる?
>void testDlg::__printf_s(CHAR szMsgBuffer[])
中身と逸脱した糞みたいな関数名だな。
0996デフォルトの名無しさん
2011/09/15(木) 23:24:02.32editコントロールの上限(0x7FFFFFFE)越えるサイズでも大丈夫だった。
自前で メモリ用意すればいけるみたい
0997デフォルトの名無しさん
2011/09/15(木) 23:51:56.26一行増える度に一番古い行を一行消す様にしたいです。
0998デフォルトの名無しさん
2011/09/15(木) 23:56:38.380999デフォルトの名無しさん
2011/09/16(金) 00:09:37.611000デフォルトの名無しさん
2011/09/16(金) 00:09:52.3710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。