★初心者にVisual C++を教えるスレ★ Part33

このエントリーをはてなブックマークに追加
455デフォルトの名無しさん
土曜から日曜にかけて1日かかって、スタティックコントロールに文字列出すことに
成功した、ハンドル使わない方法でやっとだ。
そこでだ、ものは相談だ。ハンドル使うSendMessage()とか、SetWindowText()
のやりかた教えろや。
456デフォルトの名無しさん:2009/05/12(火) 00:14:48
しごいて調べろっていうわけにはいんかだろうしなあああ

>変数penisのデータ型はどうやって調べるんでしょうか
457デフォルトの名無しさん:2009/05/12(火) 00:16:28
ハンドル使わないSendMessage()とか、SetWindowText()があるのか
458デフォルトの名無しさん:2009/05/12(火) 00:19:22
>>457
それはないでしょう。
ですから、ハンドルの使いかた教えてくれって言ってる意味ととって
くださってもいいです。すみませんです。
459デフォルトの名無しさん:2009/05/12(火) 00:22:46
>>457
おおかたリソーススクリプトや(親のハンドル使うけど)SetDlgItemTextでも使ったんだろう。
460デフォルトの名無しさん:2009/05/12(火) 00:24:28
そのとおりです。これだって本格的には、ハンドルを使うわけでしょ。
それがわからんから・・・↓こうなってるわけでして。

SetDlgItemText(IDC_STATIC1,"testest");
461デフォルトの名無しさん:2009/05/12(火) 00:25:27
TCHAR szText[] = _T("文字列");

SetWindowText( hWnd, szText);
SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)szText);
462デフォルトの名無しさん:2009/05/12(火) 00:26:54
あ、忘れていた。つまり、455=458=460です
463455:2009/05/12(火) 00:30:12
>>461
その場合、hWndは、どこで宣言し、どうやって代入してるわけですか?
464デフォルトの名無しさん:2009/05/12(火) 00:51:42
ああ、そこからスタートか。
HWND hWnd = GetDlgItem( hDlg, IDC_STATIC1);

hDlg はわかるよな。ダイアログプロシージャの第一引数だ。
465455: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
・・・・・もっと下ですか?
466455:2009/05/12(火) 01:16:05
それとも、hDlgは、予約語っつーかシステムからの引数(定数)っていうことですか?
ダイアログ内なら無宣言で、どこでも使える定数。
467デフォルトの名無しさん:2009/05/12(火) 01:17:03
MFCなら先にそう言えよ。

MFCはウィンドウハンドルを意識しないでいいように作られているから、HWND型はあまり使わない。
468455:2009/05/12(火) 01:22:23
>>467
でも、とにかくハンドルを使わないと、別のプロシージャからは、
別イのダイアログに貼り付けられたコントロールは外部参照できない
わけでしょ。↓のどれを使おうが。

SetWindowText( hWnd, szText);
SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)szText);
469デフォルトの名無しさん:2009/05/12(火) 01:25:17
何をやりたいのかを述べよ。
「別イのダイアログ」なんつうのが今ごろでてくると、何をやりたいのかわからん
470455:2009/05/12(火) 01:27:02
>>467
>ウィンドウハンドルを意識しないでいいように

なら、SetDlgItemText(IDC_STATIC1,"testest");

と同じく、同一ダイアログプロシージャ内なら、SetWindowText()やSendMessage()
も、ハンドル引数(hWnd)は省略していいってことですか?

471デフォルトの名無しさん:2009/05/12(火) 01:31:15
MFCなら CWnd::SendMessage()、CWnd::SetWindowText() を使う。
両者のパラメータにウィンドウハンドルはない。
472デフォルトの名無しさん:2009/05/12(火) 01:35:24
CWnd* pStatic = GetDlgItem( IDC_STATIC1);
pStatic->SetWindowText( _T("文字列"));
473455:2009/05/12(火) 01:36:24
>>469
つまり、別のフォームで、RoketDlg.cppで、設定したり計算したデータを、終了前に
hddに保存する場合、別なフォームから参照して保存したり、RoketDlg.cppで計算を
始める前に、RoketDlg.cppのプログラム計算を開始する前に、hddに保存したファイルから
データを読んで別なダイアログでリストアップして、一覧の中から選んでRoketDlg.cppの
各コントロールのテキスト(キャプション)に値を設定する。それを読みながら計算
させる、とかです。
474455:2009/05/12(火) 01:54:36
>>469
つまり↓を、vcに移植したいわけです。
MV魔改.bmp
http://freedeai.com/up/index.html
475455:2009/05/12(火) 01:55:57
vb版は、数日中に軍事板でリリースの予定です。
476455:2009/05/12(火) 02:01:50
日本だって、造る気になったら、ICBMなんか、H2やMVを魔改すればすぐ造れるんだ。
って北の将軍様や工作員に見せて、「だから日本を脅かしたってビタ一文出さない。
日本を恐喝したって金にならない。早く被拉致者を返せ。」って教えるためです。
477455:2009/05/12(火) 02:19:42
>>471
>>472
ありがとうございます。
478455:2009/05/12(火) 02:35:46
>>471
その場合、CWndは、どこで、値が決まってるんですか?
>>471>>472の連携がわからないです。

