■過去ログ置き場に戻る■ 1- 前250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

VisualC++相談室
751 名前:デフォルトの名無しさん :2001/01/26(金) 22:41
ホント学生って危機感ないよな。

752 名前:デフォルトの名無しさん :2001/01/26(金) 23:33
>>746
俺もMeで使えてるよ。

753 名前:ヘボ学生 :2001/01/26(金) 23:39
>750
CDとCDケースのみって、これが違法コピーって奴ですか?

754 名前:729 :2001/01/27(土) 00:14
>>730
それは試したことがあるんですが、ASSERTが出てしまった記憶があります。
別スレッドのウインドウハンドルをいじる時も、ちゃんとウインドウハンドルに
ロックをかけてやらなければならないのかなーと思っているのですが、
相手がListViewとかだと、いつロックをかけてよいのやら、わかりません。


755 名前:デフォルトの名無しさん :2001/01/27(土) 06:58
>>754
それは君のやり方が悪いのでは?
メッセージ送れるはずだよ。
#define MY_MW_TIMER (WM_USER)
とかユーザー定義のメッセージを使ってメインウィンドウにメッセージを送る。
メインウィンドウにそのメッセージが送られたら
>スレッドないの変数をTimerで定期的に読み出す方法(729より抜粋)
でやってる方法で読み込めばできるはずだよ。

756 名前:デフォルトの名無しさん :2001/01/27(土) 07:55
 MFCのDOC/VIEWアーキテクチャのツボみたいのがなかなか掴めていない厨房プログラマですけども、とりあえず始めるにあたって、一つ教えていただけませんか。
 MFCアプリをウィザードで作るとC***App, C***Doc, C***View, CMainFrame, CChildFrame(MDIの場合)が作成されますが、これに、例えば画像処理や各種デバイスからの入出力を扱うクラスを加える場合、一体どういった形で組み込むのが常道なのでしょうか。C***AppあるいはC***Doc内に埋めこむのがいいのか・・・、グローバルでインスタンスを作ってどこからでも参照できるようにするのか等等、一つ教えていただけないでしょうか。
 よろしくおねがいします。


757 名前:デフォルトの名無しさん :2001/01/27(土) 08:45
CDocumentの派生クラスに画像データクラスを持たせて、
それを返すメソッドを追加して、
操作はCViewの派生クラスからCDocumentへのポインタを取って、
CDocumentのデータクラスを返すメソッドを呼ぶ。
CDocumentに直接データを持たせると移植がめんどくさくなるのでアウト

758 名前:hreo :2001/01/27(土) 13:45
今、課題でオセロゲームをCで作っているんですが、
ぜんぜん強くありません。
一応、なるべく角はとらせる、そして、その角の横三つを相手にとらせる、
で、あとは出来るだけ多くとれる所に置くっていう思考ルーチンです。
この思考ルーチンをどのように改良すれば、強くなるのでしょうか?
どなたか制作経験のある方、御教授頂けたら幸いです。

759 名前:デフォルトの名無しさん :2001/01/27(土) 14:04
製作経験は無いが・・
相手の打てる手が少なくなるような手を打つ。
とういうのはどうでしょう。(根拠無し)

760 名前:デフォルトの名無しさん :2001/01/27(土) 14:15
>>758
オセロは定石がいくつかあるから、単純にパターンで持ってもいいかもね。
有名な中央の4*4から出ないように打って、
相手が出たらその部分を潰すというのだけでも結構有効かも。
あとは置ける場所に優先順位つけるというのはどうかな?
例えば、相手が手だし出来ない、いつでも取れる部分は
優先順位低くするとか。
出来たらアプキボンヌ。

761 名前:デフォルトの名無しさん :2001/01/27(土) 15:17
出来るだけ多く取れる手でも次の相手の手がより多く取り返される。
少なく取る手だが次の相手の手がより少なくしか取れない。
要は先読みでしょう。局面の評価関数を作って、相手の手も含めて
再帰的に計算し、もっとも有利な場所に置く。
序盤・中盤・終盤で評価関数の内容を変える。残り手数が一定数に
なったら最終手まで読み切る。

762 名前:デフォルトの名無しさん :2001/01/27(土) 15:28
クラスをスタックの中に作らないようにする方法を教えてください。
具体的には、デストラクタでdelete thisを行っているので、
必ずクラスをヒープに作らせるようにしたいのですが、
それが出来ないように制約を加えたいのです。

newを行うのではなく、デザインパターンのfactoryパターンを使うのがいいのでしょうか?
私が読んだ本と少し適用例が違ってくるのですが

763 名前:デフォルトの名無しさん :2001/01/27(土) 15:41
コンストラクタをprivateにして、
そのかわり生成関数を用意する。

764 名前:hreo :2001/01/27(土) 19:26
>>759-761
どうも、レスありがとうございました。
これらの考えを組み込んで、作り直してみます。


765 名前:デフォルトの名無しさん :2001/01/27(土) 21:05
代表的なプログラム言語を5個あげろという課題が出たのですが分かる方
教えてください。本を見てもいまいちわかりません・・・。

766 名前:デフォルトの名無しさん :2001/01/27(土) 21:11
>>765
パターン1: C, Perl, Scheme, Java, C++
パターン2: sed, AWK, Perl, C, sh
パターン3: COBOL, Fortran, BASIC, C, VB
パターン4: Ruby, Python, Perl, PHP, C
パターン5: Java, Smalltalk, C++, Ruby, Scheme
好きなの使え。


767 名前:766 :2001/01/27(土) 21:12
shはプログラム言語か?という議論が出てきそうだな。
と予測sage。

768 名前:766 :2001/01/27(土) 21:13
Pascal忘れてた。

