07/01/22 17:36:56
fgets や std::getline を使わずにテキストファイルからデータを一行ずつ読み込みたいのですが、
ReadFile で改行文字か EOF が来るまで1バイトずつ読み込んでバッファに取り込むという方法しか
思いつきません。もっといい方法ってありますか?
ReadFile でファイルを全部読み込んでから、一行毎に分解するという方法は出来れば避けたいです。
扱いたいのは200万行以上あるファイルです。
いまだにVC6
113:デフォルトの名無しさん
07/01/22 17:54:39
>もっといい方法ってありますか?
あなたにとって、どういうものが良いものなのか説明してください。
114:デフォルトの名無しさん
07/01/22 18:11:46
>>112
素直にfgets()やstd::getline()を使うことにするのが、「もっといい方法」だと思います。
115:デフォルトの名無しさん
07/01/22 18:34:12
ならメモリマップトファイルはどうだ。
116:112
07/01/22 19:16:40
回答ありがとうございます。
>>113-114
std::getline() でやってたのですが、処理に時間が掛かるのでどうにかならないかなと思いました。
根拠はありませんが、 API で同様の機能が提供されていればもっと効率よく出来そうだとも思ったのですが
どうやら無さそうですね。
素直に std::getline() のままで処理内容を見直すことにします。
>>115
CreateFileMapping() とMapViewOfFile() でファイルをメモリ空間にマップできるんですね。
これはこれで面白そうなので別件で試してみようと思います。
117:デフォルトの名無しさん
07/01/22 19:41:58
全部読む必要があれば結局同じことだけどな
118:名無しさん(66)
07/01/22 21:27:44
待ち状態のまま終わらないプログラムの
int nRet = WaitForMultipleObjects(NUM_OF_THREADS, hThread, TRUE, INFINITE);
このWaitForMultipleObjectsを終了させるか、
INFINITEYのまま何かを読み込んだらタイムアウト、
のような動作はできるものなのでしょうか?
>>69さんのsetjmp/longjmpを使ってみたのですが、
WaitForMultipleObjectsの後ろにジャンプすると、何故か
ジャンプした後にプログラムが勝手に終了してしまいます。
119:デフォルトの名無しさん
07/01/22 21:38:05
WaitForMultipleObjectsExとQueueUserAPCという手がなくはないが、
なんかお前がいきあたりばったりで使いそうで嫌だ。
120:デフォルトの名無しさん
07/01/22 21:52:50
>>118
スレッドのいずれかが終了すればWaitFor....から制御が返る。
戻り値から終了したスレッドを特定できるので、それ以外のスレッドを終了させればOK。
66でreturnしても駄目だったと書いてるけど、何が駄目だったのか不明。
121:デフォルトの名無しさん
07/01/22 21:55:27
あ、第3パラメタTRUEか。120じゃだめです。
122:デフォルトの名無しさん
07/01/22 21:57:12
FALSEにして120すれば良い気もする
123:デフォルトの名無しさん
07/01/23 00:25:46
でも結局>>67なんだよな……。
124:デフォルトの名無しさん
07/01/23 01:05:12
Visual C++ 2005 Expressエディションでまずは Hello Worldからと思い
新規プロジェクトでCLRコンソールアプリケーションを選びました。
そうしたら、もうビルドするだけになってるんですね。
まぁこれはいいんですが、このときこんな感じで自動生成されたんですが、
--
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}
--
ここで
int main(array<System::String ^> ^args)
の部分の意味がさっぱりわかりません。
多分引数を受け取る?配列?な気がしますが、良く分かりません。
C言語でやったように
int main( int argc , char *argv[] )
パラメタを処理できることが出来るのは判ったのですが、やっぱり
int main(array<System::String ^> ^args)
の意味と具体的なパラメタの処理方法が知りたいです。
よろしくお願いします。
125:デフォルトの名無しさん
07/01/23 01:28:37
>>124
くだすれC++/CLI(初心者用)
スレリンク(tech板)l50
普通のがよければWin32コンソールアプリを選べ
126:デフォルトの名無しさん
07/01/23 01:37:22
>>125
Visual Studio にインストールされたテンプレートってのが表示されて
その中に Win32コンソールアプリってのはありません
あるのは
クラスライブラリ CLRコンソールアプリケーション
空のCLRプロジェクト Windowsフォームアプリケーション
の4つだけです。
それと知りたいのは、
int main(array<System::String ^> ^args)
の意味するところです。
できれば解説願えませんでしょうか?
あっ、くだすれC++/CLI(初心者用)で聞くべき質問ってことですか?
すみません、良く分かってなくて。
127:デフォルトの名無しさん
07/01/23 01:47:31
MSDN読めよ、糞が。
とか言いたくなっちゃうから、きちんとマニュアルは読もうな。
C++/CLIで探せばすぐ判るから。
128:デフォルトの名無しさん
07/01/23 09:13:59
MSは初心者にはC#やVBを推奨してるから
VCは使いにくい面があるかもしれない。
特に目的が決まってないならC#やVBをお勧めする。
129:デフォルトの名無しさん
07/01/23 09:33:31
PlatformSDK入れてMSDNの該当ページ(>>92)に従え
130:デフォルトの名無しさん
07/01/23 21:23:48
>>126
そりゃ左でCLRを選んでるからだろ
Win32選んでみな
131:デフォルトの名無しさん
07/01/24 15:29:36
Visual C++だとstring型のハンドルがありますが、
C++のstringは使えないでしょうか?
Visual C++はC++の拡張と聞きましたが、C++が分かっていても、
Visual C++はほとんど一から型とかライブラリの使い方を勉強する必要が
あるのでしょうか?
132:デフォルトの名無しさん
07/01/24 22:08:59
使いたければ使えばいい。
133:デフォルトの名無しさん
07/01/24 23:02:30
組み込み型じゃないからな
134:デフォルトの名無しさん
07/01/25 02:00:37
VC++.NET2002で質問です。
MFCアプリケーション上でダイアログボックスを作って、
DoModal()でモーダルダイアログボックスを表示してます。
ところが、そのダイアログボックスのOnInitDialog()内で
メッセージボックスAfxMessageBox( "HogeHoge");を表示すると
OKで閉じた後、なぜかモードレスダイアログになってしまいます。
(ダイアログ表示中でも親ウィンドウが操作できてしまう。)
これってこういう仕様なのでしょうか?
135:質問者A
07/01/25 09:21:22
Visual Studio C++ Express Edition使っています。
初めてwindowsプログラムします。
猫でもわかるプログラミングのWindowsSDK編第1部の
イントロダクションのsample01.cppをビルドしたんですが、
エラーが出てしまいます。
★プロジェクトの作成方法
[ファイル]-[新規作成]-[プロジェクト]
[新しいプロジェクト]ダイアログで
[プロジェクトの種類]→Win32
[テンプレート]→Win32コンソールアプリケーション
と選択して、
プロジェクト名(lesson)を入力して
[OK]をクリック。
[Win32アプリケーションウィザード]
で、
[アプリケーションの種類]→Windowsアプリケーションにチェック
[追加オプション]
で、
[空のプロジェクト]→チェックせず(デフォルト)
[プリコンパイル済みヘッダー]→チェック(デフォルト)
で、[完了]ボタンを押しました。
136:質問者A
07/01/25 09:21:54
あらかじめ用意された↓をビルドすると正常終了します。
//lesson.cpp
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
137:質問者A
07/01/25 09:22:33
★プログラムの変更
これを猫でもわかるに変えたいんですけど、
関数名が①と②で違うので、
②の関数名だけ①の名前(_tmain)に変えて
実行しました。
①↑
int _tmain(int argc, _TCHAR* argv[])
②猫でもわかるのサンプル
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
LPSTR lpszCmdLine, int nCmdShow)
138:質問者A
07/01/25 09:24:23
すると、↓のようなエラーが出てしまいました。
★エラー内容
lesson.cpp
d:\lesson\lesson\lesson.cpp(24) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
d:\lesson\lesson\lesson.cpp(26) : error C2440: '=' : 'char [25]' から 'LPCWSTR' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
d:\lesson\lesson\lesson.cpp(40) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [25]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
d:\lesson\lesson\lesson.cpp(47) : warning C4244: 'return' : 'WPARAM' から 'int' への変換です。データが失われる可能性があります。
ビルドログは "file://d:\lesson\lesson\Debug\BuildLog.htm" に保存されました。
lesson - エラー 3、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
プロジェクトの作成の仕方が悪いのでしょうか?
教えてください。
139:質問者A
07/01/25 09:27:11
変更後のプログラムです。(長いので分割して書きます。すみません)
#include "stdafx.h"
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szClassNme[] = "ウィンドウクラス・ネーム";
140:デフォルトの名無しさん
07/01/25 09:51:35
URLリンク(www.kumei.ne.jp)
ここの2005と書いてある部分を参照
141:質問者A:
07/01/25 10:09:30
(「連続投稿です」と言われて書き込みが途中で止まっていました)
>>140
ありがとうございます。気付きませんでした。
[VS2005の設定方法]見ました。
>次に、Win32APIを利用したWindowsアプリケーションの設定です。
>「新しいプロジェクト」では、プロジェクトの種類を「Visual C++」、テンプレートを「Win32 プロジェクト」にします。
私の環境だと「Win32 プロジェクト」がありません。
「Win32コンソールアプリケーション 」のみです。
(これってVC++2005のExpressだと無理ということでしょうか?)
とりあえず「Win32コンソールアプリケーション 」として
残りはサイトに書かれている通り、
「アプリケーションウィザード」で、
アプリケーションの種類を「Windowsアプリケーション」
追加のオプションを「空のプロジェクト」
にしました。
しかし、>>138 と同じエラーがでてしまいました。
142:デフォルトの名無しさん
07/01/25 10:58:36
>>141
プロジェクトのプロパティの「全般」に文字コードの指定があるからMBCSに変更。
24行と47行のは明示的にキャストしとけ。
にしても、初心者が見る箇所に
Win16を引き摺ってるようなコードを放置してあるのは良くないな。
143:質問者A:
07/01/25 11:19:00
>>142
>プロジェクトのプロパティの「全般」に文字コードの指定があるからMBCSに変更。
できました!ありがとうございます。
144:デフォルトの名無しさん
07/01/25 13:28:52
OS:WindowsXP SP2
環境:VS2005 MFC使用
教えていただきたいことがあります
イミディエイトウィンドウにメモリリーク時の情報が表示されますが、発生したファイル名
を表示したいのですがどのようにしたらよいのでしょうか?
MFCでは標準でDEBUG_NEWが定義されており、これでファイル名も表示されるという情報を
ネットでよく見かけるのです。この情報に間違いがなければデフォルトで表示されるはずなのですが・・。
今のアウトプットウィンドウの表示
Detected memory leaks!
Dumping objects ->
{15027} normal block at 0x01322E30, 346 bytes long.
Data: <5 9 9 9 E Q> 35 00 39 00 39 00 39 00 00 00 45 00 00 00 E6 51
Object dump complete.
おそらくこうなるであろうファイル名付属のアウトプットウィンドウの表示
Dumping objects ->
C:\MyProjects\TestProt\Test.cpp(17) :
{16} normal block at 0x00780EC0, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.
よろしくお願いいたします。
145:デフォルトの名無しさん
07/01/25 13:49:44
その質問に答えようと思ったら
適当なプロジェクト作ってわざとメモリリークさせて結果を見てみるだけだから
自分でやってみればいい
146:144
07/01/25 14:04:43
>>145
ためしに新規のプロジェクトを作成し、ってわざとメモリリークさせてみたところ、
ファイル名が表示されていました。
DLL参照したり、ソースファイルとプロジェクトのディレクトリを別々にしたりしてるんで
それが原因なのでしょうか?
147:デフォルトの名無しさん
07/01/25 17:13:19
>>135
猫でもわかるなら、VS2005サンプルプログラムのところも見てみろよ。
148:デフォルトの名無しさん
07/01/26 21:16:50
>>147は死ね
このスレは「くだすれVisual C++(超初心者用)その4」だぞ
馬鹿か貴様
149:デフォルトの名無しさん
07/01/26 21:18:56
>>135
そのコードのURL書いてみて
150:デフォルトの名無しさん
07/01/26 21:32:31
超初心者には147程度の記述では不親切だったか?
151:デフォルトの名無しさん
07/01/27 02:40:35
135の件は142の答えで解決済み。
152:デフォルトの名無しさん
07/01/28 11:15:33
Visualstudio.NET2003使ってる者ですが
プロジェクトを作って 新しい項目の追加を選択して
a.cとか適当名前いれて
ソースファイルに何も書き込まずに
デバッグ無しで開始を選択すると
エラーが発生して デバッグを開始出来ません
指定されたファイルが見つかりませんのウインドウと
error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
とでます。
どうしたらよいのでしょうか・・
さっぱり見当が付かないんですが。
153:デフォルトの名無しさん
07/01/28 11:33:04
main(wmain/_tmain)関数から始まるプログラムを書きたければ、Win32コンソールプロジェクトを作れ。
そうでなければWinMain(wWinMain/_tWinMain)関数を書け。
154:デフォルトの名無しさん
07/01/28 11:55:53
プログラム以前のレベルですが2点教えてください。
10年近く前までC(++ではない)やってた者ですが、
突然ゲーム作りがしたくなりまして
一から勉強し直しのつもりでVisual C++を買おうと思ってるんです。
でも何を買ったらいいのかさっぱり判りません!
1.VC++.NET2003ってStandard版しかないのですか?
Professionalとか、上位版が出ていたりするのですか?
2.VC++.NET2003って今でも店頭で入手できるんでしょうか?
2005を買ってダウングレード、みたいな方法もできるのですか?
その場合には2005のどれを買えばいいのですか?
とりあえずDirectX関連の本を買って読んでるんですが
その本がC++.NET2003までしか対応していないのです。
↓漏れが買った本
URLリンク(www.kohgakusha.co.jp)
155:デフォルトの名無しさん
07/01/28 13:06:33
>>154
2003を買う必要は全くありません。
2055EEを入手するか、それで飽き足らなければ2005PRO辺りを買えば宜しいかと。
156:デフォルトの名無しさん
07/01/28 13:13:21
2005EEはフリーだよ
157:154
07/01/28 15:31:30
>>155-156
ありがとう
あえて2003を買おうとしているのには訳があって
この本にソースとかプロジェクトファイル?が収録した
CD-ROMが付属してあるわけですが、
2003用のファイルを2005の環境で開いたら、
何かと細かいエラーとか警告とか、いろいろ出てきそうな
気がするんです。(問題ない?)
いちばん恐れているのは、2005の環境で変なエラーがいっぱい出て、
それを直すためにコンパイラの設定とかソースの修正とか
いろいろ見直してるうちに結局ワケわかんなくなっちゃって、
しかもそれでもなお直らず、本当に勉強したい部分にまったく
触れられないまま、挫折してしまうことです。
・・・すいません、実はVC6の頃に一度これで挫折してるんですorz
とりあえず2003の環境なら、あまり深く考えずに
本に書いてある通り操作したら、一通りサンプルもうまく動いて
勉強に専念できそう、と考えたんです。
本読んでて、昔と今じゃあ技術が全然違う事だけはよくわかったので、
初心に帰ってがんばろうと思ってます
長文スマソ
158:デフォルトの名無しさん
07/01/28 16:35:56
10年近く前までCをやっていたと言い張る人間にしては、随分と情けない話だ。
159:デフォルトの名無しさん
07/01/28 16:55:02
古本屋で買って来たVC1の本でもほとんど同じだったよ
昔の方が機能が少なくてわかりやすいという点もあるけど
160:デフォルトの名無しさん
07/01/29 02:32:23
途中で挫折するのは基本ができてないくせに応用したがるからじゃまいか
161:デフォルトの名無しさん
07/01/29 11:13:42
そういうこと。
順調に進歩する人と
いつまでたっても進歩しない人と
途中で投げ出す人を見てきたが、
性格というか気分というか、
そういうが現れてるような気がした。
162:デフォルトの名無しさん
07/01/29 22:21:12
>>157
まあVC++ 2005はセキュリティ関連で色々と細かい警告を出すようになったが、それは有名だしググれば対処法はすぐ見つかる。
その程度のプログラムならそのほかには、特にVC++ 2005に持っていったからといってエラーになるということはないと思う。
せいぜいSDKを入れていない、入れたけどVC++で設定し忘れることに気を付けろというくらいかな。
163:デフォルトの名無しさん
07/01/30 00:06:14
もう一つ、文字コードの違いにも注意。
164:デフォルトの名無しさん
07/01/30 00:08:27
10年前ってオレ学生だな
DOSのBorlandCと窓のC++習ってたけど
似たような事やるにしても
DOSベースか窓ベースかで難易度に死ぬほど差を感じた
で、その頃C++Builderとか出てきたけど
あれはMSVCとは比べもんにならんぐらい簡単で驚いた
165:デフォルトの名無しさん
07/01/30 00:43:43
失礼します。
今日C++をはじめてみた者です。アホらしい質問かもしれませんがお願いします。
以下のプログラムについて質問です。
#include <iostream>
using namespace std;
class Glass
{int nakami; //水の量
public:
Glass(int x) : nakami(x){} //引数を取るコンストラクタ
//ユーザかプログラマに渡される値(xで表される)をnakamiに格納
void dasu(int); //水を出す関数 };
void Glass::dasu(int x){
if(nakami >= x){ nakami -= x;
cout<< "水を出しました。" << endl;
cout<< "現在のコップの中身は" << nakami << "です。" <<endl; }
else{cout<< "そんなに水がありません。" <<endl;
cout<< "現在コップの中には" << nakami << "入っているだけです。" <<endl; } }
int main()
{int x; //整数の「いれもの」xの定義。下のcinの前ならどこにあってもよいのです。
cout << "コップを生成します。どれだけ水をいれるか入力してください。" << endl;
cin >> x;
Glass glass(x); //引数を取るコンストラクタが呼び出され、
//水がxだけ入ったglassという名のコップが生成される
cout << "さあ、glassから水を出します。いくら出しますか。入力してください。" <<endl;
cin >> x; //上のxを使いまわしている
glass.dasu(x);
cout<<"終了"<<endl; }
これは、とある(おそらく有名な?)C++入門ページの所からの引用なんですが、
なぜ、変数のxを使いまわすことができるのかわかりません。
一回目に指定した物がnakamiに入って、二回目に指定した物がdasu量になるなんて、
そんな都合のいいようになるわけが・・・と思ったら普通になったわけですが、どうなってるんでしょうか?
166:デフォルトの名無しさん
07/01/30 01:02:34
>>165
何が聞きたいか分からん・・・
たとえば、
x=5;
cout << x;
x=10;
cout << x;
これでも x を2回使いまわしてることになるが(1回目は1"5"、2回目は "10" が出力される)
何か疑問があるか?
167:デフォルトの名無しさん
07/01/30 01:09:00
>>166
あーーーーーー、簡単な形で見ると、わかりました。
つまり、cinでユーザーがxに入力した値はそのすぐ下にあるxに
反映されると言うわけ・・・かな? いや、そうですね。
解決しました。ありがとうございます。
168:デフォルトの名無しさん
07/01/30 06:17:17
>>167
今更どうでもいいけど、ここはVCのスレだから、どうせならC++初心者のスレに逝けばよかったのに。
169:デフォルトの名無しさん
07/01/30 12:26:49
foobar2000のプラグインを作ってみたいんだけど、
当方、組込み系のプログラムが専門で、Windowsのプログラムは未経験です。
VisualC++を使ってみようかと思ってるんですが、Foobar2000のプラグイン開発って
ExpressEditionでもできるの?
170:デフォルトの名無しさん
07/01/30 12:31:16
超初心者とかいう以前の問題かもしれないけど、教えてください。
URLリンク(www.imgup.org)
このOrchisのブラウザ→firefox.exeの部分はなんていう名称でしょうか?
Orchisではサブメニューとなってますが、VC++でいうには?
マウスポインタが来ると展開されるもの…というか…メニューバーとも違いますし…
171:デフォルトの名無しさん
07/01/30 16:04:29
フラッシュ板かこっちか迷いましたがプログラム側で起動すると思ったのでこちらに書きます
インターフェイスをswfにしたいんですがプログラム側ではどういう処理が必要ですか?
.exe起動→swf起動→swfをウィンドウに貼り付け
今ここで行き詰ってます
よろしくお願いします
172:デフォルトの名無しさん
07/01/30 16:37:24
さあ?
173:デフォルトの名無しさん
07/01/30 17:38:54
スレリンク(tech板:785-786番)
このような状態なんですがどうすればいいんですか?
174:デフォルトの名無しさん
07/01/30 17:45:41
>>173
プロジェクト作った?
175:173
07/01/30 18:32:03
今プロジェクト作成に気をつけながらやってみたらうまく行きました
朝のやつは何かおかしかったみたいです。ありがとうございました
176:デフォルトの名無しさん
07/01/30 23:23:54
openfiles.exeのように、
ロックを取得しているプロセス名を取得する方法ってどんなやり方がありますかね?
177:デフォルトの名無しさん
07/01/31 01:16:18
includeファイルの中身を見ても仕組みがよくわからないんですが
インクルードファイルの機能を見るにはどうすればいいですか?
ヘルプを見ましたがいまいちよくわかりませんでした・・・
何かよい検索方法があれば教えてください
よろしくお願いします
178:デフォルトの名無しさん
07/01/31 19:38:21
もう少し具体的に書いてくれ
普通は、この機能を使うには
どのヘッダファイルをインクルードすればいいのかを
調べるから順番が違って参考になる答えがだせるかわからんけど
179:デフォルトの名無しさん
07/01/31 23:01:33
タブ(CTabCtrl)を使ったプログラムを作ったのですが、タブ内の処理(他クラス・チャイルド)と親クラス(?)で変数を共有する方法を教えてください。
親クラスの変数をタブのクラスで参照できれば良いです。
また、親クラスからあるトリガで子クラスの表示処理を走らせたいのですが、子クラスを起こすor親クラスから直接描画できますか?
よろしくお願いいたします。
180:デフォルトの名無しさん
07/01/31 23:06:16
スルー
181:デフォルトの名無しさん
07/02/01 00:12:34
>>179
正直言っている意味がわからんのだが、
参照できる親クラスメンバは、子クラスからならばprotectedかpublic、
継承関係にないならばpublicのみだぞ。
182:デフォルトの名無しさん
07/02/01 04:52:51
親ってことは、CWnd::GetParent()か?
183:デフォルトの名無しさん
07/02/01 04:55:17
みんな意地悪しないで(知ってて知らん振り、わからない振り?)、
自分が初心者だった頃を思い出して質問を酌んでやれよ。
184:デフォルトの名無しさん
07/02/01 04:57:24
>>181
>正直言っている意味がわからんのだが、
そりゃ、>>179以上にあんたが初心者ってことだお。
185:デフォルトの名無しさん
07/02/01 04:59:25
言いたい事は何となくわからんでもないけど
クラスをどう作ってるか分からんとねぇ
186:デフォルトの名無しさん
07/02/01 06:13:21
>183-184にまかせた
187:デフォルトの名無しさん
07/02/01 08:29:22
そりゃクラスじゃなくてウィンドウの親子だな
188:デフォルトの名無しさん
07/02/01 18:09:45
つまりそうだろ!?
189:デフォルトの名無しさん
07/02/01 22:29:51
すいません、自分はクズたれ初心者です。
そこで質問です、何か作ってみようと思って、SDKみたりするんですが
C言語だと、長ったらしいソースをメッセージ毎に書いて、他にも知識が必要だと思い
ところが、MFCだと、それら(win32api達)を一通り用意用意されすぎて、でも結局win32apiをラップ
したものですし、なんかMFCを使うのは、パソコン初心者に「さぁ、使い方は教えないが便利だよ。使ってみなさい」
と言って標準アプリが付いたパソコンをわたしてるような感じで、使い勝手が分からない感があります。
どこかサイトで、MFCをつかわずwin32apiを使ったC++プログラムサンプルソースを公開してるところは
ありませんでしょうか、CodeGuru,TheCodeProject,Programmer'sHeaven,SourceForge等を見ても
MFCか、いわゆるコンソールアプリ(boost等)のどちらかしか見つけられません。
自分の探し方が悪いのでしょうが、どなたか教えてください。
(ちなみに、FastCopyのソースを見ましたが、敷居が高すぎました)
190:デフォルトの名無しさん
07/02/01 22:43:19
MSDNにSDKのサンプルがいっぱいついてる
191:デフォルトの名無しさん
07/02/01 23:13:59
>>189
そもそもWin32APIが関数と構造体の塊のようなものだから、
直にWin32APIを使うプログラムなんてCでもC++でも大して変わらない。
(COMが絡む分野を除く)
Win32APIを使ったプログラムで、C++らしく書くとすると、
結局MFCがそうであるように多かれ少なかれWin32APIを何らかの形でラップしたような感じになるのがオチ。
だからといってMFCを使えというわけではないし、MFC以外にも色々とあるわけだが。
192:デフォルトの名無しさん
07/02/01 23:35:56
VC++を評価版でやってみたいのですが、何をダウンロードしてインストールすればよいのでしょうか?
初歩的な質問で恐縮ですがよろしくお願いします。
193:デフォルトの名無しさん
07/02/01 23:39:37
>189
おいらは、猫->ATL/WTL
194:デフォルトの名無しさん
07/02/01 23:43:25
>>192 これのどっちか
Visual Studio 2005 Team Suite 180日間限定評価版
Visual Studio 2005 Professional Edition 90日間限定評価版
URLリンク(www.microsoft.com)
195:デフォルトの名無しさん
07/02/01 23:45:32
>>194
どうもありがとうございました。
196:デフォルトの名無しさん
07/02/02 14:43:14
リソース*.rcファイルの中で#ifdef,#else,#endifの処理があるのですが、
プロジェクトの設定の、プリプロセッサの定義に書いても、*.rcの中だけ無視されます。
(他の*.cppとかはちゃんと#ifdefで条件分岐してます)
どうすれば*.rcの中でもプリプロセッサの定義が有効になりますか?
197:デフォルトの名無しさん
07/02/02 14:45:36
解決しました。
プロジェクトのリソースタブにもプリプロセッサの定義がありました。
198:デフォルトの名無しさん
07/02/04 13:32:57
>>192
どうしても有料のエディションの評価版がいいの?
無料のExpress版は嫌?
199:デフォルトの名無しさん
07/02/07 03:18:09
評価期間過ぎたら製品版買ってMSに貢献するんだろ
無料勧めちゃイカン
200:デフォルトの名無しさん
07/02/08 17:12:26
多分すごい有名な
「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」
を使って今勉強中なんですが、
241ページのサンプルプログラムで、
CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、
’旧ペン’と銘打って保存って書いてありますが、
これをする意味がわかりません。
わざわざポインタでなぜ確保しているのでしょうか?
pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、
別に’旧ペン’を保存しておく必要があるのでしょうか?
私が簡単に確認した程度では、
oldPen 自体設定しなくても実行可能でしたし、
最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。
他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、
やればやるほど意味がないのではという考えに傾きます。
大変限定的な質問ですが、
よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば
教えていただけないでしょうか?
201:デフォルトの名無しさん
07/02/08 17:13:22
多分すごい有名な
「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」
を使って今勉強中なんですが、
241ページのサンプルプログラムで、
CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、
’旧ペン’と銘打って保存って書いてありますが、
これをする意味がわかりません。
わざわざポインタでなぜ確保しているのでしょうか?
pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、
別に’旧ペン’を保存しておく必要があるのでしょうか?
私が簡単に確認した程度では、
oldPen 自体設定しなくても実行可能でしたし、
最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。
他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、
やればやるほど意味がないのではという考えに傾きます。
大変限定的な質問ですが、
よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば
教えていただけないでしょうか?
202:デフォルトの名無しさん
07/02/08 18:00:52
DCに選択中のGDIオブジェクトは破棄できないから。
203:デフォルトの名無しさん
07/02/08 18:29:47
>200-201
★初心者にVisual C++を教えるスレ★ Part25
スレリンク(tech板:380番)
マルチ
204:デフォルトの名無しさん
07/02/08 18:31:55
ほんとだあ
205:デフォルトの名無しさん
07/02/08 18:56:07
あちこち書き込むと早く回答がもらえるよ~俺って頭いい~とか思ってるのかね。
206:デフォルトの名無しさん
07/02/08 22:37:31
URLリンク(aoiruka.blog8.fc2.com)
ここに載っている方法で加算合成を行っても問題はありませんか?
自分の環境では特に支障なく動作するのですが。
207:デフォルトの名無しさん
07/02/08 22:50:54
>>206
そのリンク踏んでも問題はありませんか?
自分の環境で支障がでると困るので
208:デフォルトの名無しさん
07/02/09 10:29:48
あっちこっちかいたらあかんのか、ぼけ。
二箇所しか書いてへんし、掲示板のタイトル選んで書いてるし、
回答は少しでも速いほうがいいし、
もしかしたらいろんな答えがあるかもわからんし、
それを知りたいのは普通やんけ。
誰も頭がいいなんか思うか。
そういう発想にいたるお前は自分が悲しくないんか。
まあ、ここでそんなやつにかまってる自分が悲しいけど。
気分が悪いんでもうこんなところに質問書いたりしません。
どうも何らかの答えになるようなことを書いてくださった方はありがとうございました。
209:デフォルトの名無しさん
07/02/09 14:04:46
もうくるなよ
210:デフォルトの名無しさん
07/02/09 14:41:44
質問です。VC++6.0でMFCを利用しています。
3つのダイアログをモーダレスで表示します。
仮に、A,B,Cとします。
この3つのダイアログのZオーダーを常にA→B→Cに固定するにはどうすれば
よいでしょうか。
私自身、Zオーダーという言葉の使い方が間違っているかもしれませんので補足します。
AとBが重なっていれば必ずAが前面に表示され、BとCならB,AとCならAという
動作です。
ダイアログが2個なら、TOPMOSTが利用できるのですが、3つの場合はどのようにしたら
よいでしょうか。
可能であれば、BダイアログをドラッグしながらAダイアログ上を横切ると、スムースにAの下
を潜り抜けるようなのがよいです。
よろしくお願いします。
211:デフォルトの名無しさん
07/02/09 17:04:21
こういう向いてないやつはどうしたらいんだろうね
本人が悟ってくれるといいけど
212:デフォルトの名無しさん
07/02/09 17:40:22
>>210
ダイアログの作成順をC B Aの順にし、Create時Aの親をBに、Bの親をCにする。
213:デフォルトの名無しさん
07/02/09 22:52:26
ど素人です。
labelに文字を続けて表示させたいのですが、
label->Text = S"hello wo";
label->Text = S"rld";
としてもrldとなってしまいます。
これをfor文等で何回も実行させたいのですが、どうすればよいのでしょうか。
214:デフォルトの名無しさん
07/02/09 23:00:29
これなら低級エスパーでも答えられるな。
215:デフォルトの名無しさん
07/02/09 23:09:15
>>213
普通のCのプログラムならそんな感じだろうけど
Windowsだからね
最低限の基礎知識がないとこれから大変だと思うよ
手取り足取り面倒みてくれる人がいるといいね
216:デフォルトの名無しさん
07/02/09 23:15:26
S""って、マネージリテラル文字列?C++/CLIか?
217:デフォルトの名無しさん
07/02/09 23:15:29
初心者です。
超アホな質問で申し訳ないんですがよろしくです。
VistaにてVS2005Expressを使おうと思ってます。
一応本体+SP1(MSUpdateにて)とSP1Update4Vista(β版)とやらをインスコしてみました。
・・がこれでSP1は適用できてるんでしょうか?
確認方法がわからないんですorz|||
バージョン情報にはSPの文字は見えませんでしたが・・
また、Vista上の2005でビルドすると文字コードエラーが連発しますが、
なんとなくSP1では対策済みとの情報があったような気がしてて、
SP1が適用できてないのでエラーが残ってるのかなぁとか思ってるわけですが、
実際のところどうなんでしょうか?
SP1にしたからって文字コードエラーが消えるわけではないのか、
それともSP1自体適用されてないのか・・
どうかよろしくお願いします!!m(_ _;;)m
218:デフォルトの名無しさん
07/02/09 23:20:57
>>213
label->Text += S"rld";
219:213
07/02/09 23:40:38
>>216
よくわかりませんがVC++.NETでwinフォームアプリケーションを作っています。
>>218
ビルドすると
'+':__gcポインタ 'System::String __gc *'に対してポインタ演算ができません。
とエラーがでてしまいます。
220:デフォルトの名無しさん
07/02/09 23:54:54
一つの入れ物に二つ入れようとしたら
前に入れたのがでて、後から入れたのが残るよ
221:213
07/02/10 00:13:25
String* ss;
ss = System::String::Concat(S"hello wa", S"rld");
label->Text = ss;
とすれば表示させることができました。
一応問題は解決したのですが、もしこれより効率的な書き方があれば
今後のために教えてください。
222:デフォルトの名無しさん
07/02/10 00:33:15
>>221
MASM6.3?
だったら
MOV ES・SI、ソース
MOV DS/SI、ですちねーしょn
MOV ECX、カウント
REP MOV
223:デフォルトの名無しさん
07/02/10 00:39:01
コンパイラ様より効率的なんだろうか
224:デフォルトの名無しさん
07/02/10 00:42:14
>>223
昔DECのフォートランでDOループで定数を埋めるプログラムを作ったら
逆アセンブルしたら全部クリア命令だった
225:デフォルトの名無しさん
07/02/10 00:53:38
>>222
rep movsb だろ。
ていうか、そもそもCLIか。
226:デフォルトの名無しさん
07/02/10 01:43:22
>>221
大量の文字列連結用にSystem.Text.StringBuilderってのがあるけど、
二つ三つ繋ぐのには大げさすぎだな。
227:デフォルトの名無しさん
07/02/11 17:15:26
乱数を取りたいんですが
Random random = new System::Random();
int ran = random.Next(100);
ではコンパイルできないんですがどうしたらいいですか?
228:デフォルトの名無しさん
07/02/11 21:48:08
C++/CLIならたぶんこう。
System::Random random;
random.Next(100);
マネージドC++ならたぶんこう。
System::Random* random = new System::Random;
random->Next(100);
.NETを使わないC++ならboost::randomを使っておけ。
嫌なら<cstdlib>のstd::rand (& std::srand)。
229:デフォルトの名無しさん
07/02/11 22:13:12
>>228
ありがとうございます。
230:デフォルトの名無しさん
07/02/12 00:14:24
猫でもわかる…の他にWin32SDKでダイアログベースアプリケーション
の作り方を解説しているところを教えてください。
231:デフォルトの名無しさん
07/02/12 00:27:54
WisdomSoft
232:デフォルトの名無しさん
07/02/12 00:51:17
>>231
ありがとうございます。
ハード + たまにファーム屋なので、すぐ壁にぶち当たると思うけど
頑張ります。
233:デフォルトの名無しさん
07/02/12 22:40:46
C++とは直に関係なくリソースエディタのことなのですが
メニューをリソースエディタで作る時に
最初にメニュー項目に割り振られたIDをメニューエディタで変えても
resource.hに繁栄されないのですけど そういう仕様なんですか?リンクしてない?
リソースシンボルを見ると書き換えたはずの前のIDも使用中になって消すことも
できませんし……
自分でresouce.hを書き換えるものなんでしょうか?
グラフィカルなメニューエディタとresouce.hの関係がよくわかりません
環境はVS2005stdです
234:デフォルトの名無しさん
07/02/13 00:47:08
それあるね。素直に変わる時もあるけど、バグのような気がする。
235:233
07/02/13 01:55:09
>>234
ということは 本来はメニューエディタで変えたIDはリソースシンボルや
resource.hに反映されるものなのですね
勝手にresource.h書き換えるとVSに怒られるし……
何度か再起動してれば連動することもあるということですね
sp1も充ててるんですけどね
明日 試してみます
236:デフォルトの名無しさん
07/02/14 17:38:06
自分が作ってるのと関係ない窓(例えばIE)を移動させることって可能でしょうか?
237:デフォルトの名無しさん
07/02/15 01:22:31
可能です。
238:デフォルトの名無しさん
07/02/18 22:31:02
VS2005STD-VCの
アイコンエディタの色の並びは
どういう根拠で決定されたものなのでしょうか?
正直、あの並びをデータとして持っているのが無駄に思えます。
239:デフォルトの名無しさん
07/02/18 22:35:23
VGA(640x480,16色)の初期パレットじゃね?
240:デフォルトの名無しさん
07/02/18 22:43:10
って、256モードか
241:デフォルトの名無しさん
07/02/18 22:45:29
あれはわかんね
242:デフォルトの名無しさん
07/02/18 23:20:16
WebSafeColorの216色+WindowsSystemColorの32色+αじゃないのかな。
要は、255を5等分した6濃度をRGB3プレーン分展開したのがWebSafeColorの216色で、
ウィンドウ枠なんかに使っているのがWindowsSystemColorの32色。
243:デフォルトの名無しさん
07/02/19 20:28:58
MFCのOnTimerイベントの処置中は他のボタンなどのイベントを受け付けない
(OnTimer内の処理が終了後に他のイベント処理)動作は可能でしょうか?
244:デフォルトの名無しさん
07/02/19 20:40:19
OnTimer内でメッセージループ回さなきゃ、そういう動作になると思うが。
245:243
07/02/19 20:50:43
>>244
イマイチOnTimerの処理について把握してないのですが、OnTimer内の
処理が終わるまではボタンイベントの処理等には行かないって事でいいのでしょうか?
246:243
07/02/19 20:52:58
あ~すいません。
行かないってか、貯まったメッセージキューの処理とかしなきゃ行けないですね。
247:デフォルトの名無しさん
07/02/20 11:37:39
これからどうやって勉強すればいいですか
Cに関する知識0です。
248:デフォルトの名無しさん
07/02/20 11:49:53
今まではどうやって勉強して、どこまでいったのだ
249:デフォルトの名無しさん
07/02/20 13:12:56
諦めて樹海にでも行けばいいんじゃね?
250:デフォルトの名無しさん
07/02/20 23:48:17
関数が多くなって非常に醜いソースファイルがあるのですが、
ほかのファイルにいくつかの関数をもっていき、それをメインのソースファイルから利用したりはできませんか?
251:デフォルトの名無しさん
07/02/20 23:50:42
つ ヘッダ
252:デフォルトの名無しさん
07/02/20 23:52:12
>>250
ほかのファイルにいくつかの関数をもっていき、それをメインのソースファイルから利用
すれば出来る。
253:デフォルトの名無しさん
07/02/22 10:07:30
case 1:
if(GetOpenFileName(&ofn)){
GetFileTitle(GotFileName,GotFileShortName,256); strcpy(musictitle,"open ");
strcat(musictitle,GotFileShortName);strcat(musictitle," alias oto");mciSendString(musictitle,NULL,0,NULL);
}
break;
case 2:
mciSendString("stop oto",NULL,0,NULL);
mciSendString("play oto from 0", NULL, 0, NULL );
break;
こんな感じでボタン1が押されたらコモンダイアログ出してファイルを選択させ、
ボタン2が押されたら、選んだファイルを再生する、というようにしてるんですけど
動作が変なんです。
例えば、最初に「oo.mp3」を選択した後、ボタン2を押して再生します。
そして、もう一度ボタン1を押して、「xx.mp3」を選択します。
その後、ボタン2を押すと、「oo.mp3」が最初から再生されてしまいます。
本当は、「xx.mp3」を再生したいのですが・・・
254:デフォルトの名無しさん
07/02/22 10:41:32
>>253
mci使ったことないし、曲再生もやったことないけど、気づいた点を一つ。
closeしないうちに再openできるの?
単純に、oo.mp3がopenされたままだからxx.mp3でopenできてないんじゃない?
255:253
07/02/22 14:35:39
>>254
すんません、書いてなかったです。
WM_DESTROYの中でcloseはしてあります。
256:254
07/02/22 14:51:50
んにゃ、closeしないままopenしてないかって話だけど。
2度目のxx.mp3のときのcase 1で、ちゃんとopenできてるかどうか確認してみたら?
#つーか、mciSendString()はエラーを返さないのか? 返さないとしたら確認手段くらいないのか?
いっそ、試しにこんなロジックでも書いてみたら?
mciSendString("open oo.mp3 alias oto", NULL, 0, NULL);
mciSendString("stop oto", NULL, 0, NULL);
mciSendString("play oto from 0", NULL, 0, NULL);
Sleep(10000);
mciSendString("close oto", NULL, 0, NULL);
mciSendString("open xx.mp3 alias oto", NULL, 0, NULL);
mciSendString("stop oto", NULL, 0, NULL);
mciSendString("play oto from 0", NULL, 0, NULL);
Sleep(10000);
mciSendString("close oto", NULL, 0, NULL);
んで、巧く行ったらcloseをコメントにしてやってみると。
257:253
07/02/22 15:05:31
>>256
出来ました、サンクスです。
てっきり、closeは最後にアプリ閉じるときだけすればいいと思ってました。
そっかー、一旦、close 要るんだったのか。
どうもです。
258:デフォルトの名無しさん
07/02/22 15:32:52
VC++の古いやつ(5.0 Ent)使ってるんだけど
SDKで
case WM_PAINT:
return 0;
この2行が入っていると、
何故か(左上のアイコンをクリックして出す)システムメニューの
表示が遅くなったり、配置したコントロールの反応が遅れたりする
(例えばチェックボックスをクリックしてもチェックマークが入るのが遅い)。
この2行をコメントにすると直る。
これって、普通なのかな?
今更なんで5.0かって言われそうだけど
259:デフォルトの名無しさん
07/02/22 15:42:35
WindowsのWM_PAINTで再描画が行われない
(正確には更新リージョンが空にならない)と、再びWM_PAINTが投げられる。
だから例えばDefWindowProcの中ではWM_PAINTに対し
ただBeginPaintとEndPaintだけを呼んで更新リージョンを空にしていると、
Programming WindowsかAdvanced Windowsのどっちかに書いてあった。
260:デフォルトの名無しさん
07/02/24 04:13:55
windowsアプリケーションでアイコン作ったものの
コンパイルしても表示されないんですが
設定の仕方があるのですか?
261:デフォルトの名無しさん
07/02/24 07:18:30
俺様のエスパー能力を駆使した感じでは、
元々リソースを含まなかったプロジェクトに対して、アイコンファイルだけを直接追加した予感。
リソースファイル(*.rc)とresource.hがプロジェクトに含まれているか?
通常は、リソースファイルを追加した後、
そのリソースファイルに対してアイコン等を追加する。
262:デフォルトの名無しさん
07/02/24 08:00:40
残念ながら含まれてます
ただ今気付いたんですがフォルダの表示をアイコン表示にすると
ちゃんと表示されます
一覧表示や詳細表示などでは表示されないんですがこれもしかして仕様ですか?
263:デフォルトの名無しさん
07/02/24 08:42:31
諦めずに再エスパー。
アイコンの内32x32の方だけ書き換えていて、16x16は空のまま、とか。
イメージ - 現在のアイコンイメージタイプ をチェックしてみ。
264:デフォルトの名無しさん
07/02/25 23:38:32
>>263
あるある
265:デフォルトの名無しさん
07/02/26 00:33:49
>>263
遅くなってすいません
見事にそれでした
エスパーさんありがとう!
266:デフォルトの名無しさん
07/02/26 03:30:05
エスパーされるってことは、質問の情報が不足してるってことだぞ
267:デフォルトの名無しさん
07/02/26 05:04:43
つまり、馬鹿にされているってこった。
268:デフォルトの名無しさん
07/02/26 06:17:41
関係ないけどFLVPというフリーソフトも小さいアイコンの表示が変だ
大きいやつは赤いアイコン、小さい方はMFCの青いアイコン
269:デフォルトの名無しさん
07/02/26 07:39:04
昔からそうだけど、MFCの吐き出す既定コードが手抜きだから。
LoadIconしたアイコンを大小両方に割り当てる所為で、
タイトルバーには16x16では無く、32x32のアイコンが縮小されて使われている。
両方描くのが面倒な時は、どちらか一方を削除しておくのが無難だな。
270:デフォルトの名無しさん
07/02/27 18:10:22
>>269
最初から16x16も作ってくれちゃうしなあ
アイコン作ったときは、小さいほうはとりあえず消して
小さいアイコンの見栄えが気になってから追加するようにしてる。
271:デフォルトの名無しさん
07/02/27 19:27:48
ソースが同封されてるツールがあって、自分でVisual Studioで
ビルドしてみたのですが、同封されているexeと比べると何故か
サイズが大きいのはどう言ったことが原因と思われるのでしょうか?
あと何個か警告が出たのですが、一応exeが出来ています。
どんな警告も出ないように作ると勝手に想像していたのですが
ある程度の許容範囲内の警告が出るくらいは無視されるものなのでしょうか?
よろしくお願いします。
272:デフォルトの名無しさん
07/02/27 19:51:26
さあ
273:デフォルトの名無しさん
07/02/27 21:57:38
作成者とまったく同じコンパイラと
作成者とまったく同じコンパイルオプションと
作成者とまったく同じライブラリをリンクすれば
たぶん同じサイズの実行ファイルになるんじゃないかな
274:デフォルトの名無しさん
07/02/27 22:07:01
覆水盆に帰らず
275:デフォルトの名無しさん
07/02/27 23:45:12
同じCPUで、同じOSな必要もあるんじゃね?
276:デフォルトの名無しさん
07/02/28 14:56:54
size = GetFileSize( hFile, NULL );
SetWindowText(label,(char)size);
こんな風に書いて、sizeにhFileのファイルサイズを
スタティックコントロールのlabelに表示したいんですが、
labelの表示が変わらないんです。
(char)を取ると、めちゃくちゃな文字列が出ちゃう。
これ、このスレでいいんかな?
277:デフォルトの名無しさん
07/02/28 15:05:06
SetWindowTextなんだからテキストを渡さないと
278:デフォルトの名無しさん
07/02/28 16:32:12
VisualC++2005ExpressEditionを久々に起動しようとおもったんですが
”一つ以上のコンポーネントがみつかりません。再インストールしてください”
とでて、
アンインストールしようとしてもなにかのファイルがみつからないとかいうエラーがでてアンインストールできず
それでも再度インストールしようと試みたらエラーとおもわれるものがでました。
以前にはしっかりと登録もしたはずなんですが
どうすればいいでしょうか。
279:デフォルトの名無しさん
07/02/28 16:45:11
パソコン買い換え
280:デフォルトの名無しさん
07/03/01 08:29:53
最後の手段っぽいけど、Windows Installer CleanUp ユーティリティを使う、とか。
サポート技術情報を文章番号290301で。
281:デフォルトの名無しさん
07/03/01 13:38:53
SetFilePointer(hFile,1,NULL,FILE_BEGIN);
ReadFile(hFile,buf,3,&readsize,NULL);
buf[3] = ('\0');
教えてください。
上のように書いて、hFileのファイルの先頭3バイトを読み
そこにヌル文字を加える、これで先頭3バイトを受け取りたいんです。
でも、これだと2バイト目+3バイト目+ヌル文字になってしまいます。
相当馬鹿なことしてるかもしれませんが・・・
282:デフォルトの名無しさん
07/03/01 14:07:26
>>281
>SetFilePointer(hFile,1,NULL,FILE_BEGIN);
先頭から読みたいなら0じゃない?
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
283:デフォルトの名無しさん
07/03/01 14:23:25
この世はすべて1から始まっている
という世界ですな
284:281
07/03/01 14:36:34
>>282
どうもです。できました。
かなり馬鹿なことしてたんかな?
また、質問するかもしれないんでよろしくお願いします。
285:デフォルトの名無しさん
07/03/01 20:15:19
ここでいいかどうかよく判らないですが、質問です。
Web ブラウザから起動される Java アプレットがあり、そこに表示されている情報を
現在作成しているツール(Visual C++ .NET, ダイアログ)から読み取ろうとしています。
・アプレットのクラス名を指定して FindWindow()
・EnumChildWindows() で子ウィンドウを列挙
・子ウィンドウに対して GetWindowRect() や GetWindowText()
という感じで、ラベル(SunAwtLabel)のキャプションは GetWindowText() で取得できるんですが
エディットボックス(Edit)の現在の値が取れません(""となります)。
また、コンボボックス(ComboBox)もあるんですが、これは値の取り方すら分かりません。
エディットボックスとコンボボックスの現在の値を取得するには、どうしたらいいでしょうか?
286:デフォルトの名無しさん
07/03/01 21:13:20
みためがエディットボックスとコンボボックス
287:デフォルトの名無しさん
07/03/01 23:40:19
VC2005ってPDBの埋め込みできないの?
288:デフォルトの名無しさん
07/03/02 09:45:51
SetFilePointer(hFile,1,NULL,FILE_BEGIN); //(1)先頭3バイト読む
ReadFile(hFile,buf,3,&readsize,NULL); // bufはchar
buf[3] = ('\0');
SetFilePointer(hFile,0,NULL,FILE_CURRENT); //(2)先頭から4バイト目を読む(1)の続きを読みたい
ReadFile(hFile,buf,1,&readsize,NULL);
buf[1] = ('\0');
if (buf==0x01)
{
MessageBox(hWnd,"aaa","bbb",MB_OK); //(3)4バイト目は01だからメッセージが出るんじゃ?
}
度々質問ですが、
こんな感じで、まず(1)で先頭から3バイトバイナリを読みます。
次に(2)で(1)の続き(先頭から4バイト目)を読みます。
例えば、バイナリで「41 42 43 01」なら(1)はABCになると思います。
でも、(3)のメッセージが出ません。
if の所の比較が変なんでしょうか?
289:デフォルトの名無しさん
07/03/02 09:46:54
C++とDelphiどっちが簡単なわけ
290:デフォルトの名無しさん
07/03/02 09:54:02
>>288
> SetFilePointer(hFile,1,NULL,FILE_BEGIN);
0から数え始めるからこれでは最初の1バイトを飛ばすことになる
> SetFilePointer(hFile,0,NULL,FILE_CURRENT);
無意味
> if (buf==0x01)
上を治したとして、buf[0]に書き込まれているはずだからif (buf[0] == 0x01)では?
291:デフォルトの名無しさん
07/03/02 10:00:12
実験ならいいけど
こまぎれで読んだらパフォーマンス悪そうだな
292:デフォルトの名無しさん
07/03/02 10:04:37
実験する場合はデバッガ使った方がいい
293:288
07/03/02 10:07:08
>>290
thanxです、buf[0]だったんですね。
それにしてもこのスレで教えてもらうたびに
自分の実力の無さを感じてしまう。
294:デフォルトの名無しさん
07/03/02 11:05:57
実力以前の話だから気にするな
295:デフォルトの名無しさん
07/03/02 11:20:40
イイハナシダナー( ;∀;)
296:デフォルトの名無しさん
07/03/02 18:14:24
イイハナシダナー( ;∀;)
297:デフォルトの名無しさん
07/03/02 18:30:16
イナバウアー( ;∀;)
298:デフォルトの名無しさん
07/03/02 21:30:16
>>289
GUIアプリを作るなら
Delphi>>>(超えられない壁>>>VC++(MFC)
299:デフォルトの名無しさん
07/03/02 23:32:56
やりたいことができなくなったらVC++へ。
300:デフォルトの名無しさん
07/03/04 21:23:56
URLリンク(www.kumei.ne.jp)
初心者でここを見ながらVisual C++2005の勉強してるのですが、
現在時刻を表示するのに
case WM_TIMER :
GetLocalTime(&st);
wsprintf(str,"%02d:%02d:%02d",st.wHour,st.wMinute,st.wSecond);
でstatic char str[256]に格納して
WM_PAINTでTextOutでこの文字列を出力しようとするとVisual C++では文字化けしてしまいます。
borland c/c++コンパイラでコンパイル実行させるとちゃんと時間が表示されます。
これを直すにはVCの何処を弄ったら良いのでしょうか?
301:デフォルトの名無しさん
07/03/04 21:35:44
ひろってきたソース弄ってるのは勉強とは言わない
302:デフォルトの名無しさん
07/03/04 21:38:25
>>300
プロジェクトのプロパティ → 全般 → 文字セット → マルチバイト文字セットを使用する
にしてみる。
または、
wsprintf(str, TEXT("%02d:%02d:%02d"), st.wHour, st.wMinute, st.wSecond);
にしてみる。
303:デフォルトの名無しさん
07/03/04 21:38:50
第一引数にはLPTSTRを渡さないと
304:デフォルトの名無しさん
07/03/04 21:38:58
>>301
十分勉強だろ
305:デフォルトの名無しさん
07/03/04 21:47:06
>>302
「strの宣言をstatic TCHAR str[256];に直す」が抜けている。
これくらい警告やエラーになりそうな気がするんだがな。
常に/W4 /Wp64付けておけ。
306:デフォルトの名無しさん
07/03/04 22:05:01
糞サイトの無料サポートをほいほい引き受けるお人良しがいたとは
307:300
07/03/04 22:14:39
>>302-303,>>305
ありがとうございます、出来ました!
今までbccだと通っていたので気にしていませんでしたが、
VCだと型に対してキビしいのですね。
仮引数の型を教えてくれる機能があるようなのでこれからは気をつけます><
またプロパティで警告のレベル等を変えられるのも初めて知りました。
親切に教えてくださり本当にありがとうございました。
308:デフォルトの名無しさん
07/03/04 22:42:49
>>307
単に VC8(VS2005)は、デフォがUNICODEになってて、BCCは MBCSに
なっているってだけだよ。
BCCでも UNICODEにすると同じようになるはず。
309:デフォルトの名無しさん
07/03/06 11:59:45
Visual c++
で、ソフト作成にチャレンジしようと思うのですが、
Visual C++ 2005 Express Edition ってのが
マイクロソフトからダウンロードできるんだけど、
それでいいのですか。
ここの皆さんが使っているのはこれですよね。
違ったら教えてください。
似たような名前のソフトがたくさんあって
どれがどれなのかさっぱり分かりません。
どうかお願いします。
310:デフォルトの名無しさん
07/03/06 12:04:59
>>309
EEじゃないけど、まあそれだ。
PlatformSDKとかMSDNライブラリとかも一緒にな
311:デフォルトの名無しさん
07/03/06 17:15:26
ツールボックスのList Controlについて質問です。
List Controlに対する処理(後で記述)を関数化しています。
「変数の追加」でList Controlをm_listctrlとしました。
プロパティは、Viewをレポートにしてるだけです。
関数の処理を行うと「説明」のColumn部分が二つになってしまいます。
m_listctrl.DeleteColumn(1);
で消しているのですが、どうしてでしょうか?
Columnをうまく初期化する方法をおしえて下さい。
312:311
07/03/06 17:18:23
m_listctrl.DeleteColumn(0);
m_listctrl.DeleteColumn(1);
m_listctrl.DeleteAllItems();
// 詳細表示のときのコラムのヘッダーの設定
LVCOLUMN myColumn; // 列情報を保持するオブジェクト
myColumn.mask = LVCF_TEXT|LVCF_WIDTH; // pszText,cxを有効にする
RECT myRect;
m_listctrl.GetClientRect(&myRect); // リストビューサイズを得る
myColumn.cx = (myRect.right - myRect.left) / 3; // 横幅の1/3を表題にする
myColumn.pszText = "項目"; // 列タイトル文字列
m_listctrl.InsertColumn(0, &myColumn); // 0列目を確保する
myColumn.cx = (myRect.right - myRect.left)*2 / 3; // 横幅の2/3を説明にする
myColumn.pszText = "説明"; // 列タイトル文字列
m_listctrl.InsertColumn(1, &myColumn); // 1列目を確保する
// リストビューにアイテムを設定する
static LVITEM myITEM; // 初期値をクリアするためにstaticを使用
myITEM.mask = LVIF_TEXT; // pszTextを有効にする
myITEM.iItem = 0; // 項目0
myITEM.iSubItem = 0; // 列0
myITEM.pszText = "リスト1"; // タイトル文字列
m_listctrl.InsertItem(&myITEM); // 設定する
myITEM.mask = LVIF_TEXT; // pszTextを有効にする
myITEM.iSubItem = 1; // 列1
myITEM.pszText = "ああああああ"; // 説明文字列
m_listctrl.SetItem(&myITEM); // 設定する
313:デフォルトの名無しさん
07/03/06 17:32:44
何がどうなってるのかよくわからんが、
(0) で0個目を消したら1個目は前にずれるから
それも消すのはまた(0)じゃないか?
314:311
07/03/06 17:36:17
すみません、追加です。
プロジェクトの内容は
テンプレート:MFCアプリケーション
アプリケーションの種類:ダイアログベース
「ユニコードライブラリの使用する」のチェックを外す
315:311
07/03/06 17:44:06
>>313
レスどうもです。
m_listctrl.DeleteColumn(0);
m_listctrl.DeleteColumn(0);
で、できました!
しかし、なんかもっとスッキリしたやり方はないのかな・・・。
Columnの数を計算して、ループでDeleteColumn(0);とするんでしょうか・・・。
316:デフォルトの名無しさん
07/03/06 17:47:58
今見たけど、ヘルプのDeleteColumn の例はそうなってるな。
317:311
07/03/06 18:06:45
>>316
なるほど、そうなってますね。
勉強になりました。
ありがとうございます。
318:デフォルトの名無しさん
07/03/08 13:22:56
strcat(all,rectform.top);
all(char[]で宣言)にstrcatでフォームの高さ(位置)を入れたいんですが
'.top' : 左のオペランドが 'struct' へのポインタです。'->' を使用してください。
というようなエラーが出てしまいます。
. を -> に変えると強制終了しちゃうし。
何かキャストが要るんかな?
SDKです。
319:デフォルトの名無しさん
07/03/08 13:28:27
はい。
320:デフォルトの名無しさん
07/03/08 13:34:14
キャストが必要と言うより、プログラミングの基礎知識が必要かと思われます。
321:デフォルトの名無しさん
07/03/08 14:21:44
数値と文字列の相互変換からやっとけ
322:デフォルトの名無しさん
07/03/08 14:28:54
キャストもsdkも100年早い
323:デフォルトの名無しさん
07/03/08 16:05:22
char tmp[20];
sprintf(tmp,"%d",rectform->top);
strcat(all,tmp);
324:デフォルトの名無しさん
07/03/08 16:16:14
こう書くのは駄目か?
int len = strlen(all);
_snprintf(tmp + len, sizeof tmp - len, "%d", rectform->top);
325:デフォルトの名無しさん
07/03/08 17:38:26
>>324
ダメすぎ。
326:323
07/03/08 17:42:54
お、俺のはどう・・?
327:324
07/03/08 17:43:09
ほんとだ、323に影響されてallとtmpをごっちゃにしてる
すまん
328:デフォルトの名無しさん
07/03/08 18:00:32
>318が低レベル過ぎてそれに対するフォローしても妥当かどうかの判断しようがない件。
329:デフォルトの名無しさん
07/03/08 18:35:12
エラーが出たらまずキャストって誰に教わったんだか
330:デフォルトの名無しさん
07/03/08 18:38:25
strcat使うべきところかどうかもあやしい
331:デフォルトの名無しさん
07/03/08 19:56:32
どうみても厨房です。本当にありがとうございました。
332:デフォルトの名無しさん
07/03/08 19:59:12
strcatは安全じゃないってばぁちゃん言ってた
333:デフォルトの名無しさん
07/03/08 20:58:50
いっそ全部stringにしちゃえ
334:デフォルトの名無しさん
07/03/08 22:23:41
最適化なしだと意図通りに動いて、最適化ありだとバグが起こるって
よくあることですかね?
335:デフォルトの名無しさん
07/03/08 22:26:20
変数の未初期化
336:デフォルトの名無しさん
07/03/08 22:30:09
volatileが必要な変数とか?
337:デフォルトの名無しさん
07/03/08 23:15:54
マルチスレッドのプログラムで、外部でフラグを立ててスレッドを終了させ
ようとしています。フラグの変数はvolatileをつけてます。
いろいろ試してみましたが、プログラムサイズの最適化だと意図したとおりに
動くようです。でも実行速度の最適化のオプションではだめなようです。
338:デフォルトの名無しさん
07/03/08 23:29:51
>>337
そうならないためのvolatileなのに変だね。
別の原因なのかな。
339:デフォルトの名無しさん
07/03/08 23:57:27
Win32のイベントを使えばいいだろ。
C/C++のvolatileはそもそも対マルチスレッド専用に作られたわけではないから、
マルチスレッド時にvolatileを付けておけば絶対に大丈夫ということはない。
340:デフォルトの名無しさん
07/03/09 00:09:12
この使い方が駄目なら、volatileの存在意義が無いんじゃね?
とりあえず、プログラムをupしる。
341:デフォルトの名無しさん
07/03/09 00:23:26
じゃあ~volatileはなんなんだよ~
最適化による期待はずれの動作は奥が深そうだな。
volatileでは解決しないことの原因なら
勉強のためにも
というかマルチスレッドを使う俺としてはぜひ知りたいところだ。
342:デフォルトの名無しさん
07/03/09 01:10:07
とりあえず重要そうなとこだけ抜粋してみました。
ひょっとかしたら根本的な間違いがあるかもしれませんが。
// グローバル変数
volatile bool exitflag;
int WINAPI WinMain()
{
(中略)
hThread = reinterpret_cast<HANDLE>(_beginthread(childThread, 0, NULL));
(中略)
// 終了処理
exitflag = true;
WaitForSingleObject(hThread, INFINITE);
return 0;
}
void childThread(void *arg)
{
(省略)
while(!exitflag){
// いろいろな処理
}
if(exitflag)
return;
(省略)
while(!exitflag){
// いろいろな処理
}
return;
}
最適化なし、プログラムサイズ最適化はスレッドが終了しますが、
実行速度最適化にするとスレッドが終了しないようです。
343:デフォルトの名無しさん
07/03/09 09:33:46
とりあえず_beginthreadexに変えてみる、とか。
_beginthreadは、CloseHandleが生成されたスレッドで処理されるので、
スレッド終了時点で、返されたハンドルの保証ができなくなる。
運が悪いと、別のスレッドを指してしまう可能性もある。
344:デフォルトの名無しさん
07/03/09 18:31:44
main.cpp
main.h
func.cpp
func.h
・・・
という感じでソースを書いてるんですが、
main.cppの方でfunc.cppの関数を呼び出す際、引数に構造体のアドレスを渡して、関数内でその構造体の中身を変更、としたいんです。
この場合構造体の型と構造体の宣言はどこにどういう風にすればいいんでしょうか。
externを使ったりしてやってみてるんですがどうもエラーがでてしまいます・・・
345:デフォルトの名無しさん
07/03/09 18:42:04
手取り足取り教えてくれる親切な人がいるといいね
346:デフォルトの名無しさん
07/03/09 18:45:49
>>344
func.cpp の関数や構造体をfunc.hで宣言して両方でinclude
つーかcppなのにそれでいいのか、、って気はするが
もうちょっと他のソースやIDEの吐き出したソース参考にしてくれ。
あんまり初歩的だと>>345 みたいになる
347:デフォルトの名無しさん
07/03/09 19:02:01
すみません,伺わせてください.
Windowsフォームで何らかの処理をした際に出現する
フォームの多重起動を防ぐ方法についてなんですが.
グローバルな領域にフォームのオブジェクトを持たせて,
一度目にnew生成,終了時にnullを代入することで,
nullチェックを行えばできるのですが.
グローバル領域を使用せずにする方法があったら教えてください.
お願いします.
348:344
07/03/09 19:08:30
>>346
なんとかなりました。
まだCしか使えないのでこんな形になっています。
C言語質問の方で聞くべき事だったかもしれません。
回答ありがとうございました。
349:デフォルトの名無しさん
07/03/09 19:35:54
一応__beginthreadexに書き換えてみました。しかし駄目でした。
最適化段階で終了条件が消えてしまっているような。。
350:デフォルトの名無しさん
07/03/09 20:08:26
>>342
exitflagをlong型にしてtrueの代入の代わりにInterlockedIncrementを使ったらどう?
351:デフォルトの名無しさん
07/03/09 21:15:32
>>350
試してみました。でも駄目でした。やっぱり速度最適化が駄目です。
volatile修飾ちゃんと利いてるのかな。。それとも俺の書き方が悪いのかorz
352:デフォルトの名無しさん
07/03/09 21:23:19
回っているときにブレークしてみたらどうなる?
353:デフォルトの名無しさん
07/03/09 21:39:55
動作中にブレークポイントを設定してみたら、最適化なしのときには
|if(exitflag)
●| return;
こんな感じで設定できたのですが、
最適化コンパイル後の動作中だとreturnの横クリックしても数行後の
処理に移動してしまいます。
説明が悪くて、わかりにくかったらすいません。
354:デフォルトの名無しさん
07/03/09 21:41:10
>>353
最適化するとソースの行とプログラムコードが一致しないからな
ステップ実行がへんになることある。
355:デフォルトの名無しさん
07/03/09 22:04:57
ダイアログアプリケーションを作っていますが、エディットボックスなどの
コントロールの配置が終わるのはいつでしょうか?
最初の表示が終わった契機でコントロールの表示位置を取得しようと
OnInitDialog() でコントロールの座標を調べてみましたが
なぜか位置が(0,0)となってしまいます。
コントロールの表示位置を取得するのに最適な契機を教えてください。
356:デフォルトの名無しさん
07/03/09 22:06:54
OnInitDialogで設定した0秒のSetTimerが到着する頃には出来てるんじゃないの。
357:デフォルトの名無しさん
07/03/09 22:29:24
あとから動的にコントロール追加とか普通にやるから
そのタイミングでいいんじゃないかな
358:355
07/03/09 22:41:51
>>356
確かに OnInitDialog() 内でタイマをセットするやり方もありますね
もっとスマートな方法がなければこれしかないですね
>>357
「そのタイミング」とは OnInitDialog() で、ということですか?
やりたいのは、ダイアログエディタで配置したコントロールの座標を取得することです。
コントロールは動かさないので、一回だけ座標を取得できればいいのです。
359:デフォルトの名無しさん
07/03/09 22:46:30
>>355
OnInitDialog() でコントロールの座標を調べるなんておれやったことあるけどなあ。
おかしいなあ。
360:355
07/03/09 23:01:51
済みません。
私の初歩的なミスっぽいです。
コントロールの座標を GetClientRect() で取ってたんですが
左上が (0,0) になるので取れてないと思っていました。
OnInitDialog() で GetWindowRect() を発行してみたら
どうやらダイアログ上の座標が取れたようです。
もうちょっと調べてみます。
361:355
07/03/10 02:03:43
OnInitDialog() にて
CRect rect;
CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT_HOGEHOGE);
pEdit->GetWindowRect(&rect);
ScreenToClient(&rect);
でダイアログ相対の座標が取れました。
大変お騒がせ致しました。
362:デフォルトの名無しさん
07/03/10 05:18:31
>>351
駄目っていうのはスレッドが終了しないの? or デバッガ上でのトレースで
returnの行が飛ばされるの?後者ならあまり気にする必要が無い気がする。
前の方の書き込みを見る限り前者なのかな....
XP上のVC6 & VC2005で試してみたけどvolatile longとInterlockedIncrement
の組み合わせでスレッドは終了してたよ。試行回数各10回ほど。
_beginthreadでマルチスレッドやったのは今日がはじめてだけど、MFCでやる場合は
同期オブジェクトを使って終了を通知してる。APIでいうとCreateEventなど。
363:362
07/03/10 05:24:03
追記
最適化は実行速度
364:デフォルトの名無しさん
07/03/10 10:18:30
>>362
スレッドが終了しないってことです。
ってことは書き方が悪いのかなー。。
365:デフォルトの名無しさん
07/03/10 10:48:13
>>361
本当は、ScreenToClientよりMapWindowPointsがお勧め。
まあ、RTL(RightToLeft)環境で動かすようなことは、まずないだろうけど。
MFCのScreenToClient実装は、過去互換の関係で放置してる予感。
あと、GetDlgItemで取るより、メンバ変数に割り当てた方がいい。
>>364
アセンブリコード吐き出させて、頑張って読む。
366:デフォルトの名無しさん
07/03/10 23:02:34
visualC++でプログラム作れるように
なるには、C言語をまず勉強しないといけない
と聞いたのですが、本当ですか?
あとその次にポインタというのを勉強して
それからVisualC++の本買った方が良いというのも
本当でしょうか?
なんか知らないけどどうせならVisualC++でソフトを作ってみたいです。
憧れみたいのがあります。
367:デフォルトの名無しさん
07/03/10 23:15:47
小説を書くにはまず日本語を勉強しないといけないのですか?
みたいな質問だな
368:デフォルトの名無しさん
07/03/10 23:31:20
>>366
C++はC言語+アルファ(語弊あるけど)。
だからC言語を学ぶことは有効だけど
いけないっていうこともないだろうな。
C++って難しい部分もあるから
簡単なところからはじめたほうがいいっていう意味で
先にC言語を学べってことになってしまう。
ポインタは壁にぶつかるやつが多いからな。
ポインタがわからないやつにC++を使わせるのは危険ともいえる。
そもそもC言語を使わせるのも危険だけど
ポインタを理解してからC++をはじめたほうがいいな。
369:デフォルトの名無しさん
07/03/10 23:32:27
>>366
きにすんな。
作っちゃいなよ。
壁にぶつかっちゃいなよ。
370:デフォルトの名無しさん
07/03/10 23:39:58
Visual C++ =
CとC++などのコンパイラ(独自拡張有) +
CとC++の標準ライブラリ(独自拡張有) +
Platform SDK(ただしExpressは別) +
MFCやATLなどMS製のライブラリ +
IDE(デバッガこみ) +
MSDN ライブラリ +
各種ツール
およそこんな感じ
371:デフォルトの名無しさん
07/03/10 23:45:37
>>366
コンパイラの使い方とかデバッグの仕方とかは
ツールによって異なるからな。
バージョンによってメニューとかも多少変わるぞ。
自力で判るとか
友達に手取り足取り教えてもらえるとか
ヘルプをみながら判るやつなら不要だが
初心者はバージョンも合っている解説書的本があったほうがいいな。
372:デフォルトの名無しさん
07/03/12 00:07:58
すまんが聞きたい事がある。フリーソフトでアナログ時計を作って
ベクターに公開しているのだが、ウィンドウズの時計部門の人気順で20位以内に
入っている。オレのプログラミングのレベルはどの位か評価してほしいのだが、頼む。
自分ではVisual C++のレベルが初級を脱した位だと思っているのだが。
373:デフォルトの名無しさん
07/03/12 00:13:54
そんなことわかるわけがない。
良いプログラムが書けるかどうかと人気のあるプログラムが書けるかどうかというのは別問題。
374:デフォルトの名無しさん
07/03/12 00:17:06
人気とプログラミングレベルに相関関係があると思ってるん?
375:デフォルトの名無しさん
07/03/12 02:15:16
ソースアップしてリンク張ってくれれば見るよ
ここだと辛口な意見が多そうだが
376:デフォルトの名無しさん
07/03/12 05:25:50
プログラミングのレベルと人気は必ずしも関係ないでそ。
自分は、どの程度的確に言語仕様を理解しているか、とか、
プロジェクトに適した方法で開発できるか、とか、
そういうことだと思う。
ただ、人気のあるソフトを作れるってことは
良いクリエイターなんじゃないかな。
なんていうかな、Flashとか使えるWebDesignerが、
必ずしもプログラムの技術があるとは限らないっていうか。
377:デフォルトの名無しさん
07/03/12 06:20:07
サイズのでかいのが結構上位に入ってるな
常駐系はサイズが小さいのが常識だと思ってたけど時代は変わっていく
378:デフォルトの名無しさん
07/03/12 17:08:25
非矩形ウィンドウ
システムトレイへの登録
レジストリ操作
多重起動の防止
ぐらい実装していれば中級ではないか
379:デフォルトの名無しさん
07/03/12 19:17:13
コピペでも作れるだろ。そのくらい
380:デフォルトの名無しさん
07/03/12 19:27:50
通信関連のマルチスレッドと低レベルAPI
コピペでやると一発で落ちる
381:デフォルトの名無しさん
07/03/12 19:37:45
非矩形ウィンドウは時計の初歩
382:デフォルトの名無しさん
07/03/13 06:52:32
非矩形ウインドウってまだRegion使ってるの?
383:デフォルトの名無しさん
07/03/13 07:20:51
描画するだけならカラーキー設定して切り抜く
クリック範囲とかなら、リージョン使わないでどうやってるん?
384:デフォルトの名無しさん
07/03/14 17:51:20
画像の処理を行うクラスを作ろうとしています。
メモリDCを確保してビットマップの操作等を行うのですが
その場合は CWnd クラスの派生クラスとする必要があるのでしょうか?
385:デフォルトの名無しさん
07/03/14 18:00:51
ウィンドウハンドルが必要ならメンバに持ってればいいわけだから
別に継承する必要ないだろ
386:デフォルトの名無しさん
07/03/14 18:54:06
DCならCDCが思い浮かびそうなもの
387:384
07/03/14 21:31:57
そもそもDCがよくわかっていません。
メモリDCを確保する際に、CreateCompatibleDC()の引数に
メイン側でGetDC()したポインタを渡せばうまくいくのですが
そうしないでこのクラスだけでCreateCompatibleDC()するには
何を渡せばいいのかわかりません。
NULL だと真っ黒になってしまって・・・
388:デフォルトの名無しさん
07/03/14 21:47:18
なんだ既存のクラスがよくわからない人が作ろうとしてるのか
それだったら1から自分で作れ
389:デフォルトの名無しさん
07/03/14 21:49:35
>>387
CreateCompatibleDCに渡すべきデバイスコンテキストのハンドルを
引数に受け取ればいいだろ。
390:デフォルトの名無しさん
07/03/14 21:59:54
>>389
class GAZOU
{
void Gazou(CDC* pDC)
{
CDC memDC = CreateCompatibleDC(pDC);
・・・
}
}
ダイアログ等
Gazou gazou(GetDC());
gazou.hogehoge();
という感じでしょうか?
今の処理はこの通りで、うまく動作しているのですが
これ以外のやり方(CDCのポインタを渡さない)はないでしょうか?
GAZOUクラス内だけで処理できないものかと思っています。
391:デフォルトの名無しさん
07/03/14 22:06:12
>>390
NULLかデスクトップのウィンドウハンドルでDCを用意し
そのDCにコンパチブルなメモリDCを作成するのはどうかな。
出来るかどうか俺は保障しないが。
DCなしでビットマップを操作したいところだがWindowsがそういう仕組みなんで仕方ない。
DCってのは画面用とかプリンタ用とかそれらのコンパチブルなメモリDCなどがあって
ペンとかブラシとかを指定して対象物に描画するときに必須という面倒な代物だな。
392:384
07/03/14 22:25:44
>>391
画像処理クラスにおいて
CWnd* pDesktop = CWnd::GetDesktopWindow();
CDC* pDC = pDesktop->GetDC();
CDC memDC = CreateCompatibleDC(pDC);
・・・
と記述してうまく動作しました。
どうもありがとうございました。
レス頂いた他の皆さんも、ありがとうございました。
よく理解していないため、変な質問で済みませんでした。
393:デフォルトの名無しさん
07/03/14 23:12:32
スクリーン互換のDCなら、CreateCompatibleDCは引数NULLでOK。
あと、ウィンドウからDCを取るときは、必要に応じてCWindowDCかCClientDC使うと楽。
394:384
07/03/15 00:20:23
>>393
ありがとうございます。
CDC memDC;
CBitmap memBmp;
CreateCompatibleDC(NULL);
memBmp.CreateCompatibleBitmap(&memDC, width, height);
memDC.SelectObject(&memBmp);
としてみましたが、どうもモノクロになってしまうようです。
使い方が間違っているのでしょうか?
395:デフォルトの名無しさん
07/03/15 01:57:20
CreateCompatibleBitmapにはmemDCじゃなく392のpDCを渡すのだ。
MSDN - CBitmap::CreateCompatibleBitmapの解説を参照
396:デフォルトの名無しさん
07/03/15 01:59:43
それ以前にCreateCompatibleDC(NULL)の左側が抜けてるな
397:デフォルトの名無しさん
07/03/15 09:51:10
デフォルトでは、素のDCにはモノクロの1x1のビットマップが選択されている
それと互換のビットマップを作ったらモノクロになるのは当然
398:384
07/03/15 22:41:43
>>395-397
なるほど 何となくわかりました。
皆さんのアドバイスを基に、以下のコードに落ち着きました。
CWnd* pDesktop = CWnd::GetDesktopWindow();
CDC* pDC = pDesktop->GetDC();
CDC memDC;
memDC.CreateCompatibleDC(NULL);
CBitmap memBmp;
memBmp.CreateCompatibleBitmap(pDC, width, height);
memDC.SelectObject(&memBmp);
399:デフォルトの名無しさん
07/03/18 15:42:26
【ネガティブ派遣根性チェック】
3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、いつまでも派遣を続けることが大切だ
400:初心者以前です。
07/03/18 23:46:37
すみません。教えて下さい。
VisualC++2005ExpressEditionをMSのサイトから
DLして使用したいと考えているのですが、
ズバリ、フリーのデーターベースであるFirebirdと
繋げられるのでしょうか?
やはり製品版でないと無理なのでしょうか?
自分は、単純に初心者向けプログラムである。
CDやDVDの在庫管理アプリを作りたいだけなんですが、
自分の労力以外は、極力フリーで作りたいと思っています。
可能でしょうか?
宜しくお願いします。
401:デフォルトの名無しさん
07/03/19 00:02:40
繋げる意味がよく分からんが、実質フォーマットさえ分かってしまえば作れるんじゃないの?
402:400
07/03/19 00:19:01
>>401
言葉足らずで、すみません。
ただ単に、フリーのDB(FireBird)に基本テーブルやら
履歴テーブルやらを作成して、
そのDBの記録を読み書きさせたいだけです。
403:デフォルトの名無しさん
07/03/19 00:21:43
製品でも繋がるかどうか知らない。
MicrosoftからしてみればフリーのFirebird用の
ライブラリを用意する義理なんてないでしょうし(推測)。
Firebird用のADOがあれば繋がるんじゃい(推測)?
ADO.NETじゃないよ。
あるいはODBC。
実際はDBMS固有の色々あるからすんなり行くか判らんけどね。
404:デフォルトの名無しさん
07/03/19 00:23:51
Visual C++ 2005 ExpressだとATLとかないんだっけ?
ADOはActiveX(COM)だからちょっと大変かもな。
405:400
07/03/19 02:24:40
>>403,404様
本当に、レスありがとうございます。
そうですか、難しいですか・・・。
やはり、SQLServerExpressを使用しないといけない見たいですね。
こちらも、フリーなのですが4G制限等があるからイヤだったんですよねぇ。
実は、図書館レベルとは言わないが、資料がたくさんあるので4Gで収まるか
自信ないんですよねぇ。何件分くらい入るもんでしょうか?
はぁ・・・。
でも、SQLServerExpresとVisualC++2005Expressとの組み合わせなら、
初心者でも簡単にDBアプリ(資料メディア管理アプリ)出来ますでしょうか?
又、DBアプリに関してわかり易いサイトって、MS以外にありますか?
よろしくお願いします。
ちなみに、ググッても分かりませんでした。(検索が悪いとは思いますが)
406:デフォルトの名無しさん
07/03/19 21:27:13
最初は誰でも初心者だけど
それを免罪符にして疑問を○投げって姿勢は良くないお
407:デフォルトの名無しさん
07/03/19 21:35:11
もうSQLiteでいいんじゃね?
408:400
07/03/19 21:58:57
>>406
その通りですね。
>>ALL
取り合えず、初心者なんだからDBは置いといて
C++の勉強から先に始めたいと思います。
ある程度、出来てからまた質問させて頂きたいと思います。
みなさまレスありがとうございまいした。
409:日付の罠
07/03/20 02:35:56
↑にハマっています。
すみません。
単純な日付計算が出来なくて困っています。
dateTimePicker1の日付から、dateTimePicker2の日付の差である。
日付をラベルに出力する方法をお願いいたします。
自分の想像では、
日付変数の宣言
日付変数=dateTimePicker2-dateTimePicker1
ラベル.Text=型変換(日付変数)
だと想像するのですが、HELPにも乗っていません。
ご教授お願いします。
410:デフォルトの名無しさん
07/03/20 03:07:14
日付に罠が仕掛けられていたり、使用法がHELPにのっていないような開発ツールは
使わないほうが良いと思いますよ。
411:デフォルトの名無しさん
07/03/20 03:13:26
dateTimePicker って VB?
412:デフォルトの名無しさん
07/03/20 03:15:14
dotnet
413:デフォルトの名無しさん
07/03/20 03:25:38
>>409
それはC++/CLIかな?それともMscomct2.ocx?
414:デフォルトの名無しさん
07/03/20 03:38:16
C++とC++/CLIの区別がつかず、知らずににC++/CLIを使ってる初心者が増えている。
これはMSの罠だな。
415:409
07/03/20 10:52:25
>>413
レスありがとうございます。
Microsoft Visual C++ 2005 Express Editionを使用しています。
只単に、カレンダー1とカレンダー2との差を表示したいだけです。
例:”期間は、Y年M月D日です。”または、”日数のみ計算でXXX日です。”
C++/CLIが何かさえ分らない自分ですが、よろしくお願いします。
>>414
そうなんですよ。
HELPが分りにくくて・・・理解しにくいし検索もHITしないんです。
なんか、単純計算使用例みたいなのも載ってないっぽいです。
もちろん、頭が悪い自分が一番悪いだろうけどね。
416:デフォルトの名無しさん
07/03/20 11:21:12
>>415
DateTimePickerで検索したら、値を取り出すサンプルが出てきたぞ。
値を取り出すとDateTime型のようだから、DateTime型のメソッドがそのまま利用できる筈なんだが。
417:416
07/03/20 11:23:26
あ、検索したのはMSDNね。
418:409
07/03/20 18:49:03
>>417
レスありがとうです。
でも、理解出来ませんでした。(T_T)
何がどうなっているのやら・・・。
まず、>>409の1行目の予定の
日付変数の宣言方法さえ分りません。
Int型は、市販の書籍に載ってたんですけどねぇ。
お手数ですが、簡単なソースにコメントを書いて頂ければ幸いです。
教えて頂いたサイトから、
「プログラミング チャレンジ スクエア」って言うのも
見つけたんですが、C++は無いのです。
あんな感じのサイトのVisualC++2005ExpressのHPは無いんでしょうか。
宜しくお願いします。
419:デフォルトの名無しさん
07/03/20 18:57:47
そういうやつのためにC#があるんだから素直にそっち使っとけ
420:デフォルトの名無しさん
07/03/20 18:58:45
最早C++/CLIはC++じゃない(と言い切ってもいい位の)存在だから、
C++をやりたいならGUIは一旦横に置くべきだし、GUIをやりたいならC#に乗り換えるべき。
421:デフォルトの名無しさん
07/03/20 21:09:00
2つの日時の値を引き算すると、時間間隔を表すTimeSpan型が返る。
TimeSpan span = dateTimePicker1->Value - dateTimePicker2->Value;
でそのTimeSpanから日の部分だけを取り出し文字列に変換してラベルにセット
label1->Text = span.Days.ToString();
最初はMSDNが理解しにくいのはわかるけど、あれを読めるようにならないと進歩はないよ。
422:409
07/03/21 10:44:52
>>421
ありがとうございます!私にも分りやすいです。
そういう答えが欲しかったんです。m(_ _)m
本当に感謝しています。私にとっては貴方は神です。
>>419,>>420さんの忠告もありがとうございます。
自分が求めているのがC++ではなくC#だと気付かされました。
何より、またこのスレで>>421神に頼るのは心苦しく思います。
C++は、置いといてC#をダウンロードして試してみます。
423:デフォルトの名無しさん
07/03/22 21:29:05
質問があります。
あるデータベース的な2次元vector vecがあって、
性質の違う2つのクラスA,Bからそのvecを参照したり、書き換えたり
したいのですが、そのvecはどんなクラスにしてA,Bからどんな風に
使えばよろしいのでしょうか?
考えた範囲ではvecを静的データメンバにして参照するという方法ですが、
何か「vecはA,Bに含まれるよー」という雰囲気が出せないので他に方法が
あるかのかなぁと思っています。
424:423
07/03/22 21:42:50
追加で質問です。教えてクンですみません・・。
2次元vector(大きさは確定)をデータメンバに持つクラスにおいて、
どうすれば綺麗に初期化すればよいのか教えてください。
考えたのは、以下のとおりです。
Class hogeData{
std::vector< std::vector<char*> > data;
hogeData(){
data.resize(I);
for(int i=0; i<I ; i++){
data[i].resize(J);
}
// ...dataに代入など
}
}
気分的には std::vector< std::vector<char*> > data(I,J);
というように一発で初期化したいのですが、クラスのメンバだと
そうもいかず・・。
425:デフォルトの名無しさん
07/03/22 21:47:26
boost::numeric::ublas::matrixとか使った方が良くね?
426:423
07/03/22 22:14:19
>>425 返信ありがとうございます!そんなのもあるんですね。
ぜひ勉強してみます。今ちょっと調べてみたのですが、
vecに対してよく使うことになると思われるsortに関しては、
どうもSTLのvectorの方が速そうです....
URLリンク(archives.free.net.ph)
427:デフォルトの名無しさん
07/03/23 22:31:53
Linux環境でgetopt()を使うためにunistd.hをincludeしているソースを、
VisualC++でコンパイルしたところ、unistd.hが見つからないと言われました。
代替になるインクルードファイルはありますでしょうか?
よろしくお願いします。
428:デフォルトの名無しさん
07/03/23 22:40:00
ない
429:デフォルトの名無しさん
07/03/24 00:38:21
無いんですか・・ありがとうございます
430:デフォルトの名無しさん
07/03/24 04:52:12
ほんとかよ、と思ってしまう回答だがはて…
431:デフォルトの名無しさん
07/03/24 06:59:30
getopt()があればどれだけ楽か……
432:デフォルトの名無しさん
07/03/24 08:42:42
CUI環境の話だったらC++スレとかでやってほしい。
激しくどうでもいい
433:デフォルトの名無しさん
07/03/24 08:51:10
GUI環境しか使えない香具師は只単に読み飛ばすということさえ出来ないらしい。困ったもんだ。
434:デフォルトの名無しさん
07/03/24 08:54:59
腐るぐらいスレがあるのにわざわざここで質問するやつの気が知れない。
435:デフォルトの名無しさん
07/03/24 08:57:28
VCだからだろ。
436:デフォルトの名無しさん
07/03/24 09:02:18
Linux依存→依存なしの移植だろ
VC関係ない
437:デフォルトの名無しさん
07/03/24 09:33:42
getopt()だからLinux依存じゃないぞ。VCがPOSIX準拠してないのが問題なんだ。
438:デフォルトの名無しさん
07/03/24 09:35:20
>unistd.hをincludeしているソースを
uniって何の略?
439:デフォルトの名無しさん
07/03/24 09:40:06
>>438
少なくともLinuxの略ではないな。
440:デフォルトの名無しさん
07/03/24 09:42:19
初心者だったら基本やってりゃいいんだよ
実力もないのにややこしいことやろうとすんな
1 初心者には無理だから素直にあきらめる
2 初心者卒業してからやる
3 教えてくれるまで暴れる
441:デフォルトの名無しさん
07/03/24 09:51:59
と、実力もないのに初心者を脱出したと思い込んでいる>432=434=436=438=440が申しております。
442:デフォルトの名無しさん
07/03/24 09:57:07
>>439
unix standardって感じか? システムコール系の関数が詰まってるね。
443:デフォルトの名無しさん
07/03/24 13:49:52
自分が答えられそうにもないCUI系の質問が来るだけで
火病起こす奴ってなんなの?
444:デフォルトの名無しさん
07/03/24 21:47:01
openFileDialogのOKボタンが押されると、c_printfuncにファイル名を渡して
呼び出し、その関数の内部でファイル名を標準出力したいです。
以下のようにしているのですか何も出力されません。
どこが間違ってるのでしょうか・・?
--------------------
[openFileDialogのOKボタン押された時]
private: System::Void openFileDialog1_FileOk(System::Object^ sender,
System::ComponentModel::CancelEventArgs^ e) {
String^ fname;
if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
fname = openFileDialog1->FileName;
c_printfunc(fname);
}
}
----------------------
[c_printfunc.cpp]
#include "stdafx.h"
#include <stdio.h>
int c_printfunc(char* fname) {
printf("%s\n", fname);
return 0;
}
445:デフォルトの名無しさん
07/03/24 22:03:30
すみません今リブルドしたところ、エラーが出ていました
1>f:\documents and settings\(省略)\Form1.h(485) : error C3861: 'c_printfunc': 識別子が見つかりませんでした
446:デフォルトの名無しさん
07/03/24 22:17:51
なんどもすみません
openFileDialogの中からどうやってc_printfuncを認識させるのでしょうか?
今日始めたばかりでわけわかめ状態です;;
447:デフォルトの名無しさん
07/03/24 23:11:19
質問とは関係ないけど
そういえばアウトプットウインドウにデバッグストリング出力する機能があったな
デバッガばっかり使ってて存在自体を忘れてた
448:デフォルトの名無しさん
07/03/25 00:48:25
だからCUIというかソースレベルの質問はスレ違いだって
過去スレ見ればわかるだろ
ここはVisualCの機能や使い方を答える程度のレベルのスレなの
449:デフォルトの名無しさん
07/03/25 00:56:51
>>1も読めない初心者未満が何か言ってる
450:446
07/03/25 10:16:58
関数プロトタイプを記述することで自己解決しました
お騒がせしました
451:デフォルトの名無しさん
07/03/25 14:09:16
ダウンロードするのに住所や電話番号を登録するようですが、
何か連絡が来ることってあるんでしょうか?
452:デフォルトの名無しさん
07/03/26 10:22:46
無いよ
453:デフォルトの名無しさん
07/03/30 01:52:44
#include <stdio.h>
main()
{
printf("文字表示のテスト");
}
これを実行した時に、F5(デバッグあり)で実行すると
すぐにウィンドウが閉じてしまいますが
ctrl+F5(デバッグなし)で実行すると、ウィンドウが表示されたままに
なるのは何故なんでしょうか。
また、DOS窓でなく、通常のウィンドウへの描画は
どのような手順で行うのが簡潔でしょうか。
454:453
07/03/30 01:56:21
環境はVC++8.0ですが、学習のためにCの記述をしています。
また、8.0以前のサンプルを開こうとした時に、変換を行った後
そのソリューションを実行するにはどうすればいいでしょうか。
455:デフォルトの名無しさん
07/03/30 04:26:58
#include <conio.h>
を追加して
}の前にgetch();追加で
キー一回押すまで進行停止が出来るよ
456:デフォルトの名無しさん
07/03/30 06:19:55
>453
裏で別のプログラムが面倒みてくれてる
457:デフォルトの名無しさん
07/03/30 07:36:32
>>455
cinのがよくね?
458:453
07/03/30 07:55:11
すみません、自分で読み直してみて、一度に質問を書き込みすぎました。
でも、皆さん親切に教えていただけるので、とても嬉しいです(;;)
459:デフォルトの名無しさん
07/03/30 09:04:24
微妙に回答のポイントがずれてる希ガス
460:デフォルトの名無しさん
07/03/30 10:36:22
じゃ、簡潔に。
>ctrl+F5(デバッグなし)で実行すると、ウィンドウが表示されたままに
>なるのは何故なんでしょうか。
仕様です。
>また、DOS窓でなく、通常のウィンドウへの描画は
>どのような手順で行うのが簡潔でしょうか。
WinAPIを使えばできますが、その為には先ず一通りCの知識が必要になります。
461:デフォルトの名無しさん
07/03/30 10:40:20
EEなら該当スレみつけてSDKインストール
462:デフォルトの名無しさん
07/03/30 10:50:54
>また、DOS窓でなく、通常のウィンドウへの描画は
>どのような手順で行うのが簡潔でしょうか。
まとめると
(1)MicrosoftのサイトからPlatformSDKをダウンロードしてインストール
(これでWin32APIを使うことができる)
(2)ウィンドウ作成
(Win32APIはmainの代わりにWinMainを使う)
(3)ウィンドウに文字を出力
463:デフォルトの名無しさん
07/03/30 11:07:35
>通常のウィンドウへの描画は...
通常のウィンドウをどうやって作るかにもよるんだけど
1. Win32(C or C++)
基本だけど全てを自分でやる必要がある。
2. MFCアプリ(C++)
MFCが多くのことをやってくれるけど、構造の理解に時間がかかる。
3. CLRのWindowsフォームアプリ(C++/CLI)
上の二つとは異質だけど初心者には楽。いわゆるドットネット。
他にも選択肢はあるけど、普通はこの3択。誘導される前のスレッドを見る限り
VC8EEなんだろうな。その場合2は選択できない。1を選ぶなら>>462で。
プロジェクトの変換については情報不足杉。
464:デフォルトの名無しさん
07/03/30 11:27:54
>>463
MFCアプリ(C++)、CLR(C++/CLI)になってるけど、
この二つは、C言語形式で書けないの?
勉強中でよくわからない・・・
465:デフォルトの名無しさん
07/03/30 11:40:54
MFCの場合、自分のロジックはCと互換性のある書き方もできるけど、
WindowsとのI/FはC++でないとコンパイルできない。
CLRの場合、最早Cと互換性を持たせることが無意味。
何故なら、文字列から日付け処理からメモリ管理から何もかも流儀が全て違う。
466:453
07/03/30 16:51:55
ありがとうございます、通常のウィンドウへの描画は
WindowsのAPIを使ってみることにします。
まだ、ポインタもわかってないので(というか勉強がまだなので)
地道にCの言語仕様を学んだ後で、SDK取りに行きます。
バージョンの古いサンプルが開けない、というのは
恐らくツールの使い方がわかっていないだけだと思うので
もう少し自分で頑張ります。
467:デフォルトの名無しさん
07/03/30 23:25:52
そのレベルなら1年は覚悟した方がいいよ
468:453
07/03/31 00:20:45
かかるかもしれないですね。でも、正直そこまで時間はかけたくありません。
地道にひとつずつ習得する以外方法はないと思いますが、
例えば、「ブロック崩し」を作りたい、という目的がある、とした場合に
どの道筋が適切かご指導いただけるとありがたいです。
ちなみにお察しの通り環境はVC8のEEです。
469:デフォルトの名無しさん
07/03/31 00:25:11
C#でもやれば?
Javaだと某有名プログラムがあることだし、フラッシュも最近増えてきたけど。
470:デフォルトの名無しさん
07/03/31 16:50:42
別の環境で作ったソースをVCで編集しなきゃいけないんですが、
フォルダ構成を元のままVCで作業するにはどうしたらいいでしょうか?
新規プロジェクトを作ってみたら
ソースもヘッダも全部同じフォルダにできてしまうみたいで・・・
フォルダの設定とかありませんか?
471:デフォルトの名無しさん
07/03/31 17:25:30
好きなようにできるだろ
472:デフォルトの名無しさん
07/03/31 17:59:47
できてしまう、って何でソースやヘッダを作る必要があるんだ?
もうソースはあるんだろ?
473:デフォルトの名無しさん
07/04/01 12:46:41
VC6.0でWIN32API(SDK?)で開発しています
エディットコントロールで文字列を追加したときに、自動でスクロール
させたいのですがうまくいきません(文字列の追加はできてます)。
CreateWindowExで指定しているウィンドウスタイルは次の通りです。
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL |
ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE | ES_READONLY,
文字列周りは、このようにしています。
SetWindowText(hEdit, "起動\r\n(^-^)\r\n");
SendMessage(hEdit, EM_SETSEL, 0, -1);
SendMessage(hEdit, EM_SETSEL, -1, -1);
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)"(@-@)\r\n");
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)"(T-T)\r\n");
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)"orz\r\n");
SendMessage(hEdit, EM_SCROLLCARET, 0, 0);
ネットで調べたところ、ES_AUTOVSCROLLやEM_SCROLLCARETがあれば勝手
にやってくれそうなんですが…
どうすれば自動でスクロールし追加した文字列部分が表示されるように
なるのか、教えて下さい。
474:デフォルトの名無しさん
07/04/01 14:03:10
EM_SCROLLCARET
これでわざわざスクロールしてるような気がする