↓これは記法ではないっていうことですか?
CWnd::SetWindowText()

つまり、上の記述の意味は、実際の記法は、

「Cwnd:」は、「CWnd* pStatic」の意味で、

「:SetWindowText(_T("文字列"));」は「pStatic->SetWindowText( _T("文字列"));」 である

という意味ですか?





479455:2009/05/12(火) 02:41:06
↓これはあくまでも、同一ダイアログ内での話ですよね?
(IDC_STATIC1は、別なフォームにもあるかもしれないわけで)


CWnd* pStatic = GetDlgItem( IDC_STATIC1);
480デフォルトの名無しさん:2009/05/12(火) 07:18:51
DirectXを使わないでディスプレイの垂直同期?にあわせて描画する方法ってありますか?
481デフォルトの名無しさん:2009/05/12(火) 08:39:40
一度VC2008++で作成したソリューションファイルは、2005では使えませんか?
家にあるのが2005しかないもので困ってます…
482デフォルトの名無しさん:2009/05/12(火) 08:55:59
>>455
あなたはクラスを使ったことがありますか?
483デフォルトの名無しさん:2009/05/12(火) 09:49:30
ソリューションファイルはテキストだから
適当なエディタで開いてバージョンあたり
書き換えれば2005でも開ける
484455:2009/05/12(火) 11:05:05
結局、VC++では、あるプロシージャで使われるオブジェクト(スタティックコントロールにせよ
エディトコントロールにせよ)、そのハンドルの値というのは、その、プロシージャに
行った時(そのプロシージャが実行されたとき)しか取得(代入)できないということですか?
(コンパイル時に、実行ファイルが各「ハンドル」を自動的に管理する変数としてバックグランド
で管理、保有するようにはなってない、と。)

だから、他のプロシージャから、他のプロシージャで定義、生成されたコントロールとかを
外部参照したい場合は、前もって、そのプロシージャに行った(実行された)時点で、
プロシージャ間で共有できる変数(パラメーター用の変数に)代入しておいて
、プロシージャ間でパラメータとして渡せ、と。
結局、ダイアログにせよ、メモリにロード(画面に出)されてなきゃ、その中のコントロールは
参照できっこないわけだから。
画面に出てるとか、とにかくその外部参照される他のプロシージャ部がメモリにロードされてる
うちは、ディスティネーション(アドレス、ポインタ)としての「定数」であって「変数」では
ないのだからパラメータになりうるから、プログラマー自身が渡せと。

485455:2009/05/12(火) 11:07:54
>>482
「クラス」の意味もよくわからないわけで。「クラスとは、変数の次元でのツリー構造の一部」
という概念ですね。自分としては。
486デフォルトの名無しさん:2009/05/12(火) 11:18:37
>484
結局、VC++では?
そんな意味不明なまとめだったら
日記かブログにでも書いとけ
487デフォルトの名無しさん:2009/05/12(火) 11:24:47
もしかしてウインドウのハンドルのことを言ってるのなら
apiだからVC++は関係ない。
488デフォルトの名無しさん:2009/05/12(火) 11:27:09
>>455
そのうちわかるからとりあえず汚くても動くように書いてみな
後で俺ってなんてVB厨だったんだと思うだろうけど仕方ないよ。
489455:2009/05/12(火) 11:41:54
>>486
「まとめ」じゃなくハンドルを意識する場合として出発点の概念(心がまえ)としてですよ。

