■MFC相談室 mfc11.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
関連リンクは >>2-10 の辺り。
0152デフォルトの名無しさん
NGNG同時に同じリソースにアクセスされても整合性が取れる実装ってことだね
ライブラリなんかを作る場合、その部分をしっかり作っておかないと不味い
0153138
NGNGCSubThread *pThread = (CSubThread*)AfxBeginThread(RUNTIME_CLASS(CSubThread),THREAD_PRIORITY_NORMAL, 0, 0);
pThread->m_bAutoDelete=FALSE;
pThread->ResumeThread();
これでCWinThreadの派生クラスを作成しましたが、これでよいのでしょうか?
複数のスレッドにするにはその数分クラスを作成しないといけないのですか?
0154デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNG言っておくけどユーザインターフェーススレッドはそのスレッドでウインドウを
マネージしたい場合(メッセージキューを作って云々ってことね)に
作るスレッドなので138の今回の目的のためには使えないんじゃないかと思う
なぜならユーザスレッドとワーカスレッドなんてのはMFCの上だけで存在するものだし
多分もっと根本的な問題だと思うけど
0157デフォルトの名無しさん
NGNGOnOKの実装ってそのままにしていない?
CDialog::OnOKのディフォルトって内部でEndDialogを呼び出すけど。。。
0158デフォルトの名無しさん
NGNGたぶんソース張ってもらったほうが早いんで、ソース張ってくれます?
スレッドの部分だけでいいんで。
0159デフォルトの名無しさん
NGNGUINT ThreadFunc( LPVOID lpVal )
{
CThreadTEstDlg *pDlg = (CThreadTEstDlg *)lpVal;
pDlg->GetDlgItem( IDC_EDIT1 )->SetWindowText( "テスト" );
return 0;
}
void CThreadTEstDlg::OnOK()
{
// TODO: この位置にその他の検証用のコードを追加してください
CWinThread *pThread = AfxBeginThread( ThreadFunc, this );
//CDialog::OnOK();
}
0161138
NGNGvoid CTestDlg::OnOK()
{
threadflag = 1;
CWinThread *p_thread = ::AfxBeginThread(Thread, this);
//CDialog::OnOK();
}
UNIT thread(LPVOID pParam)
{
CTest dlg;
CString msg;
while(threadflag){
// 処理
//msgにメッセージを格納
}
dlg.GetDlgItem(IDC_EDIT1)->SetWindowText(msg);
}
threadflagがグローバル変数のフラグで
こいつは本当はMutexLockとかしてもう少し複雑に処理してますが、
流れはこんな感じです。
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNGここ
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG俺は寝ます・・・
0167デフォルトの名無しさん
NGNGこれをstl使って書いたコードが見たいのですが、誰か書いてくれませんか?
0168デフォルトの名無しさん
NGNG>115のでもいいなら...
#include <vector>
#include <string>
#include <stdio.h>
using namespace std;
int main(void)
{
vector<string> vec;
vec.push_back("あ");
vec.push_back("い");
vec.push_back("う");
printf("配列の要素数は %d コです。\n", vec.size());
for (int i = 0; i < vec.size(); ++i) {
printf("配列の %d 番目の 要素は %s です。\n", i, vec[i].c_str());
}
return 0;
}
0169つづき
NGNGfor文のところは
int i;
vector<string>::const_iterator iter;
for (i = 0, iter = vec.begin(); iter != vec.end(); ++iter, ++i) {
printf("配列の %d 番目の 要素は %s です。\n", i, iter->c_str());
}
でもOK。これはSTLのイテレータという機能を使った方法。(イテレータは自分で勉強してちょ)
0170デフォルトの名無しさん
NGNG深夜にありがとう。
がんがりまっす
0171デフォルトの名無しさん
NGNGこれさー、datのSTARTとENDそのまま読み込むからエラーになるんだよ。
そりゃ、コンパイル通っても実行はできんさw
0172デフォルトの名無しさん
NGNGCDialogBar上に、スピンボタンを配置しました
CDialogBarは、派生クラスを作らないとMSDNにあったのでコントロールのハンドリングは
すべてCMainFrame上に持ってきています。
このようにすると、スピンコントロールがどうしてもEnableになりません
これはどういうことでしょうか
環境はVC6sp6です
017397
NGNG解決しました。
回答をくれた皆さんありがとうございました。
0174デフォルトの名無しさん
NGNGCDialogBar::OnUpdateCmdUIをオーバーロードしないとあかんらしいです。
うちはVS.NETだけど、たぶん同じだと思います。
0175デフォルトの名無しさん
NGNGm_lpCmdLineを使うのはわかったのですが、サンプル欲しいです。
渡したいコマンドライン引数は
「xxx.exe -a:c:\hoge.txt -b:c:\poko.txt」
MFCのダイアログベースで制作しているアプリです。
引数を他のcppファイルで受け取って、変数に入れて使用したいです。
宜しくお願い致します。
0176デフォルトの名無しさん
NGNG回答ありがとうございます
つまり、CDialogBarを派生させないといけないと言うことですね
問題のおきているソースは、かなりでかいプロジェクトでCDialogBarのほとんどの
コマンドハンドラーはCMainFrameに記述されています。
そのためCDialogBarの派生クラスに持っていくのは結構手間がかかってしまいます。
ためしに新規にダイアログバーを持つSDIアプリを作ってみたところスピンコントロールは
問題なくEnableになっていました。
MFCのソースを解析してみたところ、通常ボタンコントロール以外はGet(DLGC_BUTTON以外)
Enableになるように見受けられるのでもう一度どういう原因でDisableになるか調べてみようと思っています
0177デフォルトの名無しさん
NGNG・・・・
問題なくEnableになっていました。
MFCのソースを解析してみたところ、ジェネリックボタンコントロール以外は
(WM_GETDLGCODEの戻り値がDLGC_BUTTON以外)
Enableになるように見受けられるのでもう一度どういう原因でDisableになるか
調べてみようと思っています
0178デフォルトの名無しさん
NGNG>>175
MFCの場合引数はCCommandLineInfoを継承したクラスを生成して
ParseParam関数をオーバーライドして引数を解析するというのが一般的です。
(といいつつあまり一般に利用されていないけど)
今回の引数は形式がウインドウズの標準と違うため、独自に文字列の
切り離しなどを入れるしかありません-をオプションの識別子としているのであれば
-を取ってコロンを境に前後に文字列を分ける等の処理を入れれば良いでしょう
さてそれを他のcpp(多分他のクラスということでしょうか)に渡すのであれば
ab切り出したそれぞれの文字列変数(CStringなど)を別のクラスに渡せばいいと思います
0179デフォルトの名無しさん
NGNG>>32
0180デフォルトの名無しさん
NGNGちょっと質問です。
今、巷の普通の本屋さんで売っているWindowsプログラムの本は大体Visual C++の
本です。
それでそういう本には、「ウイザードで勝手に作られるんで、カスタマイズしたいときは
ここをいじってください」としか書いてなくて、なぜそこをいじればいいのか、プログラムが
どういう流れになっているのか全く分かりません。
結局、SDKの方が分かりやすいと思い、まずはそっちをやることにしました。
みなさんはどうやってMFCを勉強されたのでしょうか?
もっと良い入門書があるのでしょうか?
0181デフォルトの名無しさん
NGNGどの関数がどのクラスのメンバか意識するようにしたら理解できた。
関数名しか書いてなくても、クラス名::関数名 っていうようにして憶える。
0182デフォルトの名無しさん
NGNG> それでそういう本には、「ウイザードで勝手に作られるんで、カスタマイズしたいときは
> ここをいじってください」としか書いてなくて、
まずはそこから始めて、具体的な成果物を作らないことにはモチベーションが
持続しないと思うが。体系なんてものは大きすぎてなかなか理解できるもので
ないし、とにかく何か動くものを作れるようになることが先。手段は後で良いんだ
よ。まず「何を作りたいか」、「どういう動きをさせたいか」が大切。それに沿って
どうすれば良いかを調べていく。経験を重ねれば、下層にあるものがだんだん
見えてくるし、それからシステムの学習に入ればいい。
もちろん、CやC++の基礎がないようなレベルだったら話は別。そういった
言語レベルの基礎知識は身に付いてないとVCプログラミングは難しい。
0183デフォルトの名無しさん
NGNGそんなあなたに
翔泳社の標準講座MFC ハーバートシルト著
0184デフォルトの名無しさん
NGNGMFC→ウィザードが生成したものをいじる
SDK→猫からソースパクっていじる
結局同じ
0185デフォルトの名無しさん
NGNG食わず嫌いせずとりあえず一番高いものに食いついて、消化できなくて吐き出して、
高い金払って食って吐いて、高い金払って食って吐いて、
食って吐いて、食って吐いて、食って吐いて……と繰り返しあがき続けていたら、
いつの間にかMFCでもSDKでも問題なく使えるようになり、物も食えるようになっていた。
しかし、そこに行き着くまでに消費した書籍代は…… _| ̄|○
0186デフォルトの名無しさん
NGNGいものだ。したがって
>なぜそこをいじればいいのか
>プログラムがどういう流れになっているのか
なんて気にするな。
と考える俺は少数派だと自覚しております。
0187デフォルトの名無しさん
NGNG途中で降りたらベット丸損だぞ
本と同じ重さの札束を狙う大博打ってとこを忘れんな
0188デフォルトの名無しさん
NGNG{
CPen myPen;
myPen.DeleteObject(); ←これいるんですか?
Delete myPen; ←これもいるんですか?
}
CPenってスコープ外れる時に、この辺やってくれないの?
0189デフォルトの名無しさん
NGNGこんなのいれたらコンパイルとおらねぇよ。
0190デフォルトの名無しさん
NGNGmyPen.DeleteObject();
これ、必須ですか?
0191デフォルトの名無しさん
NGNG1.スタック フレーム上にグラフィック オブジェクトを定義します。CreatePen など、それぞれの型固有の作成関数を使って、オブジェクトを初期化します。コンストラクタでオブジェクトを初期化することもできます。
1 段階で作成する方法と、2 段階で作成する方法については以下に説明します。
2.オブジェクトを現在のデバイス コンテキストに選択し、前に選択した古いグラフィック オブジェクトを保存します。
3.現在のグラフィック オブジェクトを使い終わったら、古いグラフィック オブジェクトをデバイス コンテキストに選択し直して、状態を復元します。
4.フレームに割り当てられたグラフィック オブジェクトは、スコープからはずれたときに自動的に削除されます。
これ見て意味わからんかったら再度質問しろ。
0192デフォルトの名無しさん
NGNGその変数がスコープ内で使い切りになっていて、デストラクタによる削除で
間に合う場合は、DeleteObject()が不要。ただしDeleteObject()を書いても
悪くはない。
デストラクタに任せるか、明示するかの違い。あるいはそれぞれその必要が
あるかどうか場合によって選択する。
>Delete myPen;
は?
0193デフォルトの名無しさん
NGNG>>192
ありがとう、謎が解けました。
これで熱帯夜も眠れそうです。
Delete myPenは立ち読みした時に載っていて、
「え?そんなんまで書くんだ・・・」
と記憶していたもんで・・・
0194本田
NGNG>MFCインターナル
>著者名 G. シェパード/S. ウィンゴ=著、玉井 浩=訳
>出版社 アジソン・ウェスレイ・パブリッシャーズ・ジャパン
ttp://www.fukkan.com/vote.php3?no=24811
興味のある方は投票お願いします。
0195デフォルトの名無しさん
NGNGMFCってよりC++の根本的な理解が足りないだけじゃないんですか?
0196デフォルトの名無しさん
NGNGdeleteはnewしたときだけ
0197デフォルトの名無しさん
NGNGCDCとCClientDCのデストラクタの違いについて
C++の根本的な理解で説明してくれ
0198デフォルトの名無しさん
NGNG{
if (m_hDC != NULL)
::DeleteDC(Detach());
}
CClientDC::~CClientDC()
{
ASSERT(m_hDC != NULL);
::ReleaseDC(m_hWnd, Detach());
}
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNGそれがMFCのお話だ
0201デフォルトの名無しさん
NGNGわざわざここに質問するようなことではないのだが。
単なる仕様だろ。
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG>構築時に Windows の GetDC 関数を呼び出し、
>破棄時に ReleaseDC 関数を呼び出します。
0204デフォルトの名無しさん
NGNGヘルプも見ないで質問する人、どう思います?
0205デフォルトの名無しさん
NGNGヘルプを見れない環境ですが、何か?
0206デフォルトの名無しさん
NGNGこれか
http://www.itmedia.co.jp/news/articles/0407/07/news061.html?nc30
0207デフォルトの名無しさん
NGNGヘルプに書いてある事質問禁止
でお送りします
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGC++の根本的な理解が足りない人
0210デフォルトの名無しさん
NGNGC++ と何の関係が?
0211デフォルトの名無しさん
NGNG>>195に聞いてくれ
0212デフォルトの名無しさん
NGNGマジおすすめ
0213デフォルトの名無しさん
NGNGつか、WindowsアプリではVC最強!
0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNG>>213は事実ですが・・・
0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNGはげ同
BCBは使えるが、VC++は使えないなんて香具師は
まず、仕事回してもらえないだろうね
0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNGその時点で仕事放棄してるのと同じだ...orz
0222デフォルトの名無しさん
NGNG少なくても、本人の仕事環境に対する意識はゼロといえるだろう。
ヘルプが見れない環境のくせに、ここで得意になって質問されてもね。
車でガス欠しちゃうくらい恥と思わなきゃ。
0223デフォルトの名無しさん
NGNG最弱〜 orz
0224デフォルトの名無しさん
NGNGまともに答えられないくせに上級者気取りか。
おめでてーな。
0225デフォルトの名無しさん
NGNGMSDNライブラリが見られるはず。
0226デフォルトの名無しさん
NGNGVC++ぐらい1人でインストールしなさいって。
そうすりゃヘルプぐらい見れるから。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG0231レスる
NGNG0232デフォルトの名無しさん
NGNG日本語かどうかじゃなくて、書いてある言葉そのものが読みきれないっていうか。
その辺をうまく要約してくれる神を求めて、ここに書いてることもあるでしょ。
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNGこちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1085915001/
0235233
NGNGよく分からないんですが・・・。
0236デフォルトの名無しさん
NGNGまとははずして無いと思います、
まともな回答者を待ちましょう
0237デフォルトの名無しさん
NGNGところでヘルプは読んだか?ヘルプは?
0238233
NGNG一応読みました。OOPの勉強はしたのですが、いざMFCで実現しようとすると、どのように
したらよいか、ってのが分かりません。例えば、CWinAppっていうのはコントローラなのか、
とか、ドキュメントクラスはなんなのかってことです。ほかには、画面を次々と切り替えて
行くとき、それぞれの画面のクラスを作成するのか?とかよく分かりません。作成すると
したら、それを切り替えるたり、生成したりするのはどのクラスでするべきなのか、とかです。
0239デフォルトの名無しさん
NGNG自分で試行錯誤、いろいろやりながら覚えていく手間を惜しむのなら、
はじめからやめたほうがいいと思います。
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGさぞ悔しかったんだろう
ほっといてやれ
0242デフォルトの名無しさん
NGNG0243233
NGNGいや、ある程度実践的なプログラムの作成はこなしたんですが。いまだにどうすべきか、
ってのが分からずだましだましプログラミングしてる状況です。
あと240ではないです。
0244デフォルトの名無しさん
NGNG>>239みたいな変な奴に気を使う必要はないよ。
0245デフォルトの名無しさん
NGNG実践的なプログラムの作成をこなせてるのなら
今のままでも問題ないのでは?
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGなんて聞いてまわったりしてないよね... orz
0248デフォルトの名無しさん
NGNGまた上級者気取りのレス。いい加減にしろ。
0249本田
NGNG>ヘルプに書いてある事質問禁止
>でお送りします
BCBはMFCが付いていてもヘルプがない、冷たいこと、言わんといて。
0250デフォルトの名無しさん
NGNG2chできる環境ならオンライン版の
MSDNライブラリが見られるはず。
0251中級者気取り
NGNGちょっと規模がでかくなりそうなんで、
描画用(ビュークラス)とデータ処理用(ドキュメントクラス)
に分けてみっか!てな感じ
0252デフォルトの名無しさん
NGNGそういうことじゃないんですが・・・、なんていったらいいんでしょうか?それ、
曖昧なんですよね・・・。その説明じゃ役に立たなかったというか・・・。
■ このスレッドは過去ログ倉庫に格納されています