769 名前:デフォルトの名無しさん :2001/01/27(土) 21:15
代表的って有名ってことか?
有名なのといったらJAVAとかC/C++、BASIC
あとHTML(ワラ

#間違ってたらスマソ

770 名前:デフォルトの名無しさん :2001/01/27(土) 21:19
アセンブラもわすれちゃいやん

771 名前:デフォルトの名無しさん :2001/01/27(土) 21:27
>>765
Eiffel, Sather, Dylan, Oberon, Sisal

772 名前:デフォルトの名無しさん :2001/01/27(土) 22:12
どうでもいいが、765はスレちがい。

773 名前:デフォルトの名無しさん :2001/01/27(土) 22:23
765です。参考になりました。答えてくださったみなさん、どうもありがとうございます。

774 名前:744 :2001/01/29(月) 10:51
>>745さん
どうもありがとうございました。
結局InvalidateRect()で対応しました。
わざわざありがとうございました。

775 名前:デフォルトの名無しさん :2001/01/29(月) 12:22
VisualStudio.NETの正式版はいつごろ発売されるのでしょうか?

776 名前:デフォルトの名無しさん :2001/01/29(月) 18:32
初心者的質問で恐縮なのですが、VC6でDOC/VIEWを使ってMDIのアプリをウィザードで作るのですが、アプリを起動するとデフォルトでwindowが一枚開きますよね。アプリ起動時にchild windowが一切開いていないmain frameだけの状態にしたいのですが、いったいどこを変更したらよいのでしょうか。よろしくお願いします。

777 名前:デフォルトの名無しさん。 :2001/01/29(月) 19:04
>>775
今年の年末らしいよ777わーい

778 名前:デフォルトの名無しさん。 :2001/01/29(月) 19:05
>>776
Cから逝ってみよう!!

779 名前:デフォルトの名無しさん :2001/01/29(月) 20:44
>>776
CWinApp から派生したクラス(仮に CHogeApp) の メンバー関数 CHogeApp::InitInstance() の中に、
以下の部分がありまっしゃろ。

  // コマンドラインでディスパッチ コマンドを指定します。
  if (!ProcessShellCommand(cmdInfo))
    return FALSE;

これをコメントアウトしなはれ。

  // コマンドラインでディスパッチ コマンドを指定します。
  //if (!ProcessShellCommand(cmdInfo))
  //  return FALSE;

780 名前:デフォルトの名無しさん :2001/01/29(月) 20:53
>>779

if(cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;

このように書き換えてくれ。

781 名前:779 :2001/01/29(月) 22:07
>>780
いやじゃ!

782 名前:780 :2001/01/29(月) 22:40
>>781
明らかに間違いなんだよ。

783 名前:デフォルトの名無しさん :2001/01/29(月) 23:11
自分で作った関数がどこで定義されているのかわがんね。
class がない。教えれ。

784 名前:デフォルトの名無しさん :2001/01/29(月) 23:28
>>783
「ファイルから検索」しなさい

785 名前:デフォルトの名無しさん :2001/01/29(月) 23:42
>>784
なるほどめっかった。ありがとう


786 名前:デフォルトの名無しさん :2001/01/31(水) 21:42
MFC使ってます。
クラスAのメンバにクラスBを入れています。
クラスBのメンバ関数からクラスAのメンバを
参照したいのですが、どうすればよいでしょう。

787 名前:デフォルトの名無しさん :2001/01/31(水) 22:01
B::setRefToA(classA *pa)

を作る(w


788 名前:ボログラマー :2001/01/31(水) 22:03
>>786
クラスBのメンバにクラスAのポインタ追加して、
クラスAの初期化時にクラスBに追加したポインタにクラスAのthisを代入。

この場合、クラスB定義する時にクラスAが未定義とか言われるから、
クラスB定義前に、
class クラスA;
とするように。

789 名前:名無しさん :2001/02/01(木) 05:36
C言語初心者です。
VisualC++を使っています。
実行結果がDOSプロンプトに表示された時、すぐDOS画面が閉じて
しまって実行結果をよく見ることが出来ません。
DOS画面を閉じないようにしたいのですが、どうすればいいのですか?
教えてくださいませ

790 名前:デフォルトの名無しさん :2001/02/01(木) 06:16
22 名前:初心者投稿日:2001/01/23(火) 03:29
2つ疑問があるのですが
VC++6でDOS画面での実行結果がすぐに閉じてしまう。
あと、コマンドライン引数を打ち込むことができない。
よかったらおしえていただけますか。


23 名前:>22投稿日:2001/01/23(火) 03:36
[プロジェクト]-[設定]-[デバック]-[プログラムの引数]
で設定できると思う。24 名前:>22投稿日:2001/01/23(火) 03:45
>VC++6でDOS画面での実行結果がすぐに閉じてしまう。
!ボタンなら閉じないと思う。
それか、main()の最後に、_getch()とでも書いておく。

791 名前:スレッドクン :2001/02/01(木) 10:59
AfxBeginThreadでワーカスレッドを生成して、スレッドを途中で殺したい場合はみなさん
どのようにしているのでしょうか?

へぼいやり方ですが、メインスレッドからフラグを立てて、ワーカスレッド
内からAfxEndThreadをすることにしました。

ワーカスレッドの自殺まちは以下のコードです。

DWORD dwCode;
LONG ret = ::GetExitCodeThread( m_pThread->m_hThread, &dwCode );
if ( ret && dwCode == STILL_ACTIVE )
{
// スレッドが動作中。
WaitForSingleObject( m_pThread->m_hThread, INFINITE );
MessageBox("スレッド死んだ・・・");
}

この場合ですと、
「// スレッドが動作中。」のところでワーカスレッドが自殺した場合、
そのハンドルも消えるんですよね?
そしたら、やはりWaitForSingleObjectのパラメタm_pThread->m_hThreadは
例外エラーになりまずいですよね・・・。

Afx****Threadを使ったのが間違い?


792 名前:デフォルトの名無しさん :2001/02/01(木) 11:28
>>791
try/catch で例外を隠す

793 名前:デフォルトの名無しさん :2001/02/01(木) 11:45
>>786
つーか、もうちょっと構造を考えたほうが・・・
参照する必要が有るなら
ひっくるめて1つのクラスが正解なのでは
どうしてもってんなら、Virtualかな?

794 名前:786 :2001/02/01(木) 12:44
>>788

サンクス。何とか逝けました。ついでに質問。

>クラスB定義前に、
>class クラスA;
>とするように。

クラスBを定義しているヘッダにクラスAを定義しているヘッダを
インクルードするのはダメ?何故か未定義エラーが出るんだけど。
classキーワードを付けてやることにより、コンパイラは
プロジェクト内のすべてのクラスをサーチするのでインクルードは
必要ないってことですかね。
でもclassキーワードでなくインクルードじゃないと通らない場合も
ありますよね。その辺が今混乱してて分からないのです。

変な事いってたらスマソ。

795 名前:ボログラマー :2001/02/01(木) 13:20
>>794
>クラスBを定義しているヘッダにクラスAを定義しているヘッダをインクルードするのはダメ?
(a_src.h)
#ifndef __A_SRC_H__
#define __A_SRC_H__
..実装..
#endif
みたいな事すれば通る。

クラス内に実体がある場合は、
>class クラスA;
とかしてもダメ。
上の例だとポインタだけだったからOK。
関数のプロトタイプ宣言と同じ感じ。

796 名前:786 :2001/02/01(木) 13:38
>795

素早いレスサンキュ。よー分かりました。

797 名前:デフォルトの名無しさん :2001/02/01(木) 18:35
常に手前に表示ってどうやるのですか?

798 名前:デフォルトの名無しさん :2001/02/01(木) 18:36
age

799 名前:デフォルトの名無しさん :2001/02/01(木) 18:38
>>795
何階層まで慰けるんだっけか?

800 名前:ボログラマー :2001/02/01(木) 19:29
>>799
ワオ!ヘッダのネストに制限あんの!?猫耳だよ。違った、初耳だよ。
コンパイラに依存すんの?それともANSI規格関係?教えてplz.

801 名前:ボログラマー :2001/02/01(木) 20:48
>>797
SetWindowPos()。詳しくはMSDNで。
ただ、Win2000で期待した動作しないとかfj.os.ms-windows.programmingで
語られてるので、興味があれば覗くべし。

802 名前:デフォルトの名無しさん :2001/02/01(木) 21:46
>>800
ANSIで保証されてるネストは8までらしい。

803 名前:デフォルトの名無しさん :2001/02/02(金) 00:24
>>801

あんがと。でけた。

804 名前:デフォルトの名無しさん :2001/02/02(金) 09:48
Spyの解説サイト きぼんぬ。

805 名前:デフォルトの名無しさん :2001/02/02(金) 10:53
>>804
http://msdn.microsoft.com/library/devprods/vs6/visualc/vcug/_asug_Home_Page.3a_.Spy.2b2b.htm

806 名前:デフォルトの名無しさん :2001/02/02(金) 11:53
>805

Sorry, I can't read English.

807 名前:デフォルトの名無しさん :2001/02/02(金) 13:07
>>806
    | ̄ ̄ ̄ ̄|
  _|____|_
   / /  \_ヽヽ
   |ノ /   \ ハ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    (| ・  ・ |)  < 逝ってよし!!
   丿ゝ  o ノ    \________
    厂 ̄ ̄ ̄|
   /  ̄ ̄厂/丶
   / )  ○  | \
  ○丿     丶○
   (⌒⌒⌒⌒⌒)
    ⌒|⌒|⌒|⌒
     |vv|vv|
    /_T_ \


808 名前:ボログラマー :2001/02/02(金) 13:08
>>802
鬱だ・・・これからは気をつけてコーディングします。
>>806
記述は出来るのか(藁

809 名前:デフォルトの名無しさん :2001/02/03(土) 02:43
ge

810 名前:デフォルトの名無しさん :2001/02/03(土) 02:52
Spy++ (SPYXX.EXE) is a Win32-based utility that gives you a graphical view of the system?s processes, threads,
windows, and window messages.

Spy++(SPYXX.EXE)はWin32ベースのユーティリティでシステムプロセス、スレッド、ウィンドウ、ウィンドウメッセージの
グラフィカルビューアをあなたに提供します。



811 名前:タイマー :2001/02/05(月) 02:45
無知な初心者です。
SetTimerの使い方がわかりません。

SDIのプログラムを作ってます。
ファイルから読み込んだ数値データを、動画グラフとして描画しようと思ってます。
データをドキュメントクラスに読み込んだあと描画するので、描画はOnDrawではなく、
ビュークラスにDrawGraph()という自作関数で行います。
それで、データを読み込んだ後、メニューバーの「スタート」をクリックして動画を始めたいのです。
DrawGraphで1枚描き、タイマーで全域をクリアして、DrawGraphを呼び出し次の1枚を描く、、、
というのを繰り返したいのです。

SetTimerは、どこに記述すれば良いのでしょうか?
DrawGraphの定義の中ですか、それとも違う場所ですか。
そして「スタート」で呼び出す関数は、SetTimer、DrawGraphのどちらでしょうか?

どーぞよろしくお願いします。
VC++6.0、

812 名前:デフォルトの名無しさん :2001/02/05(月) 10:27
>>811
>SetTimerは、どこに記述すれば良いのでしょうか?
「スタート」ボタンのイベントハンドラ。

>そして「スタート」で呼び出す関数は、SetTimer、DrawGraphのどちらでしょうか?
初っ端に描画したければDrawGraphとSetTimer。
最初の描画は最初の大麻イベントのときでよければ、SetTimerのみ。


813 名前:デフォルトの名無しさん :2001/02/05(月) 12:28
Visual C++で画面だけは、表示しっぱなしで、
ある時間になると、内部処理を開始するという事は、
どのようにしたらよろしいでしょうか?

814 名前:オートメ :2001/02/05(月) 12:42
ActiveX ControlWizardでOCXを作成中に
クラスウィザードでいきなりオートメーションの追加(プロパティと
メソッド)が出来なくなった・・・なんでー???



815 名前:デフォルトの名無しさん :2001/02/05(月) 13:16
>>813
ワーカスレッドを走らせといて、指定時間になったら、適当にシグナル上げるl。

816 名前:超初心者 :2001/02/05(月) 13:29
たくさんエディットボックスが配置された画面で、
エディットボックスに入力された値をソース内で使用するため、
メンバ変数に取り込む・・・というのは、基本中の基本だと思うのですが、
この場合、皆さんはどのような手法を用いて、メンバ変数に
取り込まれているのでしょうか?

色々と勉強用のホームページをまわってみたのですが、それぞれ特色のある
手法が公開されていて、超初心者の私としては、どれがスタンダードなのか
分かりません。

手法と、それを使っている理由なんかも教えてほしいのです。
よろしくお願いいたします。

817 名前:オートメ :2001/02/05(月) 14:33
>814
すんません。
ソースセーフで読み取り専用になってました^^;

818 名前:デフォルトの名無しさん :2001/02/05(月) 14:54
>>813
SetTimerを使え。

819 名前:デフォルトの名無しさん :2001/02/05(月) 15:10
>>816
GetWindowTextってそれ用のAPIがあるんあから、それを使う。
MFCだったらClassWizardを使って、メンバ変数とコントロールを関連付けする。

というくらいしか思いつかないけど、コレ以外になにかあるんかな?



820 名前:デフォルトの名無しさん :2001/02/05(月) 15:15
>>816
819さんみたいにしてコントロールじゃなくて値にしてUpdateWindowでも良いと思う。
この方が楽かも。


821 名前:デフォルトの名無しさん :2001/02/05(月) 15:47
>>820

オレはUpdateWindowって再描画させるAPIって認識なんだけど、
どう使えばエディットコントロールからテキストをひろえるの?

822 名前:デフォルトの名無しさん :2001/02/05(月) 15:54
>>821
すまん、 UpdateData(TRUE); だ。


823 名前:デフォルトの名無しさん :2001/02/05(月) 16:00
819>>822
いや、俺の言ってる「ClassWizardコントロールと変数を関連付ける」ってのは
DDX/DDVあたりのことを言ったつもりなんだけどね(~_~;)

824 名前:デフォルトの名無しさん :2001/02/05(月) 16:02
>>823
×ClassWizardコントロール
○ClassWizardでコントロール


825 名前:名無しさん@お腹いっぱい。 :2001/02/05(月) 16:39
VC++で初めてGUIプログラム組まされるのですが、
まずはscrible(?)からなんでしょうか?


826 名前:デフォルトの名無しさん :2001/02/05(月) 16:48
>>823
マップするってことだよね?
そこで、コントロールじゃなくて、値に設定する。
で、EditBoxならたとえば、m_str(DDX用変数)
UpdateData(FALSE); //DDX変数からダイアログにデータ設定
UpdateData(TRUE); //ダイアログからDDX変数にデータ設定


827 名前:デフォルトの名無しさん :2001/02/05(月) 16:57
トレイアイコンを作るダイアログベースのアプリケーションで、
起動時にダイアログを不可視にしておく方法はないでしょうか?
InitDialog()でShowWindow(SW_HIDE)しても消えてくれません。

828 名前:win歴2週間 :2001/02/05(月) 17:06
以前linux+gccで動かしてた
標準入力とsocket sdの入力を待つ、というコードを
windows(dos prompt)で動かしたら
何も入力してないのにstdinの方で必ず引っかかってしまいます。
selectの返値をみたらSOCKET_ERROR(-1)になってました。

解決策、もしくは何か間違っているところがあれば、
ご教授願います。

fd_set rd;
for (;;) {
FD_ZERO(&rd);
FD_SET(fileno(stdin), &rd);
FD_SET(sd, &rd);
select(FD_SETSIZE, &rd, NULL, NULL, NULL);
if (FD_ISSET(fileno(stdin), &rd)) {
/* stdin */
}
if (FD_ISSET(sd, &rd)) {
/* socket sd */
}
}

829 名前:デフォルトの名無しさん :2001/02/05(月) 17:07
oninitDialog()でTimerまわして、ontimerである程度の時間HIDEしまくる・・・・
ごめん、これくらいしか思い付かない。

830 名前:827 :2001/02/05(月) 20:28
>>829
それも考えたんですが、どーにもスマートじゃない気がして…

831 名前:SAGE :2001/02/05(月) 20:58
>>827
試してないからうまくいくか知らんけど、モードレスダイアログにしちゃえば?

832 名前:デフォルトの名無しさん :2001/02/06(火) 00:50
ボタンやテキストボックスを画面に貼り付ける際に選択する
アイコンがいろいろ並んでいるウィンドウを消しました。
元に戻す方法がわかりません。これでは画面に何も貼り付けられないです。


833 名前:デフォルトの名無しさん :2001/02/06(火) 01:19
>832
ツールバーの上で右クリック。
出てくるメニューのリソースをチェックする。

834 名前:デフォルトの名無しさん :2001/02/06(火) 01:38
>>828
1. Winsockのselect()はUNIXにおけるようにファイル記述子一般を対象とする
システムコールではなく、socket descripterにしか使えない。端的に云って、
windowsでは「ソケット」は「ファイル」の一種ではない(のだが、ReadFile
やWriteFileのようなAPIで読み書きすることも出来るのでややこしい)。

2. fileno()により得られる「ファイル記述子」は、UNIXとは違いkernelレベル
の資源ではなく、ファイルポインタ同様Cランタイムにより管理される
資源に過ぎない(同様にopen/read/write/...等もシステムコールではなく、UNIX
システムコール風のI/Fをエミュレートする単なるライブラリ関数である)。

一般にWinsockの世界はWinsockの世界で閉じていて、ソケットは専用のWinsock
APIを使ってアクセスするものだと思っておいた方が無難。


835 名前:デフォルトの名無しさん :2001/02/06(火) 01:42
>>827
ダイアログのプロパティで不可視にしてもだめ?
やっぱり試してないのでなんとも言えないけど

836 名前:デフォルトの名無しさん :2001/02/06(火) 01:44
どうもありがとうございます〜。>833
いろいろやったんですがわかりませんでした。
ツール->カスタマイズ->ツールバーでもでますね。


837 名前:デフォルトの名無しさん :2001/02/06(火) 01:46
サブクラス化したリストボックスのプロシージャで
初期化を行いたいのに、WM_CREATEでひっかかりません。
なにか良い方法はありませんか?

838 名前:デフォルトの名無しさん :2001/02/06(火) 01:51
サブクラス化したリストボックスのプロシージャ内で
初期処理を行いたいのに、WM_CREATEやWM_INITDIALOGでは
引っかかってくれません。
何か良い方法はありませんか?

839 名前:デフォルトの名無しさん :2001/02/06(火) 06:37
>838
プロシージャの外でも初期化できると思うけど。
具体的にどんな処理したいの?

840 名前:デフォルトの名無しさん :2001/02/06(火) 06:39
プログラムフォルダ(c:\Program Files)を取得する方法ってある?
GetWindowsDirectory みたいなので一発で取れる方法が見つからない。
今は GetWindowsDirectory で取得したフォルダのドライブ部分(c:\)に
自分で Program Files をくっつけて作ってるんだけど。
APIで何かないもんですか?

841 名前:デフォルトの名無しさん :2001/02/06(火) 07:15
Program Filesは特別なフォルダじゃないから
無理じゃないのかな(違うかも)。


842 名前:SAGE :2001/02/06(火) 08:17
>840
俺もそれ知りたい。

レジストリには書いてあるから、そこから取ってくりゃ
いいんだけど、スマートじゃないしなぁ。

843 名前:デフォルトの名無しさん :2001/02/06(火) 08:39
>>840
SHGetSpecialFolderLocation でとれなかったっけ?


844 名前:win歴2週間 :2001/02/06(火) 08:55
>>834
大変勉強になりました。
当分UNIXのことは忘れます。

845 名前:デフォルトの名無しさん :2001/02/06(火) 09:05
レジストリ \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir じゃないか?>>840
ここ書き換えると大抵のインストーラは従ってくれるみたいだけど。
95年頃の古いソフトだとそこの値に関わらず C:\Program Files にインストールしようとするのもあるみたいね。
一発で取れるAPIがあるかどうかは知らない。


846 名前:827 :2001/02/06(火) 09:30
自己レス

dlg.DoModal()

の代わりに

dlg.Create(IDD_DIALOG);
dlg.ShowWindow(SW_HIDE);
dlg.RunModalLoop(MLF_NOKICKIDLE);

で解決しました。

847 名前:デフォルトの名無しさん :2001/02/06(火) 11:59
>>839

プロシージャに送られてきたウィンドウハンドルから
親のウィンドウハンドルを得たいのです。


848 名前:デフォルトの名無しさん :2001/02/06(火) 12:14
データベースをオープンして、テーブルからレコードを検索し、
フィールドの値をリストビューに表示したいのですが、
レコードから読んだ値がCStringに入っています。
リストビューに値をセットしようとしたら、リストビューの値は
テキスト(?)char(?)のようでエラーが出てしまいます。
データベースから読んだ値を設定するフィールドの型を変える
とか、CStringの値をリストビューの値に設定するときか、
どちらかで対応したいのですが、その方法を教えて下さい。

849 名前:デフォルトの名無しさん :2001/02/06(火) 12:15
自己レス

サブクラス化した直後に、自作メッセージ送る事で解決させました。
でも、ちょっとスマートじゃない。。。

850 名前:デフォルトの名無しさんだもん :2001/02/06(火) 12:42
>>848
CStringで直接かけると思うんですけど。
だめならcharにキャストしたら良いのでは?


851 名前:848 :2001/02/06(火) 12:45
リストボックスにはCStringで書き込めるようなのですが、
リストビューだと、エラーが出ます
すみません、キャストの仕方がわからない厨房なもので、
教えていただけるとありがたいのですが

852 名前:デフォルトの名無しさんだもん :2001/02/06(火) 14:08
じゃ、charにコピーしてそれを使うとか。

CString str; //ここに文字列がはいってるとします。
char szBuf[1024]; //1024はバッファのサイズね。適当にとってください。
ZeroMemory(szBuf, 1024);
lstrcpyn(szBuf, str, 1024);//lstrcpynを使うのは念のためね。
で szBufを使うと良いと思います。


853 名前:デフォルトの名無しさん :2001/02/06(火) 14:53
いきなりですが課題が分からなくて出来ないので
訊いてもいいですか?
これできなかったら進級が…

854 名前:848 :2001/02/06(火) 15:41
>>852
ありがとうございます。無事、リストビューに内容が表示されました。
型は理解できるのですが、VC++(C言語)でのキャストの仕方が
分かっていません。
キャストの仕方も分からないくせに・・・と思われるとおもうのですが、
なにぶん、数日前にVCを買ったところなのです。
初歩的な質問に答えていただいてありがとうございます。

855 名前:デフォルトの名無しさんだもん :2001/02/06(火) 15:59
>>854
charにキャストって言い方はまずかったです。ごめんなさい。
C言語では、voidポインタとほかのポインタとの代入は相互に可能だったけど、
C++になって明示的なキャストを使わない限りvoidポインタと他の方のポインタに
変換できない。
たとえば、
char* psz;
void* pv;
pv = psz; //CでもC++でもOK
psz = pv; //CではOK、C++はダメ
psz = (char*)pv; //こうすると、CでもC++でもOK

今回のお話とはちょっと関係ないけど・・・



856 名前:デフォルトの名無しさん :2001/02/06(火) 17:24
>>853
学校の課題を丸投げすると確実に叩かれます。
訊き方に注意しましょう。

857 名前:デフォルトの名無しさん :2001/02/07(水) 02:56
>>856
そうそう。学校の課題と言わずに丸投げすれば良いでしょう。かしこい大人になりましょう。

858 名前:デフォルトの名無しさん :2001/02/07(水) 03:06
学校の課題です。
教えてください。
学校をサボりすぎて出席日数たりません。
サボった原因は2chに来すぎて眠いからです。
出席日数は学校のコンピュータで管理されてます。
うまくやれば記録を書き換えて進級できる気がします。
どうすれば学校のコンピュータにアクセスできますか?
自分のIDとパスワードでは出席日数の参照はできますが更新はできません。
このままでは進級できないのでどうかよろしくお願いします。

859 名前:デフォルトの名無しさん :2001/02/07(水) 03:17
>>858
英語のウォーゲームを見てみましょう。
あれの主人公が成績を書き換えてるので、同じ事をやればOKです。

860 名前:デフォルトの名無しさん :2001/02/07(水) 04:02
英語じゃなく映画じゃないのか。

861 名前:859 :2001/02/07(水) 04:16
>>860
すまん、打ち間違えた。

862 名前:名無しさん@お腹いっぱい。 :2001/02/07(水) 05:22
MFCからはじめると大きな壁にぶち当たるのか?

863 名前:デフォルトの名無しさん :2001/02/07(水) 06:22
>>841 >>842 >>843 >>845
どうもありがとうございます。

SHGetSpecialFolderLocation は C:\WINDOWS\スタート メニュー\プログラム が取得されうまく行きませんでした。

レジストリから読み込めは良いようですがこれでいいですか?
レジストリの使い方良く分からないんですけど。
一応動作することは確認しました。(ちゃんと取得できました。)
エラー処理は省略してあります。


char filder[MAX_PATH];
DWORD type;
DWORD size;
HKEY key;

RegOpenKeyEx(HKEY_LOCAL_MACHINE , "SOFTWARE\\Microsoft\\Windows\\CurrentVersion" , 0 , KEY_READ , &key);
type = REG_SZ;
size = MAX_PATH;
RegQueryValueEx(key , "ProgramFilesDir" , NULL , &type , (LPBYTE)folder , &size);
RegCloseKey(key);


864 名前:デフォルトの名無しさん :2001/02/07(水) 09:16
SHGetFolderPathでできるはず。やったことはない。
http://msdn.microsoft.com/library/psdk/shellcc/shell/Functions/ShGetFolderPath.htm

865 名前:デフォルトの名無しさん :2001/02/07(水) 09:38
ごめん。NTと2000じゃないとだめみたい。

866 名前:デフォルトの名無しさんだもん :2001/02/07(水) 10:04
>>865
Windows NT/2000: Requires Windows NT 4.0 or later.
Windows 95/98: Requires Windows 95 or later.
だから95以降でも行けるみたい。
Header: Declared in shfolder.h なんだけど
shfolder.h がないみたいなんだけど・・・


867 名前: デフォルトの名無しさん :2001/02/07(水) 12:58
『プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。』
このエラーメッセージを回避したいのですが
どのような処置を行えばいいのでしょうか?
リビルドしても直らず、プリコンパイルを使用しなければビルドは成功します。

868 名前:867 :2001/02/07(水) 13:00
すいません。
>プリコンパイルを使用しなければ
プリコンパイル済みヘッダーを使用しなければの間違いです。

869 名前:デフォルトの名無しさん :2001/02/07(水) 13:13
>>867
プリコンパイル済みヘッダーファイル (たぶん stdafx.h) をエラーが出ているソースにインクルードしましょう。
        #include "stdafx.h"

870 名前:デフォルトの名無しさん :2001/02/07(水) 15:08
PrintDialog.DoModalで出す、印刷ダイアログの初期値で用紙を横に
設定したいのですが。


871 名前:デフォルトの名無しさん :2001/02/07(水) 15:45
プロパティページのタイトルを変更する方法ってありますか?
pPropPage = new CPropertyPage;
pPropSheet = new CPropertySheet;
pPropSheet->AddPage(pPropPage);

pPropSheet->Create(...);
の後に
pPropPage->SetWindowText();
をやってもタイトルはかわりません。
どなたかよろしくお願いします。


872 名前:名無しさん :2001/02/07(水) 16:29
>>871
プロパティページのタイトルというのは、タブコントロールで
表示されてる部分のこと?

CPropertyPageでは実装されてないみたいなので、
PSM_GETTABCONTROL メッセージを使ってタブコントロールの
ウインドウハンドルを取得してそこからGetWindowText()
するのが良いのでは。


873 名前:教えてください。 :2001/02/07(水) 16:52
1次元配列中のデータの中で最大値と最小値を求めるプログラムです。
データは最大10個で、キーボードからデータの数を何個にするかを
入力してその個数分のデータを更にキーボードから読み込むということ
なんですが一応自分なりに下記のように作ったんですが、やはり
だめでした。


#include<stdio.h>

void main()
{


int i,i1,i2,max,min,idata[10];


printf("データを何個にしますか?: ");
scanf("%d",&i1);

for(i=0;i<i1;i++)
{
printf("データを入れてください: ");
for(i2=0;i2<=i1;i2++);
scanf("%d",&idata[i]);
max=min=idata[i];
if(max>idata[i])max=idata[i1];

}

printf("%d",”ここもわかりません。”);
}

ぜんぜん的外れなソースかもしれませんが、自分ではもうよく分からな
いのでよろしくお願いします。


874 名前:教えてください。 :2001/02/07(水) 16:54
873です。
長くなってすいませんでした

875 名前:名無しさん :2001/02/07(水) 17:10
>>873
添削モード。

> for(i2=0;i2<=i1;i2++);
ここの最後のセミコロンは何?
というか、そもそもi2のfor()って何?

単にnを入力させてn個のうちの最小値と最大値を出したいなら、

{
int i, Count, Data, Min, Max;

printf("データを何個にしますか?: ");
scanf("%d", &Count);

for(i=0;i<Count;i++)
{
printf("%d 番めのデータを入れてください: ", i+1);
scanf("%d", &Data);

if (i == 0) { Min=Data; Max=Data; }
else
{
if (Min > Data) Min=Data;
if (Max < Data) Max=Data;
}
}

printf("最小値: %d", Min);
printf("最大値: %d", Max);
}

// エラー処理とか範囲外の数値チェックは略。

if (i == 0) 以下がポイントで、最初の1回めの
数値入力のときは最小値と最大値は無条件で入力した数値そのもの
なのでこのようになる。それいがいの場合(else)は現時点での
最小値と最大値を比較し、それぞれより小さいものやより大きいもの
であればそれを入れる。


876 名前:教えてください。 :2001/02/07(水) 17:28
>>875
ありがとうございます。
forの最後のセミコロンはただのまちがいです。

もうちょっと教えて欲しいんですけど
配列を使わなければいけないんで、出来れば配列関係で
教えて欲しいんですけど…
何度もすいませんがお願いします。


877 名前:デフォルトの名無しさん :2001/02/07(水) 17:35
>>875
>if (i == 0) { Min=Data; Max=Data; }
>else

変数の初期化のために、ループ中で毎回処理を振り分けるのって美しくないと思う。
オレだったら、ループに入る前に初期化して、ifを無くす。

Min = INT_MIN;
Max = INT_MAX;


878 名前:鈍亀 :2001/02/07(水) 17:46
>>630

VC でプログラミングする手順がサクッと知りたいなら
“「新 Visual C++ 6.0 入門 スーパービギナー編」林 晴比古 著 ソフトバンク”
買え。1,900円だからWebで探す手間と電話代考えれば本買ったって似たようなもんだろ。
ただし、この本(というかこの著者の本)でプログラミングの勉強しようなどとは
思わないこと。

879 名前:デフォルトの名無しさん :2001/02/07(水) 18:01
int main(void)
{
  int i, count, min, max, data[MAXDATA];
  scanf(..., &count)
  if (count <= || count > MAXDATA)
    エラー/もう一回
  for (0からcountまで繰り返し) {
    scanf(..., &data[i]);
  }
  min = max = data[0];
  for (1からcountまで繰り返し) {
    if (データがmaxより大きい) {
      ...
    } else if (データがminより小さい) {
      ...
    }
  }
  表示
  return 0;
}

880 名前:デフォルトの名無しさん :2001/02/07(水) 19:18
レジストリの復元の仕方について質問です。
RegSaveKeyでバックアップをとり、
レジストリ変更後
RegReplaceKeyで復元しようとしています。
API自体は返り値から成功しているのですが、復元されていません。
実行後、backupとして作成されるファイルもできています。
ちなみに、NT系も9x系もだめでした。
権限もNTの場合、SE_BACKUP_NAME SE_RESTORE_NAME
もつけています。
RegSaveKey の方は間違いなく成功していると思うので、
RegReplaceKeyの方に問題があると思うのですが、これをやる前に何かやっておくこととか、
何かあるのでしょうか?
ご存知の方以内でしょうか?


881 名前:867 :2001/02/07(水) 22:56
>>869
レスありがとうございました。
その様に修正します。

882 名前:デフォルトの名無しさん :2001/02/07(水) 23:58
intの値をcharとして利用するとき、みなさんはどんなコードを
書いてますか?
私は_itoa使ってます

883 名前:デフォルトの名無しさん :2001/02/08(木) 00:00
sprintf。

884 名前:デフォルトの名無しさん :2001/02/08(木) 00:01
>>882 そのまま代入する。itoa使うと0が0x30になっちまう。

885 名前:デフォルトの名無しさん :2001/02/08(木) 00:10
クラスによってメッセージを使い分けたいのですが
どなたかWndProcの効率良い使い方を教えてください
クラスAでのGetMessageとクラスBでのGetMessageで
独立したWndProcを持たせたいと思っています(または同等の処理)

WndProcをvirtualで持っているクラスからクラスA、Bを派生させてオーバーライド・・
も考えたのですがうまくいきませんでした

どなたか実現させてる方がいたら教えてください

SDKです

886 名前:882 :2001/02/08(木) 00:18
>>884
え?そのまま代入って?
itoaって、そんなことになってるとは・・・

887 名前:デフォルトの名無しさん :2001/02/08(木) 00:41
>>886
バカ?
コードかいたことないんじゃないの?

888 名前:デフォルトの名無しさん :2001/02/08(木) 00:49
>>884,>>887
揚げ足とりって楽しいかい?
>>882
「intの値を文字列として使用するとき」って言っとけば
誤解されなかったかもね


889 名前:デフォルトの名無しさん :2001/02/08(木) 00:52
>>884,>>887
揚げ足とりって楽しいかい?
>>882
「intの値を文字列として使用するとき」って言っとけば
誤解されなかったかもね


890 名前:デフォルトの名無しさん :2001/02/08(木) 00:56
Windows2000導入に当たって久々にVC再インストールしたのですが
インストール直後にオンライン登録なんてできたんですね。

質問なのですがユーザー登録するとなにかいいことありますか?

891 名前:名無しさん@お腹いっぱい。 :2001/02/08(木) 03:43
プログラムしかできない理系最下層軍団早く氏んでくれ。

892 名前:名無しさん@お腹いっぱい。 :2001/02/08(木) 03:45
プログラムしかできない理系最下層軍団早く氏んでくれ。


893 名前:名無しさん@お腹いっぱい。 :2001/02/08(木) 03:45
プログラムしかできない理系最下層軍団早く氏んでくれ。




894 名前:名無しさん@お腹いっぱい。 :2001/02/08(木) 03:47
まあ馬鹿だろうからプログラムもろくにできないだろうけどね




895 名前:デフォルトの名無しさん :2001/02/08(木) 09:49
ダイアログベースのダイアログ上のボタンとF1〜F12キーを
結び付けたいんですけど・・・・・

896 名前:デフォルトの名無しさん :2001/02/08(木) 10:07
>>895
アクセラレータを定義すれ。
(リソースに'Accelerator'を挿入して、ボタンの ID とキーの ID の結びつきを定義する)

897 名前:デフォルトの名無しさん :2001/02/08(木) 10:46
初心者質問ですいません。
COMポートで相手の機械にデータを流したいのですが、
どのような関数を使えばいいのですか
ちなみに整数値(int)をわたしてあげたい!

898 名前:895 :2001/02/08(木) 11:19
>>896
他にもいっぱいかかにゃ逝かんじゃないかっ・・・デモ出来たありがd。
ついでにF1押してもヘルプ動かなくするには?

899 名前:デフォルトの名無しさんだもん :2001/02/08(木) 11:55
>>897
CreateFileとWriteFile で良いかな?
第一引数を"COM1"とかね。




900 名前:898 :2001/02/08(木) 11:58
出来た。ありがと。

901 名前:ぷぷぷーっ :2001/02/08(木) 12:28
>892
ぷぷぷぷぷーーーー!!ぷぷっ!!くっ・・・ぷぷぷ!!!

902 名前:デフォルトの名無しさん :2001/02/08(木) 13:53
897です。899さん、ありがとうございました。
出来ました!
で〜もう一つ質問なんですけど
同じような事を
GP-IBでやるにはどうしたらいいですか?
教えて下さい。

903 名前:デフォルトの名無しさんだもん :2001/02/08(木) 17:01
>>902
GP-IBって何かわからない・・・


904 名前:>>901 :2001/02/08(木) 19:50
(・ε・)プップクプー

905 名前:いさましいチビの女 :2001/02/08(木) 20:13
900を超えたので引っ越してください。

↓引越し先
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981630730&ls=100

906 名前:なまお :2001/04/15(日) 08:45
僕のサイトにC言語会話講座と言うのを作ったので、見にきてください!

http://web.kyoto-inet.or.jp/people/namao/index.html

907 名前:デフォルトの名無しさん :2001/04/16(月) 11:52
>>897
もし BuildCommDCB 使うことがあるなら、

ttp://support.microsoft.com/support/kb/articles/Q201/3/72.ASP

これ気をつけておかないと、
持っていった先のPCで原因不明の GPF が出る。

908 名前:教えてください :2001/04/20(金) 16:52
動物園の動物に関するデータを入力すると、
そのあとにゅうりょくされた数字に応じてデータを表示する
プログラムの作成でどこがおかしいか教えてください。

/*動物園*/
#include <stdio.h>
#define number 10A
struct zoo{

char syurui;
char namae;
int nenrei;
int taijyu;
}
main()
{
struct zoo doubutu[number];
int n,i,j;
printf("何種類か入力してください\n");
scanf("%d",&n);


for (i=0;i<n;i++){

printf("動物の種類を入力してください\n");
scanf("%s",&doubutu[i].syurui);
printf("そいつの名前も入れてくれ\n");
scanf("%s",&doubutu[i].namae);
printf("年はいくつやねん\n");
scanf("%d",&doubutu[i].nenrei);
printf("そいつ何キロやねん\n");
scanf("%d",&doubutu[i].taijyu);

}

printf("何番目にすんねや\n");
scanf("%d",&j);

j=j-1;

printf("%s\n",&doubutu[j].syurui);
printf("%s\n",&doubutu[j].namae);
printf("%d\n",doubutu[j].nenrei);
printf("%d\n",doubutu[j].taijyu);

}

詳細きぼ〜ん!

909 名前:デフォルトの名無しさん :2001/04/20(金) 17:50
struct zoo の syurui, namae は1文字分しか格納できないのに、
scanf("%s", ...) で複数文字を格納しようとしているからでしょう。
char syurui[100];
char namae[100];
とかに変えれば良いでしょう。(でも99文字以上入力すると破綻する)

あと、scanf は危険なので、テストプログラムで使うのは良いが、
実用プログラムには使用しないように。

910 名前:引っ越せってば :2001/04/21(土) 01:00
あとstruct zooの}の後に;がないとか、これはさすがにへんだろとか。
> #define number 10A

911 名前:デフォルトの名無しさん :2001/04/26(木) 00:09
良いスレッドですね。
上げ。

新しいスレッド作っていいですか??

912 名前:>911 :2001/04/26(木) 00:16
>>905

913 名前:デフォルトの名無しさん :2001/04/26(木) 00:35
ネタか。


■過去ログ置き場に戻る■ 1- 前250 最新50
DAT2HTML 0.33f Converted.