これだから、・・・
490455:2009/05/12(火) 11:43:34
>>488
いや別にVBなんて、北がミサイル撃ったのでここ一月いじっただけで。
491デフォルトの名無しさん:2009/05/12(火) 11:47:09
うぜー
492455:2009/05/12(火) 11:51:16
Cで、ずいぶんと長いこと今でもやってる女房(独身時代はある大手建設会社のシステムで
「PLワン」とかやってたって言ってます。)女房から、「そういうソフト、どうしても造りたい
っていうならVB6でつくったほうが楽ですよ。私もVC++はよくわからない。」って
言われて造ったんであって・・・
493デフォルトの名無しさん:2009/05/12(火) 11:54:57
VB6でつくったほうが楽だよって言われたのになんでVCで作ってんの?
C++をやってればわかるのにCやってたってすぐにはわからないよ。
494455:2009/05/12(火) 11:56:13
>>487
OSファンクションだからっていっても、ファンクションコールの仕方、記法は、
言語別でしょ。MASMとVC++のファンクシションコールの仕方は同じですか?
495455:2009/05/12(火) 11:58:52
>>493
スタックが怖くなってきたから。
あと、SLEEP使うと、途中停止できないから。
496デフォルトの名無しさん:2009/05/12(火) 11:59:30
そのへんはMFCがラップしてるんだって何度言えばいいんだ
497デフォルトの名無しさん:2009/05/12(火) 12:00:37
>>495
だったら.net使えばー
498455:2009/05/12(火) 12:07:52
>>
NET使うとVBでもスタック拡大できるわけ?
499455:2009/05/12(火) 12:09:33
VB.NETでスタック拡大できるなんて初耳だな。
500デフォルトの名無しさん:2009/05/12(火) 12:09:59
できる
501455:2009/05/12(火) 12:10:17
どうやるの?
502455:2009/05/12(火) 12:13:36
ヘルプ、とかネット検索で、スタック、STACKで、何度やっても、
VBについてSTACKでヒットしたことは一度もないな、
503455:2009/05/12(火) 12:16:47
いま、VBのほうでは、↓つかってるけど、これだってVC++なら記法は違うでしょ。

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Const TOOLTIPS_CLASS = "tooltips_class32"
504デフォルトの名無しさん:2009/05/12(火) 12:16:49
スタックってなんだよ
505デフォルトの名無しさん:2009/05/12(火) 12:20:07
>503
意味的にまったく同じで何も違いがない
506デフォルトの名無しさん:2009/05/12(火) 12:22:34
EditBinで書きかえるかカスタム定数で
507455:2009/05/12(火) 12:30:17
>>505
中身はそうださ。OSが同じなんだから。
だけどプログラミング(言語としての言葉使い)の実践としては違うでしょ?
っていうことです。
意図する中身が同じだって、言語が違えば話かたは違うのと同じことでね。
例えば、日本で「オリーブ」でも、米語じゃ「あらぶ」なわけで。

