★初心者にVisual C++を教えるスレ★ Part33
土曜から日曜にかけて1日かかって、スタティックコントロールに文字列出すことに
成功した、ハンドル使わない方法でやっとだ。
そこでだ、ものは相談だ。ハンドル使うSendMessage()とか、SetWindowText()
のやりかた教えろや。
しごいて調べろっていうわけにはいんかだろうしなあああ
>変数penisのデータ型はどうやって調べるんでしょうか
ハンドル使わないSendMessage()とか、SetWindowText()があるのか
>>457 それはないでしょう。
ですから、ハンドルの使いかた教えてくれって言ってる意味ととって
くださってもいいです。すみませんです。
>>457 おおかたリソーススクリプトや(親のハンドル使うけど)SetDlgItemTextでも使ったんだろう。
そのとおりです。これだって本格的には、ハンドルを使うわけでしょ。
それがわからんから・・・↓こうなってるわけでして。
SetDlgItemText(IDC_STATIC1,"testest");
TCHAR szText[] = _T("文字列");
SetWindowText( hWnd, szText);
SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)szText);
あ、忘れていた。つまり、455=458=460です
463 :
455:2009/05/12(火) 00:30:12
>>461 その場合、hWndは、どこで宣言し、どうやって代入してるわけですか?
ああ、そこからスタートか。
HWND hWnd = GetDlgItem( hDlg, IDC_STATIC1);
hDlg はわかるよな。ダイアログプロシージャの第一引数だ。
465 :
455:2009/05/12(火) 01:11:47
>>464 その場合のhDlgは、当然にIDC_STATIC1が貼り付けられたダイアログのハンドル
っていうことですね。その場合、以下の意味がよくわかんですね。
>「ダイアログプロシージャ」(これは、・・・・Dlg.cppって言う意味ですか?)
>「第一引数」(これは意味がわからないです)
(例えば、ワークスペース名が"Rocket"として、例でいくと小生の場合はvs6で、
MFC AppWizard でダイアログモードでワークスペースをを作成したんですが。
RockeDlg.cppが以下になってます。このどこで値が決まってますか?
#include "stdafx.h"
#include "Rocket.h"
#include "RocketDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// ダイアログ データ
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard は仮想関数のオーバーライドを生成します
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV のサポート
//}}AFX_VIRTUAL
・・・・・もっと下ですか?
466 :
455:2009/05/12(火) 01:16:05
それとも、hDlgは、予約語っつーかシステムからの引数(定数)っていうことですか?
ダイアログ内なら無宣言で、どこでも使える定数。
MFCなら先にそう言えよ。
MFCはウィンドウハンドルを意識しないでいいように作られているから、HWND型はあまり使わない。
468 :
455:2009/05/12(火) 01:22:23
>>467 でも、とにかくハンドルを使わないと、別のプロシージャからは、
別イのダイアログに貼り付けられたコントロールは外部参照できない
わけでしょ。↓のどれを使おうが。
SetWindowText( hWnd, szText);
SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)szText);
何をやりたいのかを述べよ。
「別イのダイアログ」なんつうのが今ごろでてくると、何をやりたいのかわからん
470 :
455:2009/05/12(火) 01:27:02
>>467 >ウィンドウハンドルを意識しないでいいように
なら、SetDlgItemText(IDC_STATIC1,"testest");
と同じく、同一ダイアログプロシージャ内なら、SetWindowText()やSendMessage()
も、ハンドル引数(hWnd)は省略していいってことですか?
MFCなら CWnd::SendMessage()、CWnd::SetWindowText() を使う。
両者のパラメータにウィンドウハンドルはない。
CWnd* pStatic = GetDlgItem( IDC_STATIC1);
pStatic->SetWindowText( _T("文字列"));
473 :
455:2009/05/12(火) 01:36:24
>>469 つまり、別のフォームで、RoketDlg.cppで、設定したり計算したデータを、終了前に
hddに保存する場合、別なフォームから参照して保存したり、RoketDlg.cppで計算を
始める前に、RoketDlg.cppのプログラム計算を開始する前に、hddに保存したファイルから
データを読んで別なダイアログでリストアップして、一覧の中から選んでRoketDlg.cppの
各コントロールのテキスト(キャプション)に値を設定する。それを読みながら計算
させる、とかです。
474 :
455:2009/05/12(火) 01:54:36
475 :
455:2009/05/12(火) 01:55:57
vb版は、数日中に軍事板でリリースの予定です。
476 :
455:2009/05/12(火) 02:01:50
日本だって、造る気になったら、ICBMなんか、H2やMVを魔改すればすぐ造れるんだ。
って北の将軍様や工作員に見せて、「だから日本を脅かしたってビタ一文出さない。
日本を恐喝したって金にならない。早く被拉致者を返せ。」って教えるためです。
477 :
455:2009/05/12(火) 02:19:42
478 :
455:2009/05/12(火) 02:35:46
>>471 その場合、CWndは、どこで、値が決まってるんですか?
>>471と
>>472の連携がわからないです。
↓これは記法ではないっていうことですか?
CWnd::SetWindowText()
つまり、上の記述の意味は、実際の記法は、
「Cwnd:」は、「CWnd* pStatic」の意味で、
「:SetWindowText(_T("文字列"));」は「pStatic->SetWindowText( _T("文字列"));」 である
という意味ですか?
479 :
455:2009/05/12(火) 02:41:06
↓これはあくまでも、同一ダイアログ内での話ですよね?
(IDC_STATIC1は、別なフォームにもあるかもしれないわけで)
CWnd* pStatic = GetDlgItem( IDC_STATIC1);
DirectXを使わないでディスプレイの垂直同期?にあわせて描画する方法ってありますか?
一度VC2008++で作成したソリューションファイルは、2005では使えませんか?
家にあるのが2005しかないもので困ってます…
>>455 あなたはクラスを使ったことがありますか?
ソリューションファイルはテキストだから
適当なエディタで開いてバージョンあたり
書き換えれば2005でも開ける
484 :
455:2009/05/12(火) 11:05:05
結局、VC++では、あるプロシージャで使われるオブジェクト(スタティックコントロールにせよ
エディトコントロールにせよ)、そのハンドルの値というのは、その、プロシージャに
行った時(そのプロシージャが実行されたとき)しか取得(代入)できないということですか?
(コンパイル時に、実行ファイルが各「ハンドル」を自動的に管理する変数としてバックグランド
で管理、保有するようにはなってない、と。)
だから、他のプロシージャから、他のプロシージャで定義、生成されたコントロールとかを
外部参照したい場合は、前もって、そのプロシージャに行った(実行された)時点で、
プロシージャ間で共有できる変数(パラメーター用の変数に)代入しておいて
、プロシージャ間でパラメータとして渡せ、と。
結局、ダイアログにせよ、メモリにロード(画面に出)されてなきゃ、その中のコントロールは
参照できっこないわけだから。
画面に出てるとか、とにかくその外部参照される他のプロシージャ部がメモリにロードされてる
うちは、ディスティネーション(アドレス、ポインタ)としての「定数」であって「変数」では
ないのだからパラメータになりうるから、プログラマー自身が渡せと。
485 :
455:2009/05/12(火) 11:07:54
>>482 「クラス」の意味もよくわからないわけで。「クラスとは、変数の次元でのツリー構造の一部」
という概念ですね。自分としては。
>484
結局、VC++では?
そんな意味不明なまとめだったら
日記かブログにでも書いとけ
もしかしてウインドウのハンドルのことを言ってるのなら
apiだからVC++は関係ない。
>>455 そのうちわかるからとりあえず汚くても動くように書いてみな
後で俺ってなんてVB厨だったんだと思うだろうけど仕方ないよ。
489 :
455:2009/05/12(火) 11:41:54
>>486 「まとめ」じゃなくハンドルを意識する場合として出発点の概念(心がまえ)としてですよ。
これだから、・・・
490 :
455:2009/05/12(火) 11:43:34
>>488 いや別にVBなんて、北がミサイル撃ったのでここ一月いじっただけで。
うぜー
492 :
455:2009/05/12(火) 11:51:16
Cで、ずいぶんと長いこと今でもやってる女房(独身時代はある大手建設会社のシステムで
「PLワン」とかやってたって言ってます。)女房から、「そういうソフト、どうしても造りたい
っていうならVB6でつくったほうが楽ですよ。私もVC++はよくわからない。」って
言われて造ったんであって・・・
VB6でつくったほうが楽だよって言われたのになんでVCで作ってんの?
C++をやってればわかるのにCやってたってすぐにはわからないよ。
494 :
455:2009/05/12(火) 11:56:13
>>487 OSファンクションだからっていっても、ファンクションコールの仕方、記法は、
言語別でしょ。MASMとVC++のファンクシションコールの仕方は同じですか?
495 :
455:2009/05/12(火) 11:58:52
>>493 スタックが怖くなってきたから。
あと、SLEEP使うと、途中停止できないから。
そのへんはMFCがラップしてるんだって何度言えばいいんだ
498 :
455:2009/05/12(火) 12:07:52
>>
NET使うとVBでもスタック拡大できるわけ?
499 :
455:2009/05/12(火) 12:09:33
VB.NETでスタック拡大できるなんて初耳だな。
できる
501 :
455:2009/05/12(火) 12:10:17
どうやるの?
502 :
455:2009/05/12(火) 12:13:36
ヘルプ、とかネット検索で、スタック、STACKで、何度やっても、
VBについてSTACKでヒットしたことは一度もないな、
503 :
455:2009/05/12(火) 12:16:47
いま、VBのほうでは、↓つかってるけど、これだってVC++なら記法は違うでしょ。
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Const TOOLTIPS_CLASS = "tooltips_class32"
スタックってなんだよ
>503
意味的にまったく同じで何も違いがない
EditBinで書きかえるかカスタム定数で
507 :
455:2009/05/12(火) 12:30:17
>>505 中身はそうださ。OSが同じなんだから。
だけどプログラミング(言語としての言葉使い)の実践としては違うでしょ?
っていうことです。
意図する中身が同じだって、言語が違えば話かたは違うのと同じことでね。
例えば、日本で「オリーブ」でも、米語じゃ「あらぶ」なわけで。
中身は同じでも米国人に「オリーブ」って言っても通じない。
日本人に「あらぶ」っていうと「オリーブ」じゃなくアラブ(の国)
って言う意味にとられる。(笑
まずは入門書なり読めよw
509 :
455:2009/05/12(火) 12:35:21
何も違わないという認識があれば言語が変ってもすぐに使いこなせる。
511 :
455:2009/05/12(火) 12:38:38
>>508 VC++の入門書、4冊あるけど、どれにもハンドルの変数の代入の仕方、
を系統的には書いてない。ほとんど説明してない。索引にも載ってない。
じゃあVC++の前に生のWindowsプログラミングを入門しろ
513 :
455:2009/05/12(火) 12:47:26
いや、VBでSTACKが拡大できるなら、何も、無理して、こめんどうなVC++でGUIする
必要はない。計算はC(.DLL)でやって、VBに渡せばいいだけで。若干は、DLLから
直接的にVBのLABELのキャプションに書きこむくらいはしなきゃならないだろうけど。
画面いじるのは、VBのほうがぜんぜん楽でしょ。その場合は開発時間はずいぶん短く
なるよ。
ランタイムシステムがどうのこうのって嫌がらなければ・・・、だけど。
どんな画面かしらんがダイアログベースならVBもVCも
たいして変わらんけどな
515 :
455:2009/05/12(火) 12:54:13
そういうことか。WINDOWS3.1時代あたりのMS-VCの本を読んでないと、
ハンドルの理解は難しいってこと?
VS4.0の本はマニュアルまで女房は、廃棄しちまったらしい。
517 :
455:2009/05/12(火) 13:04:05
>>516 どこにハンドルの型宣言、値の代入の仕方(オペランド)、その値の効力の
範囲が説明してあるの?
文法(記法)だけなら「解説書」は不要だよ。MSDNでいいわけだから。
そんなのヘッダーファイル見ればわかるだろ
519 :
455:2009/05/12(火) 13:07:30
たしかに、VC++の本にはハンドルの説明は系統的にはまったく書いてない。
ハンドルの文法は、ウィンドウができたことによるものだから、その基本は
当時の本を読まないと、ダメかもしれん。
女房も当時はUNIXをやってたから、だからVC++は弱いんだわ。
ハンドルの型宣言にこだわる理由がわからん。
MFCはウィンドウハンドルを意識しないと上のほうに書いてあったのに。
521 :
455:2009/05/12(火) 13:11:38
あいつは、学校ではFORTRANで、会社のシステム部になってからは、
PLIだったし、それ以後はUNIXで育ってるからな。
まあUNIXは少ない知識でまわせるからな
523 :
455:2009/05/12(火) 13:15:58
>>520 >ハンドルの型宣言にこだわる理由がわからん。
>MFCはウィンドウハンドルを意識しないと上のほうに書いてあったのに。
何度も言ってるが、値の代入の仕方とか、パラメーターとしての扱いかた
がわかりにくいていうのよ。
「型宣言」といったのは「今の解説書は系統的(網羅的)には説明してない。」
という面で言ってる。
だから何がわからないのかわからないの
525 :
455:2009/05/12(火) 13:20:03
>>520 だって、プログラムは、一字間違っても、コンパイルできないわけでね。
初心者の場合は、文法上の必要な各要素について説明が網羅的な説明でない
場合、省略した要素があれば、省略されたとこは理解できない。
理解できない要素はネックとなって、それ以後は先に進まない。
偉そうに理解できないと言われてもねw
527 :
455:2009/05/12(火) 13:23:30
MFCなら値を代入しなくてもいいし、パラメータにウィンドウハンドルは存在しない。
すべては「オブジェクト」単位で管理する。
Aというダイアログのオブジェクトを DlgA、BというダイアログのオブジェクトをDlgBとすれば、
ダイアログBにある IDC_STATIC1 は、DlgB.GetDlgItem( IDC_STATIC1) でアクセスできる。
テキストを変更したいなら、DlgB.GetDlgItem( IDC_STATIC1)->SetWindowText( _T("テキスト")); だ。
DlgAのメンバ変数としてDlgBのポインタを保持しておけば、DlgAからDlgBにはすぐにアクセスできる。
上記の文中にでてくる用語の意味が不明なら、ここで質問する前にC++について勉強しろ。
C/C++の入門書でファイルハンドルの使い方でも勉強すれば
一般的なハンドルの概念が理解できると思う。
こんなウザいのをよく根気強く相手するなぁ
もう女房はいいからwww
533 :
455:2009/05/12(火) 13:37:46
>>528 だって、
>>471は、MFCなんだろ?
()の中であろうが外であろうが、CWnd::って、c++として記法だろうが、
とにくハンドルみたいなもんじゃないの?
ハンドルとは呼ばないかもしれんが。
1,で、とにかく、Cwndの実数はどこでどうやって取得するのか?
2,またそのCWndの使いかた(値が代入された後のCWnd)は、どう使用
すればいいのか。
つまり
>>471のような記述の仕方なのかどうか?
単に「Cwnd::*****」(
>>471)でいいのか?
ってことだよ。
>>472では「CWnd::*****」ではないわけだから。
ま、そりゃc++の記法だろうけどさ。
>>472はc++でなかったら、どう記述する?
PL/Iだろ
あれ?やっぱりクラスすらわかってないんじゃね?
536 :
455:2009/05/12(火) 13:41:07
>>534 文字として書けばそうらしいな。俺は夫婦の会話用語で言ってただけ。
537 :
455:2009/05/12(火) 13:49:42
>>535 CWndが「クラス」っていうことはわかったよ。だけど
何にせよ、ディスティネーション(例。コントロールの固有アドレスを示すもの。)値
がなきゃ、他のプロシージャからは、目的のコントロールに、exeファイルは到達できない
わけでしょ。
だから、そのハンドル(つまりはオフセット・アドレスポインタ)の値の取得(代入)
の仕方と、使い方を教えろって言ってるんだよ。
だからここで質問する前にC++を勉強しろって言ってるんだよ。
だめだ。いくらなんでもここでC++教えるのは無理だw
540 :
455:2009/05/12(火) 13:58:00
vc++では、IDはワークスペース(プロジェクト)としてはは固有ではないから、
(別なダイアログのコントロールが、同じ”IDC_STATIC1"というID名を持つことはありうるから)
↓これは、やはりスタティックコントロールを持ってる外部プロシージャ(ダイアログ2)から
↓ダイアログ1のIDC_STATIC1を参照したい場合は意味のない記述でしょ。
CWnd* pStatic = GetDlgItem( IDC_STATIC1);
>>472
中途半端な知識で抽象的で意味不明な用語ならべて質問するから
本題からどんどん遠ざかってるような気がする。
そのGetDlgItemはAPIじゃなくてCWndのメソッドのほうのGetDlgItem
543 :
455:2009/05/12(火) 14:04:27
なんだって?
ますますわかんなくなってきた。
ここ無駄な時間をすごさずVB.NETに行ったほうがいいのでは?
開発環境
やりたいこと
これだけ書いて質問すればすぐにまともな回答もらえたかもな
546 :
455:2009/05/12(火) 14:15:10
>MFCは・・・パラメータにウィンドウハンドルは存在しない。
>>528 ()の中でのハンドルの指定はない、ていうことは、うすうすは、わかったような
気がする。うすうすだけど。
では、外部プロシージャから(例えば、ダイアログ2に貼ってあるBUTTONが押されたとき、
ダイアログ1のスタティックコントロールを参照したい場合。
ダイアログ2にもスタティックコントロールは貼ってあって、両方が同じID名の場合。
547 :
455:2009/05/12(火) 14:17:25
その答を書くにはC++のクラスの基本から書かなくちゃいけない。だから答えない。
「C++を勉強しろ」というのが回答。
549 :
455:2009/05/12(火) 14:22:32
ハンドルはC++関係ないでしょ
外部プロシージャ
ダイアログ1
ダイアログ2
唐突にこんなものが出てきたって誰も関係が理解できない
外人
かばん1
かばん2
これで関係理解できるか?
551 :
455:2009/05/12(火) 14:25:52
↓俺には「外部参照の仕方はわかりません。単一ダイアログの遊びのソフトしか造ったことありませんが、
↓一流プログラマーのように威張りたいです。」ってしか聞こえない。
548 :デフォルトの名無しさん:2009/05/12(火) 14:20:06
その答を書くにはC++のクラスの基本から書かなくちゃいけない。だから答えない。
「C++を勉強しろ」というのが回答。
じゃ、何を言ってもムダだな
553 :
455:2009/05/12(火) 14:36:17
「ダイアログ」でなく「ダイアログボックス」って書けってか?
「プロシージャ」という言葉は許すけど、「外部」がつくとわからん、っていうのは
「++」以前、「C」言語の基本がわかってないというか、それ以前、プログラムの基本
がわかってないとしか言いようがないけどな。
「スタックって何?」とかって聞いてる人が先生ぶってるのと同じでさ。
>hDlg はわかるよな。ダイアログプロシージャの第一引数だ。
>>464 >504 :デフォルトの名無しさん:2009/05/12(火) 12:16:49
>スタックってなんだよ
554 :
455:2009/05/12(火) 14:38:00
「スタック」「外部参照」の言葉の意味が理解できないのが「C(++)の先生」やってるわけ?
GetDlgItem( IDC_STATIC1) は this->GetDlgItem( IDC_STATIC1) と同じ
VBでもなんでも、てっとり早くスタックサイズ大きくしたいなら
editbin で /STACKオプションつければいい
557 :
455:2009/05/12(火) 14:44:46
>>546 ダイアログ1にスタティックコントロールを公開するメソッドを作る
ダイアログ2からはダイアログ1->そのメソッド()
という形でアクセスする
559 :
455:2009/05/12(火) 14:46:52
↓これは間違いだと思うよ。最近のVB2005とか2008わどうかわからないけどさ。
>VBでもなんでも、てっとり早くスタックサイズ大きくしたいなら
>editbin で /STACKオプションつければいい
560 :
455:2009/05/12(火) 14:48:58
VCは、当初からコンパイル時のオプションとして当初からあったけどね。
dumpbin /headersしてみりゃわかる
間違いってやってみたのか?
editbin は使ったことあるのか?
↓これを間違いだと言われても困るわな
564 :
563:2009/05/12(火) 15:02:38
AからBにアクセスしたい場合に外部じゃ全然説明になってないだろ
AとBが全然関係ないんじゃアクセスしようがない。
566 :
455:2009/05/12(火) 15:03:31
++とハンドルの定義やハンドルの動作は関係ないでしょ。
++は記法だけの問題であって。
VBは、やっぱSTACK拡大できないと思うよ。2008でも、STACKをヘルプのキーワードに入れても
ヒットしない、あるなら、こんな基本的で重要なこと抜くわけないもの。
試しにヘルプでやっても、スタックフレームっていうことは出てくるが、メモリ朗域の拡大ではない¥
スタック怖かったから、2008に期待をかけてダウンロードして調べてみたが、
↓のVB2008のヘルプで、"STACK"でヒットしたのは「実行中」の「検査」の話でね。
↓そもそも実行中にスタックメモリ領域(コード領域も意味する)の大きさ変えれるわけないんだから(笑
スタック フレームの検査のサンプル
このサンプルでは、任意のポイントでの呼び出し履歴の情報を、実行中のプログラムのコード内から取得する方法を説明します。呼び出し履歴を使用すると、現在のプロシージャに至るまでにアプリケーションが実行したプロシージャの順番を確認できます。
567 :
455:2009/05/12(火) 15:07:45
>>563 Cは「当初
>>560」からあったけど、マイクロソフトのVBはないって言ってるんだよ。
そのMSDNに書いてあるのは、CとかMASMの話だよ。
だから外部という認識だからアクセスできない
馬鹿だよな
こいつ人の言ったこと何も聞いてないのな。
スタックサイズはリンク時に決定される。
コンパイルは関係ない。
リンク後でもEXEのヘッダー書きかえればサイズは変更できる。
そのためのツールがeditbin
あれあれあれだよ
あれってどれだよ
572 :
455:2009/05/12(火) 15:13:14
↓「スタック」も理解できないおまえらは他人にいつも何を言ってるの?
569 :デフォルトの名無しさん:2009/05/12(火) 15:09:55
こいつ人の言ったこと何も聞いてないのな。
568 :デフォルトの名無しさん:2009/05/12(火) 15:09:06
だから外部という認識だからアクセスできない
馬鹿だよな
>571
これじゃないのがあれだろ
日本語も知らないのか?
575 :
455:2009/05/12(火) 15:16:11
↓とにかく、VBではできない
570 :デフォルトの名無しさん:2009/05/12(火) 15:11:58
スタックサイズはリンク時に決定される。
コンパイルは関係ない。
リンク後でもEXEのヘッダー書きかえればサイズは変更できる。
そのためのツールがeditbin
で、結局この人はなにをやりたいの?
577 :
455:2009/05/12(火) 15:23:20
↓
>>568と
>>569は、異なるダイアログボックス間で、別のダイログボックスにある、同じ名前のIDC_STATIC1を
↓参照できるって言ってるのと同じこと。C++とかなんとかの問題でなくプログラムの基本がわかってないと
↓思うけどね。
GetDlgItem( IDC_STATIC1)
578 :
455:2009/05/12(火) 15:24:53
俺は、同じこと何度も答えてるよ。
>>455の最初の質問を読んでみた。
一番の近道はMFCを使わないで
CでWindowsプログラミングをすることだと思った。
多少記述は多くなるけど問題ないと思う。
580 :
455:2009/05/12(火) 15:31:22
↓これはあくまでも、実行中のダイアログプロシージャ内で通用する話であって、
↓別のダイアログプロシージャ(外部プロシージャ、つまり別のダイアログボックス)
↓のコントロ−ルを参照してることではないだろ。この言ってる意味がわからないかねえええ
GetDlgItem( IDC_STATIC1)
別のダイログだったらコントロールのIDが同じだって識別可能
使いまわすときにいちいち変えてたら面倒くさくてしょうがない。
別のダイアログだろうがやることが同じなら
同じコードで実現できる。
というか同じでやった方がいい。
>>580 リソースファイルをテキストエディタで開いてみな
584 :
455:2009/05/12(火) 15:42:27
いくつも同じ名前(ID)のコントロールがある場合、実行ファイルはどうやって特定認識するの。
(通常はデフォルトの動作。つまり、カンレント(実行中)のプロシージャで動作するわけでしょ。)
(じゃ別のダイログプロシージャ(別のダイアログボックス)につくられるコントロ−ルには、
どうやって参照するの?って聞いてるのよ。この質問がわからないのかねえええ)
↓はあくまでも実行中のダイアログプロシージャ(ダイアログボックス)が自分に貼られてる
↓コントロールのアドレスに関する値を渡すという関数でしょ。
GetDlgItem( IDC_STATIC1)
586 :
455:2009/05/12(火) 15:45:27
>>584 あー
もう
考え方がCすぎるんだよ
ダイアログにはクラスがひもづくでしょ
ダイアログを表示するには
そのクラスのインスタンスを作って表示するでしょ
ってことはそのインスタンス内のIDC_STATIC1は一つでしょ
だからダイアログのインスタンス->GetDlgItem()になるの!
588 :
455:2009/05/12(火) 15:54:52
528?
そうか。なんだ。すまん。
>>528 んじゃ、DlgBの値は、どこで、どうやって取得するわけ?
実際の記述は、取得したときにDlgBという変数を使ったら、
そのまま
DlgB.GetDlgItem(IDC_STATIC1)→でいいわけ?
ダイアログB(DlgB)の実体を生成したときに、ダイアログA(DlgA)のメンバ変数(自分で定義)に値をぶちこむ。
やっぱりクラスという用語だけしってて中身を知らない感が
ひしひしと伝わってくる。
Cだけ知ってれば他の言語は全部わかったも同然っていう
感じがする。
591 :
455:2009/05/12(火) 16:04:53
>>589 だから、その手法は、
>>484で聞いてたんだよな。俺。
DlgB.を先走って「ハンドル」って言ったのは間違いだったかもしれんが。
でもハンドルみたいなもんだろ。とにかく「固有」(結局はアドレスだから)の数値なんだから。
ハンドルで表わされる物がオブジェクト指向でのオブジェクトとなるのは
別に難しい概念じゃないと思うのだが
それに何で関数のヘルプ読まないの?
芋蔓式にそれに必要な物とやり方がわかると思うんだけど
TBSの記者みたいなやつだな
594 :
455:2009/05/12(火) 16:14:17
>>592 ヘルプに書いてある?
「コントロールのアドレス(又はポインタ)はダイアログが実行中しか取得できません。」
とかって、どっか書いある?
595 :
455:2009/05/12(火) 16:16:41
訂正
・・・ダイアログが実行中しか取得できません。」
・・・その親ダイアログが実行中(フォーカス中)しか取得できません。」
おまえはゆとりかw
597 :
594:2009/05/12(火) 16:21:45
>>592 >>594は取り消し
根本的に質問が間違った。質問の本意は、
「ヘルプには、他のダイアログ(外部プロシージャ)にあるコントロールを
直接参照はできません。」とかって書いてある?
だった。
」
>>597 だからね。そこはC++を勉強してたらそういう疑問は出ないの。
それが当たり前なの。
他のインスタンスの変数を直接参照できないように設計するのは
オブジェクト指向の初歩の初歩なの。
599 :
594:2009/05/12(火) 16:30:08
>ダイアログB(DlgB)の実体を生成したときに、ダイアログA(DlgA)のメンバ変数(自分で定義)に値をぶちこむ。
とにかく、だから、俺は、そのことを
>>484で問い正していたんだよ。
そうしたら日記に書けとかなんとかって・・・・
ウィンドウハンドルだろうがオブジェクトのインスタンスだろうが、プログラムを実行中にしか取得できないわけだが、
ひょっとしてコード内に固定値でアドレスを書こうとしているのか?
「実行中」の用語が間違ったな。
「生成中」、または「フーカスになったとき」だな。
vbだと共有変数にいちいち保存しなくても、プロシージャ(ダイアログやコントロール)の
名前だけで、その「擬似ハンドル」みたいなものは自動的に値は持ってるからね。
例えば、
Form2.Label1
って書けば別に、Form2のほうで共有変数(Public)に代入なんかしてなくてもいいわけで。
別に共有変数でなくてもいいんだろ?
当然にパラメータで渡せばいいんだろ?
455専用スレかよw
他の人が質問できない雰囲気になるぞ
すまん
なんだ結局質問の内容は
VBのForm2.Label1をどうやったらいい?
たったこれだけか