中身は同じでも米国人に「オリーブ」って言っても通じない。
日本人に「あらぶ」っていうと「オリーブ」じゃなくアラブ(の国)
って言う意味にとられる。(笑
508デフォルトの名無しさん:2009/05/12(火) 12:33:55
まずは入門書なり読めよw
509455:2009/05/12(火) 12:35:21
>>506
それ、VB.NETの何版から?
510デフォルトの名無しさん:2009/05/12(火) 12:36:57
何も違わないという認識があれば言語が変ってもすぐに使いこなせる。
511455:2009/05/12(火) 12:38:38
>>508
VC++の入門書、4冊あるけど、どれにもハンドルの変数の代入の仕方、
を系統的には書いてない。ほとんど説明してない。索引にも載ってない。
512デフォルトの名無しさん:2009/05/12(火) 12:41:33
じゃあVC++の前に生のWindowsプログラミングを入門しろ
513455:2009/05/12(火) 12:47:26
いや、VBでSTACKが拡大できるなら、何も、無理して、こめんどうなVC++でGUIする
必要はない。計算はC(.DLL)でやって、VBに渡せばいいだけで。若干は、DLLから
直接的にVBのLABELのキャプションに書きこむくらいはしなきゃならないだろうけど。
画面いじるのは、VBのほうがぜんぜん楽でしょ。その場合は開発時間はずいぶん短く
なるよ。
ランタイムシステムがどうのこうのって嫌がらなければ・・・、だけど。
514デフォルトの名無しさん:2009/05/12(火) 12:50:00
どんな画面かしらんがダイアログベースならVBもVCも
たいして変わらんけどな
515455:2009/05/12(火) 12:54:13
そういうことか。WINDOWS3.1時代あたりのMS-VCの本を読んでないと、
ハンドルの理解は難しいってこと?
VS4.0の本はマニュアルまで女房は、廃棄しちまったらしい。
516デフォルトの名無しさん:2009/05/12(火) 12:58:31
まあ
http://www7.plala.or.jp/keny01/windows/
とかさらっと読めばわかるっしょ
でC++もわかってればMFCもわかる。
だから>>455が何がわからないのか一般人にはわからない。
517455:2009/05/12(火) 13:04:05
>>516
どこにハンドルの型宣言、値の代入の仕方(オペランド)、その値の効力の
範囲が説明してあるの?
文法(記法)だけなら「解説書」は不要だよ。MSDNでいいわけだから。
518デフォルトの名無しさん:2009/05/12(火) 13:06:12
そんなのヘッダーファイル見ればわかるだろ
519455:2009/05/12(火) 13:07:30
たしかに、VC++の本にはハンドルの説明は系統的にはまったく書いてない。
ハンドルの文法は、ウィンドウができたことによるものだから、その基本は
当時の本を読まないと、ダメかもしれん。
女房も当時はUNIXをやってたから、だからVC++は弱いんだわ。
520デフォルトの名無しさん:2009/05/12(火) 13:07:54
ハンドルの型宣言にこだわる理由がわからん。
MFCはウィンドウハンドルを意識しないと上のほうに書いてあったのに。
521455:2009/05/12(火) 13:11:38
あいつは、学校ではFORTRANで、会社のシステム部になってからは、
PLIだったし、それ以後はUNIXで育ってるからな。
522デフォルトの名無しさん:2009/05/12(火) 13:13:40
まあUNIXは少ない知識でまわせるからな
523455:2009/05/12(火) 13:15:58
>>520
>ハンドルの型宣言にこだわる理由がわからん。
>MFCはウィンドウハンドルを意識しないと上のほうに書いてあったのに。

何度も言ってるが、値の代入の仕方とか、パラメーターとしての扱いかた
がわかりにくいていうのよ。
「型宣言」といったのは「今の解説書は系統的(網羅的)には説明してない。」
という面で言ってる。
524デフォルトの名無しさん:2009/05/12(火) 13:18:47
だから何がわからないのかわからないの
525455:2009/05/12(火) 13:20:03
>>520
だって、プログラムは、一字間違っても、コンパイルできないわけでね。
初心者の場合は、文法上の必要な各要素について説明が網羅的な説明でない
場合、省略した要素があれば、省略されたとこは理解できない。
理解できない要素はネックとなって、それ以後は先に進まない。
526デフォルトの名無しさん:2009/05/12(火) 13:23:05
偉そうに理解できないと言われてもねw
527455:2009/05/12(火) 13:23:30
>>524
だからまず、>>471と、>>472の関係。
それだけではないが、外はまずこれがわかってから
528デフォルトの名無しさん:2009/05/12(火) 13:23:56
MFCなら値を代入しなくてもいいし、パラメータにウィンドウハンドルは存在しない。
すべては「オブジェクト」単位で管理する。

Aというダイアログのオブジェクトを DlgA、BというダイアログのオブジェクトをDlgBとすれば、
ダイアログBにある IDC_STATIC1 は、DlgB.GetDlgItem( IDC_STATIC1) でアクセスできる。
テキストを変更したいなら、DlgB.GetDlgItem( IDC_STATIC1)->SetWindowText( _T("テキスト")); だ。
DlgAのメンバ変数としてDlgBのポインタを保持しておけば、DlgAからDlgBにはすぐにアクセスできる。

上記の文中にでてくる用語の意味が不明なら、ここで質問する前にC++について勉強しろ。
529デフォルトの名無しさん:2009/05/12(火) 13:24:20
C/C++の入門書でファイルハンドルの使い方でも勉強すれば
一般的なハンドルの概念が理解できると思う。
530デフォルトの名無しさん:2009/05/12(火) 13:28:10
こんなウザいのをよく根気強く相手するなぁ
531デフォルトの名無しさん:2009/05/12(火) 13:34:25
もう女房はいいからwww
532デフォルトの名無しさん:2009/05/12(火) 13:37:10
>>530
暇なんだよね。不景気でw
533455:2009/05/12(火) 13:37:46
>>528
だって、>>471は、MFCなんだろ?
()の中であろうが外であろうが、CWnd::って、c++として記法だろうが、
とにくハンドルみたいなもんじゃないの?
ハンドルとは呼ばないかもしれんが。

1,で、とにかく、Cwndの実数はどこでどうやって取得するのか?
2,またそのCWndの使いかた(値が代入された後のCWnd)は、どう使用
すればいいのか。
つまり>>471のような記述の仕方なのかどうか?
単に「Cwnd::*****」(>>471)でいいのか?
ってことだよ。>>472では「CWnd::*****」ではないわけだから。
ま、そりゃc++の記法だろうけどさ。
>>472はc++でなかったら、どう記述する?
534デフォルトの名無しさん:2009/05/12(火) 13:38:40
PL/Iだろ
535デフォルトの名無しさん:2009/05/12(火) 13:39:57
あれ?やっぱりクラスすらわかってないんじゃね?
536455:2009/05/12(火) 13:41:07
>>534
文字として書けばそうらしいな。俺は夫婦の会話用語で言ってただけ。
537455:2009/05/12(火) 13:49:42
>>535
CWndが「クラス」っていうことはわかったよ。だけど
何にせよ、ディスティネーション(例。コントロールの固有アドレスを示すもの。)値
がなきゃ、他のプロシージャからは、目的のコントロールに、exeファイルは到達できない
わけでしょ。
だから、そのハンドル(つまりはオフセット・アドレスポインタ)の値の取得(代入)
の仕方と、使い方を教えろって言ってるんだよ。
538デフォルトの名無しさん:2009/05/12(火) 13:52:44
だからここで質問する前にC++を勉強しろって言ってるんだよ。
539デフォルトの名無しさん:2009/05/12(火) 13:54:42
だめだ。いくらなんでもここでC++教えるのは無理だw
540455:2009/05/12(火) 13:58:00
vc++では、IDはワークスペース(プロジェクト)としてはは固有ではないから、
(別なダイアログのコントロールが、同じ”IDC_STATIC1"というID名を持つことはありうるから)
↓これは、やはりスタティックコントロールを持ってる外部プロシージャ(ダイアログ2)から
↓ダイアログ1のIDC_STATIC1を参照したい場合は意味のない記述でしょ。

CWnd* pStatic = GetDlgItem( IDC_STATIC1); >>472
541デフォルトの名無しさん:2009/05/12(火) 14:00:16
中途半端な知識で抽象的で意味不明な用語ならべて質問するから
本題からどんどん遠ざかってるような気がする。
542デフォルトの名無しさん:2009/05/12(火) 14:02:47
そのGetDlgItemはAPIじゃなくてCWndのメソッドのほうのGetDlgItem
543455:2009/05/12(火) 14:04:27
なんだって?
ますますわかんなくなってきた。
544デフォルトの名無しさん:2009/05/12(火) 14:11:37
ここ無駄な時間をすごさずVB.NETに行ったほうがいいのでは?
545デフォルトの名無しさん:2009/05/12(火) 14:14:55
開発環境
やりたいこと

これだけ書いて質問すればすぐにまともな回答もらえたかもな
546455:2009/05/12(火) 14:15:10
>MFCは・・・パラメータにウィンドウハンドルは存在しない。 >>528
()の中でのハンドルの指定はない、ていうことは、うすうすは、わかったような
気がする。うすうすだけど。
では、外部プロシージャから(例えば、ダイアログ2に貼ってあるBUTTONが押されたとき、
ダイアログ1のスタティックコントロールを参照したい場合。
ダイアログ2にもスタティックコントロールは貼ってあって、両方が同じID名の場合。
547455:2009/05/12(火) 14:17:25
結局、>>478>>479の質問には誰も答えてないんだよな。
548デフォルトの名無しさん:2009/05/12(火) 14:20:06
その答を書くにはC++のクラスの基本から書かなくちゃいけない。だから答えない。
「C++を勉強しろ」というのが回答。
549455:2009/05/12(火) 14:22:32
ハンドルはC++関係ないでしょ
550デフォルトの名無しさん:2009/05/12(火) 14:23:15
外部プロシージャ
ダイアログ1
ダイアログ2

唐突にこんなものが出てきたって誰も関係が理解できない

外人
かばん1
かばん2

これで関係理解できるか?
551455:2009/05/12(火) 14:25:52
↓俺には「外部参照の仕方はわかりません。単一ダイアログの遊びのソフトしか造ったことありませんが、
↓一流プログラマーのように威張りたいです。」ってしか聞こえない。

548 :デフォルトの名無しさん:2009/05/12(火) 14:20:06
その答を書くにはC++のクラスの基本から書かなくちゃいけない。だから答えない。
「C++を勉強しろ」というのが回答。
552デフォルトの名無しさん:2009/05/12(火) 14:27:22
じゃ、何を言ってもムダだな
553455:2009/05/12(火) 14:36:17
「ダイアログ」でなく「ダイアログボックス」って書けってか?

「プロシージャ」という言葉は許すけど、「外部」がつくとわからん、っていうのは
「++」以前、「C」言語の基本がわかってないというか、それ以前、プログラムの基本
がわかってないとしか言いようがないけどな。
「スタックって何?」とかって聞いてる人が先生ぶってるのと同じでさ。

>hDlg はわかるよな。ダイアログプロシージャの第一引数だ。>>464

>504 :デフォルトの名無しさん:2009/05/12(火) 12:16:49
>スタックってなんだよ
554455:2009/05/12(火) 14:38:00
「スタック」「外部参照」の言葉の意味が理解できないのが「C(++)の先生」やってるわけ?
555デフォルトの名無しさん:2009/05/12(火) 14:39:44
GetDlgItem( IDC_STATIC1) は this->GetDlgItem( IDC_STATIC1) と同じ
556デフォルトの名無しさん:2009/05/12(火) 14:41:28
VBでもなんでも、てっとり早くスタックサイズ大きくしたいなら
editbin で /STACKオプションつければいい
557455:2009/05/12(火) 14:44:46
>>555
さんくす
558デフォルトの名無しさん:2009/05/12(火) 14:46:02
>>546
ダイアログ1にスタティックコントロールを公開するメソッドを作る
ダイアログ2からはダイアログ1->そのメソッド()

という形でアクセスする
559455:2009/05/12(火) 14:46:52
↓これは間違いだと思うよ。最近のVB2005とか2008わどうかわからないけどさ。

>VBでもなんでも、てっとり早くスタックサイズ大きくしたいなら
>editbin で /STACKオプションつければいい
560455:2009/05/12(火) 14:48:58
VCは、当初からコンパイル時のオプションとして当初からあったけどね。
561デフォルトの名無しさん:2009/05/12(火) 14:58:06
dumpbin /headersしてみりゃわかる
562デフォルトの名無しさん:2009/05/12(火) 14:58:57
間違いってやってみたのか?
editbin は使ったことあるのか?
563デフォルトの名無しさん:2009/05/12(火) 15:01:41
↓これを間違いだと言われても困るわな
564563:2009/05/12(火) 15:02:38
すまそ、抜けた
http://msdn.microsoft.com/ja-jp/library/35yc2tc3(VS.80).aspx
565デフォルトの名無しさん:2009/05/12(火) 15:02:50
AからBにアクセスしたい場合に外部じゃ全然説明になってないだろ
AとBが全然関係ないんじゃアクセスしようがない。
566455:2009/05/12(火) 15:03:31
++とハンドルの定義やハンドルの動作は関係ないでしょ。
++は記法だけの問題であって。

VBは、やっぱSTACK拡大できないと思うよ。2008でも、STACKをヘルプのキーワードに入れても
ヒットしない、あるなら、こんな基本的で重要なこと抜くわけないもの。
試しにヘルプでやっても、スタックフレームっていうことは出てくるが、メモリ朗域の拡大ではない¥
スタック怖かったから、2008に期待をかけてダウンロードして調べてみたが、
↓のVB2008のヘルプで、"STACK"でヒットしたのは「実行中」の「検査」の話でね。
↓そもそも実行中にスタックメモリ領域(コード領域も意味する)の大きさ変えれるわけないんだから(笑

スタック フレームの検査のサンプル
このサンプルでは、任意のポイントでの呼び出し履歴の情報を、実行中のプログラムのコード内から取得する方法を説明します。呼び出し履歴を使用すると、現在のプロシージャに至るまでにアプリケーションが実行したプロシージャの順番を確認できます。
567455:2009/05/12(火) 15:07:45
>>563
Cは「当初>>560」からあったけど、マイクロソフトのVBはないって言ってるんだよ。
そのMSDNに書いてあるのは、CとかMASMの話だよ。

568デフォルトの名無しさん:2009/05/12(火) 15:09:06
だから外部という認識だからアクセスできない
馬鹿だよな
569デフォルトの名無しさん:2009/05/12(火) 15:09:55
こいつ人の言ったこと何も聞いてないのな。
570デフォルトの名無しさん:2009/05/12(火) 15:11:58
スタックサイズはリンク時に決定される。
コンパイルは関係ない。
リンク後でもEXEのヘッダー書きかえればサイズは変更できる。
そのためのツールがeditbin
571デフォルトの名無しさん:2009/05/12(火) 15:12:22
あれあれあれだよ
あれってどれだよ
572455:2009/05/12(火) 15:13:14
↓「スタック」も理解できないおまえらは他人にいつも何を言ってるの?

569 :デフォルトの名無しさん:2009/05/12(火) 15:09:55
こいつ人の言ったこと何も聞いてないのな。

568 :デフォルトの名無しさん:2009/05/12(火) 15:09:06
だから外部という認識だからアクセスできない
馬鹿だよな
573デフォルトの名無しさん:2009/05/12(火) 15:13:53
>571
これじゃないのがあれだろ
日本語も知らないのか?
574デフォルトの名無しさん:2009/05/12(火) 15:16:00
良いページ見つけた。
http://mail2.nara-edu.ac.jp/~asait/visual_cpp/intro_cpp.htm
ここのダイアログベース読めばいいんじゃね?
575455:2009/05/12(火) 15:16:11
↓とにかく、VBではできない

570 :デフォルトの名無しさん:2009/05/12(火) 15:11:58
スタックサイズはリンク時に決定される。
コンパイルは関係ない。
リンク後でもEXEのヘッダー書きかえればサイズは変更できる。
そのためのツールがeditbin
576デフォルトの名無しさん:2009/05/12(火) 15:20:54
で、結局この人はなにをやりたいの?
577455:2009/05/12(火) 15:23:20
>>568>>569は、異なるダイアログボックス間で、別のダイログボックスにある、同じ名前のIDC_STATIC1を
↓参照できるって言ってるのと同じこと。C++とかなんとかの問題でなくプログラムの基本がわかってないと
↓思うけどね。

GetDlgItem( IDC_STATIC1)
578455:2009/05/12(火) 15:24:53
俺は、同じこと何度も答えてるよ。
579デフォルトの名無しさん:2009/05/12(火) 15:29:51
>>455の最初の質問を読んでみた。
一番の近道はMFCを使わないで
CでWindowsプログラミングをすることだと思った。
多少記述は多くなるけど問題ないと思う。
580455:2009/05/12(火) 15:31:22
↓これはあくまでも、実行中のダイアログプロシージャ内で通用する話であって、
↓別のダイアログプロシージャ(外部プロシージャ、つまり別のダイアログボックス)
↓のコントロ−ルを参照してることではないだろ。この言ってる意味がわからないかねえええ

GetDlgItem( IDC_STATIC1)
581デフォルトの名無しさん:2009/05/12(火) 15:34:04
別のダイログだったらコントロールのIDが同じだって識別可能
使いまわすときにいちいち変えてたら面倒くさくてしょうがない。
582デフォルトの名無しさん:2009/05/12(火) 15:39:32
別のダイアログだろうがやることが同じなら
同じコードで実現できる。
というか同じでやった方がいい。
583デフォルトの名無しさん:2009/05/12(火) 15:40:18
>>580
リソースファイルをテキストエディタで開いてみな
584455:2009/05/12(火) 15:42:27
いくつも同じ名前(ID)のコントロールがある場合、実行ファイルはどうやって特定認識するの。
(通常はデフォルトの動作。つまり、カンレント(実行中)のプロシージャで動作するわけでしょ。)
(じゃ別のダイログプロシージャ(別のダイアログボックス)につくられるコントロ−ルには、
どうやって参照するの?って聞いてるのよ。この質問がわからないのかねえええ)
↓はあくまでも実行中のダイアログプロシージャ(ダイアログボックス)が自分に貼られてる
↓コントロールのアドレスに関する値を渡すという関数でしょ。

GetDlgItem( IDC_STATIC1)
585デフォルトの名無しさん:2009/05/12(火) 15:45:09
だから、>>528の中盤に答が書いてあるだろ。
586455:2009/05/12(火) 15:45:27
>>583
それで?
587デフォルトの名無しさん:2009/05/12(火) 15:51:47
>>584
あー
もう
考え方がCすぎるんだよ

ダイアログにはクラスがひもづくでしょ
ダイアログを表示するには
そのクラスのインスタンスを作って表示するでしょ
ってことはそのインスタンス内のIDC_STATIC1は一つでしょ
だからダイアログのインスタンス->GetDlgItem()になるの!
588455:2009/05/12(火) 15:54:52
528?
そうか。なんだ。すまん。
>>528
んじゃ、DlgBの値は、どこで、どうやって取得するわけ?

実際の記述は、取得したときにDlgBという変数を使ったら、
そのまま
DlgB.GetDlgItem(IDC_STATIC1)→でいいわけ?
589デフォルトの名無しさん:2009/05/12(火) 15:58:33
ダイアログB(DlgB)の実体を生成したときに、ダイアログA(DlgA)のメンバ変数(自分で定義)に値をぶちこむ。
590デフォルトの名無しさん:2009/05/12(火) 16:01:36
やっぱりクラスという用語だけしってて中身を知らない感が
ひしひしと伝わってくる。
Cだけ知ってれば他の言語は全部わかったも同然っていう
感じがする。
591455:2009/05/12(火) 16:04:53
>>589
だから、その手法は、>>484で聞いてたんだよな。俺。

DlgB.を先走って「ハンドル」って言ったのは間違いだったかもしれんが。
でもハンドルみたいなもんだろ。とにかく「固有」(結局はアドレスだから)の数値なんだから。

592デフォルトの名無しさん:2009/05/12(火) 16:09:49
ハンドルで表わされる物がオブジェクト指向でのオブジェクトとなるのは
別に難しい概念じゃないと思うのだが
それに何で関数のヘルプ読まないの?
芋蔓式にそれに必要な物とやり方がわかると思うんだけど
593デフォルトの名無しさん:2009/05/12(火) 16:12:18
TBSの記者みたいなやつだな
594455:2009/05/12(火) 16:14:17
>>592
ヘルプに書いてある?
「コントロールのアドレス(又はポインタ)はダイアログが実行中しか取得できません。」
とかって、どっか書いある?
595455:2009/05/12(火) 16:16:41
訂正
・・・ダイアログが実行中しか取得できません。」
・・・その親ダイアログが実行中(フォーカス中)しか取得できません。」
596デフォルトの名無しさん:2009/05/12(火) 16:21:19
おまえはゆとりかw
597594:2009/05/12(火) 16:21:45
>>592

>>594は取り消し
根本的に質問が間違った。質問の本意は、
「ヘルプには、他のダイアログ(外部プロシージャ)にあるコントロールを
直接参照はできません。」とかって書いてある?

だった。

598デフォルトの名無しさん:2009/05/12(火) 16:27:27
>>597
だからね。そこはC++を勉強してたらそういう疑問は出ないの。
それが当たり前なの。
他のインスタンスの変数を直接参照できないように設計するのは
オブジェクト指向の初歩の初歩なの。
599594:2009/05/12(火) 16:30:08
>ダイアログB(DlgB)の実体を生成したときに、ダイアログA(DlgA)のメンバ変数(自分で定義)に値をぶちこむ。

とにかく、だから、俺は、そのことを>>484で問い正していたんだよ。
そうしたら日記に書けとかなんとかって・・・・

600デフォルトの名無しさん:2009/05/12(火) 16:32:31
ウィンドウハンドルだろうがオブジェクトのインスタンスだろうが、プログラムを実行中にしか取得できないわけだが、
ひょっとしてコード内に固定値でアドレスを書こうとしているのか?
601デフォルトの名無しさん:2009/05/12(火) 16:44:48
「実行中」の用語が間違ったな。
「生成中」、または「フーカスになったとき」だな。
vbだと共有変数にいちいち保存しなくても、プロシージャ(ダイアログやコントロール)の
名前だけで、その「擬似ハンドル」みたいなものは自動的に値は持ってるからね。

例えば、
Form2.Label1
って書けば別に、Form2のほうで共有変数(Public)に代入なんかしてなくてもいいわけで。
602デフォルトの名無しさん:2009/05/12(火) 16:47:34
別に共有変数でなくてもいいんだろ?
当然にパラメータで渡せばいいんだろ?
603デフォルトの名無しさん:2009/05/12(火) 16:48:40
455専用スレかよw
他の人が質問できない雰囲気になるぞ
604デフォルトの名無しさん:2009/05/12(火) 16:49:30
すまん
605デフォルトの名無しさん:2009/05/12(火) 16:51:28
>>601
だからVBは嫌われるんだよ
606デフォルトの名無しさん:2009/05/12(火) 16:53:13
なんだ結局質問の内容は
VBのForm2.Label1をどうやったらいい?
たったこれだけか