[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 07/09 05:34 / Filesize : 231 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build59



1 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:39:56 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-5くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで


132 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:30:40 ]
124みたいな奴がCでCOMなんかに手を出すとリークしまくりの糞プログラムにしかならんだろうという事だ

133 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:35:16 ]
なるほど

134 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:58:01 ]
>>110
一般公開されていないよ、MSのZIP解凍/圧縮は。
APIもCOMも。

135 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:04:43 ]
このスレでいいのかどうか悩んだんですが
『Advenced Windows』を読む上で、Win32APIやOSの知識は前提になっているのでしょうか?
C/C++は一通りやったけどWindowsプログラムは未経験という段階の人間が、
>>1にある言葉を借りると「APIフックなど高度な事」が最終目標だという場合、
先に『プログラミングWindwos』などを読んでおくべきなのかどうかと思いまして。

136 名前:デフォルトの名無しさん [2007/11/16(金) 00:27:30 ]
www.kumei.ne.jp/c_lang/sdk4/sdk_346.htm

上記のプログラムでCreateWindowExにてウィンドウスタイルを
WS_OVERLAPPEDWINDOW としているのを
WS_POPUP に置き換えるとウインドウが表示されなくなってしまうのですがどうしてでしょうか?
枠線が消えるのはわかりますが、表示されていたはずのピットマップまで消えてしまうので
納得できませんでした。

よろしくお願いします。

137 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:31:11 ]
基礎的なAPIの知識は必要。
最終的にAdvenced Windowsを買う「べき」なのは間違いないと思うけど入門には向かない。
4倍ぐらいの量と金額のEffectiveC++ or STLを入門として買うようなもの。

個人的には APIで学ぶWindows徹底理解 ちゅうのが激しくオススメ

138 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:31:46 ]
どこでエラーが出てるか調べろ

139 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:33:44 ]
沢山のソースコードを読むほうがためになると思う。

140 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:53:01 ]
>>139に同意



141 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:07:23 ]
>>137-139
アンカーつけて喋れw

142 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:18:33 ]
はい

143 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:42:04 ]
いいえ

144 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:47:24 ]
はいえ

145 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 02:14:27 ]
ないあるよ

146 名前:135 mailto:sage [2007/11/16(金) 02:17:40 ]
>>137
分かりやすい解説、ありがとうございました。
おすすめいただいた書籍、目次見てたらおもしろそうなので、
是非目を通してみたいと思います。

147 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 05:04:23 ]
>>136
CW_USEDEFAULTはWS_OVERLAPPEDでないと効果がない。
WS_POPUPだと単にサイズゼロのウィンドウが画面外に作成されてしまう

148 名前:デフォルトの名無しさん [2007/11/16(金) 11:22:25 ]
TextOutで表示させる文字のフォントを変更したいのですが、
どのようにすればいいのでしょうか?

149 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 11:35:57 ]
SelectObject

150 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 11:58:39 ]
もっといえばCreateFont→SelectObject



151 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 12:04:38 ]
スレ違いの場合は誘導をお願いします。

今、生DVDにデータを書き込むプログラムを作っています。理想は、時系列で増え続けるデータを
direct recordingすることです。
ところがまず、Windows 2003 DDK添付のspti.cでWRITE DATA BUFFER operationがエラーコード2で
失敗する所ではまっています。
そもそも生DVDに対しては、spti.cでは書き込みは行えないのでしょうか?


152 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 13:33:13 ]
_beginthreadex関数で、void*型の引数で文字列を渡したいんですけど

  _beginthreadex(NULL, 0, mythread, (void*)str, 0, (unsigned int*)&thID);

でスレッド作成をして、スレッド内で

  char buf[256];
strcpy(buf, str);

としていますが、上手く引数を受け取れません。
表示させてみると「フフフ…」となります。


strの部分を&strとしたり、色々試してみたのですが上手くいきません。

おとなしくグローバル変数で値を渡したほうがよいのでしょうか…。
  

153 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 13:41:33 ]
呼び出している側の領域が、相手のスレッドが動作する前に消失しているんだろ。
馬鹿がよくやる。

154 名前:デフォルトの名無しさん [2007/11/16(金) 16:55:25 ]
よくわからないけど、とりあえずはキャストしないといけないんじゃない?

155 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 17:28:39 ]
>>152
複数作成したりどうしてもグローバル変数使いたくないなら
動的に確保してやればいい
ローカル変数のアドレスを渡すなんて問題外

156 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 18:43:29 ]
プログラミングに慣れてないならスレッドなんかに手を出すのはやめとけよ
ネット上のサンプルでも排他制御やアトミックオペレーションしてない、いい加減なソースが多いしな

157 名前:136 mailto:sage [2007/11/16(金) 20:11:06 ]
>>147
また一つ賢くなれました。
ありがとうございました。

158 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 08:31:31 ]
助けて下さい。
次の物を作らなければなりません。
hp.jpdo.com/cc009/1/img/1718.jpg

図形は、単純なのですが、作り方が分かりません・・・
アドバイス・参考文献 宜しくお願いします。
出来れば優しい神降臨求む

159 名前:158 mailto:sage [2007/11/17(土) 08:39:59 ]
i-bbs.sijex.net/imageDisp.jsp?id=gtrgtr&file=1195256319996o.jpg
上の画像は、出ないのでコチラ?

160 名前:158 mailto:sage [2007/11/17(土) 08:46:25 ]
画像は、サンプルです。実際は単純な○△◇等です。
言語は、Vidual c++ 6.0以降
ダイヤログから出発、ボタンを押すと各図形を表示
宜しくお願いします



161 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 08:53:38 ]
何が分かっていて、何がわからないの?
CあるいはC++はわかるならプログラミングWindowsでも読め。



162 名前:158 mailto:sage [2007/11/17(土) 09:16:18 ]
ダイアログからダイアログの飛ばし方が分からないです。
とばすのに必要なのは?

ダイアログでも図形は、書けるものなのか?
それに必要なのは?

とりあえずこの2点の知識お願いします。

163 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 09:30:39 ]
>ダイアログからダイアログの飛ばし方が分からないです。
ダイアログを親ウィンドウにしてダイアログを生成する

>とばすのに必要なのは?
お前のプログラミング知識

>ダイアログでも図形は、書けるものなのか?
描ける (書けるって何だよ)

>それに必要なのは?
お前のプログラミング知識

164 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 09:44:40 ]
宿題か

>ダイアログからダイアログの飛ばし方が分からないです。
>とばすのに必要なのは?

DialogBox
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_dialogbox.asp

これだとダイアログリソースが必要になる

CreateWindowExでも書けると言えば書ける
www.sm.rim.or.jp/~shishido/mdialog.html

こちらは普通にウィンドウを作るのでリソースは必要ない

>ダイアログでも図形は、書けるものなのか?
>それに必要なのは?

例示された奴をとりあえず書けって言われたら
BeginPaint、EndPaint、GetStockObject、FillRect、LineTo、MoveToEx、SetPixel辺りで書くかな

訳分からなければWin32 API入門の30章あたりまで読め

165 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 10:49:57 ]
やさしいインタネッツだな

166 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 11:03:22 ]
ダイアログにその画像貼っとけ

167 名前:158 mailto:sage [2007/11/17(土) 11:36:02 ]
>>164様 他
有難う御座います・・・
読んだけど、分け分から無いです。
取りあえず”Win32 API入門”を買って読みます。
必死なので、また来ます。
それでは、宜しくお願いします。

168 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 11:36:50 ]
つーかMFCだろスレ違い

169 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 11:43:41 ]
>>167
Win32 API入門って「サイト名」なんだけどね

>>168
少なくとも164に上がってんのはほぼ全部API

170 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:05:01 ]
リソースとして埋め込んだビットマップを
普通にファイルからビットマップ読み込んだ時のように
CreateDIBSectionする方法って無いでしょうか?

リソースとして埋め込んだビットマップで
アルファブレンド等をしたいのでピクセル列が欲しいんです、W98SEです



171 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:10:19 ]
とりあえず、LoadImageにLR_CREATEDIBSECTION使っとけばいいんじゃね?
暇なら、FindResourceから始める、という手もあるけど。

172 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:29:05 ]
今時98SEかよ

173 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:30:55 ]
>>171
どうもありがとう、両方試してみます

174 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:38:48 ]
アクティブなウインドウのファイル名を取得するコードを書いてます。
ネットではぴったりのコードがなく、つなぎ合わせで
なんとかこんな感じでまとめたのですが、よくわからない
のもあって、うまく動きません。
環境はBCB WinXPです。
/*
//ttp://m--takahashi.com/bbs/pastlog/11800/11731.html
1) GetWindowThreadProcessId() で HWND から ProcessID を得る
2) OpenProcess() で ProcessID から hProcess を得る
3) EnumProcessModules() で hProcess から hModule を得る
4) hProcess / hModule を使って GetModuleFileNameEx() でヤッター!!
*/
DWORD dwPID;
DWORD dwProcessID = GetWindowThreadProcessId(GetForegroundWindow(), &dwPID);
DWORD ProcessIDs[1000]; /* プロセスIDの一覧 */
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcessID);

DWORD ReturnSize; /* プロセスID一覧の取得結果のサイズ */
EnumProcesses(dwProcessID, sizeof(dwProcessID), &ReturnSize);//この行は?
if(handle)
{
HMODULE hMod;
DWORD size;
char fname[MAX_PATH];
EnumProcessModules(handle, &hMod, sizeof(hMod) ,&size);
GetModuleFileNameEx(handle, hMod, fname, sizeof(fname));
CloseHandle(handle);
ShowMessage(fname);
}


175 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:45:03 ]
GetWindowThreadProcessIdの返り値はスレッドID

176 名前:デフォルトの名無しさん [2007/11/17(土) 12:45:50 ]
途中で送信しちまった

GetWindowThreadProcessIdの返り値はスレッドIDなのに
OpenProcessにスレッドID渡してるぞハゲ

177 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:48:17 ]
EnumProcessesの第一引数

178 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:49:33 ]
そもそもEnumProcessesいらないだろこの場合
HWNDからProcessID取るって言ってんだから

179 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:59:47 ]
なんかもうアレ

180 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 13:12:37 ]
DWORD dwPID;
DWORD dwProcessID = GetWindowThreadProcessId(GetForegroundWindow(), &dwPID);

噴いたwww



181 名前:デフォルトの名無しさん [2007/11/17(土) 14:47:18 ]
wiodwsXP
visual studio .net
にてwindowアプリケーションを作っておりますが、
Heap corruption detected at 038A9008(最後の数字は毎回変わる)
のような文章が「出力」の欄に出て警告もなしに勝手に終了します。

ググッた結果、どうやら領域確保あたりが怪しいらしく
mallocやfree関数を調べましたが、おかしな点は見当たりませんでした。

他にどこらへんが怪しいと思いますか?

182 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 14:49:22 ]
mallocやfree周辺

183 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:00:56 ]
使ってるOSがおかしいよ

184 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:06:36 ]
ヒープオーバーランだろ

185 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:09:28 ]
>>181
プログラムのどこかで、メモリの確保した範囲外に書き込みをして、ヒープを破壊しまったんだ
プログラムのどの部分がどこに影響を与えるとかほとんど予測できないから、
問題が出なくなるまで怪しい場所をひとつずつコメントアウトして原因を絞っていくしかない

186 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:18:37 ]
初心者は文字列用のバッファが怪しい
終端NULLが良くオーバーランしてる

187 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:22:52 ]
ヌル文字はNULと書くようにしようぜ

188 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:23:45 ]
>>181
>>181の頭が怪しい

189 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 16:20:32 ]
APIスレに来てmallocとかfreeとか言ってるのが気に入らない
HeapAlloc使えよ

とかいう冗談はさておきWin32API関係ない。C初心者スレいってソースすべてうpすれば早く片付くかもね

190 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 16:34:58 ]
>>185
ありがとう。めんどくさそうだけど頑張ります。

>>186
参考にしてみます。ありがとうございます。



191 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 17:17:43 ]
>>171のFindResource()のほうから調べながら試していたんですが
(BITMAPFILEHEADER)LockResource()
(BITMAPINFO)LockResource()
とヘッダとインフォのメモリへのポインタを取得して
インフォからCreateDIBSection()でHBITMAPを作成する所まではできたんですが
DIBSectionのほうで使用するメモリに
読み込んだリソースの方のメモリをコピーする所で躓きました

LockResource()でピクセル列の先頭ポインタを取得するために
どういうキャストをすれば良いのかが分からないので困っています
思いつくことを試しながらCopyMemory()しましたがどれも強制終了してしまいます

192 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 17:38:41 ]
windows XP
VC++ 2003
SetWindowRgnでウィンドウスタイルが変わらないようにするには
どうすればいいですか?
SetWindowRgnしなければXPスタイルなのに、関数を呼ぶと
コマンドプロンプトと同様のスタイル(クラシック?)になります
ウィンドウはVC++2003のWin32プロジェクトで新規作成した
雛形そのままです

193 名前:デフォルトの名無しさん [2007/11/17(土) 18:11:14 ]
ANSIビルドのプログラムで、ウィンドウ内に作成したエディットコントロールに
ユーザーによって入力されたテキストを取得して、それをUNICODE形式のファイルに保存しようとしています。

処理の流れとして、エディットコントロール内のテキストの長さ(バイト単位)を取得して
→ 動的にメモリ確保
→ WideChatToMultiByteでUNICODE文字列に変換
→ WriteFile でファイルの先頭2バイトにBOMを書き込み
→ 変換後の文字列をWriteFile ファイルに書き込む

こういう風にしています。
ただ、エディットコントロール内のテキストの長さを取得する段階でつまづいてしまって。。
なんだか、2バイト文字が正確に数えられていないようなんです。
エディットコントロール内のテキストが、「こんにちはwindows」のようになっていた場合。
この文字列「こんにちはwindows」のサイズ(バイト数)を正確に掴むためにはどうすればいいんでしょうか?

ちなみにMFCはわかりません。

194 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 18:23:31 ]
GetWindowTextLength(のA)でいけるぞ。

comctl32.dllバージョン6使っていたらUTF-16単位での文字数になるかもしれないが、
そのときには、そもそもNT系のはずで、W系APIを直接使って
UNICODE文字列を取得してしまえばいい。

195 名前:193 [2007/11/17(土) 18:51:26 ]
lstrlen()でも同じ症状になるんですが、
例えば

ANSIビルド版のプログラムでは
lstrlen(TEXT("hello") = 5
lstrlen(TEXT("こんにちは")) = 10
ですが

UNICODE版では
lstrlen(TEXT("hello") = 10
lstrlen(TEXT("こんにちは")) = 10
となります。

確認してみましたが、GetWindowTextLengthでも同じ結果でした。
バイト数は分かりますが、文字数が分からないに思うんですが・・
確かにメモリ確保にはバイト数だけ分かればいいんですが、そもそもGetWindowTextLengthって文字列の長さ(=文字数)
を取得する関数という認識で間違いないですよね?

UNICODE版は、文字数とバイト数(文字数×2)に何の不思議も無いんですが
ANSI版は、文字数とバイト数がバラバラというか。。
ダブルバイト文字とシングルバイト文字が一緒くたでわかりにくいというか・・


196 名前:193 [2007/11/17(土) 18:56:10 ]
lstrlen(TEXT("hello") = 5
lstrlen(TEXT("こんにちは")) = 5
でした。

うぉー混乱する000

文字列を取得する関数って、
ANSI版だと、文字列のバイト数
UNICODE版だと、文字列の文字数
になってる??みたいですgあ・・

197 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:02:06 ]
ユーザーが手入力するならたいした文字数じゃないだろうから、
単純にバイト数の倍確保しておけばいいんじゃね?

198 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:07:28 ]
キーボードやマウスのボタンを押した時にはウインドウメッセージが出ますが、
ゲームパッドのボタンを押した時にはWMは出ているのでしょうか?
出ていればそのメッセージを教えて頂きたく思います。

60fpsのゲームループの中にゲームパッド情報取得の「〜->GetDeviceState〜」を書くと
まれにエラーが出てしまうため、他の方法を模索しています。

199 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:10:23 ]
>>198
あるわけない

200 名前:193 [2007/11/17(土) 19:18:51 ]
>>197
うーん。そうなんだけどねぇ。
あとMultiByteToWideCharの最後の引数は文字数を指定しろってなってるから、
これが原因なのかどうか分からないけど、UNICODEファイルとして保存したとき
最後にゴミがつくんです。
一応メモリ確保はGlobalAlloc(GPTR, dwSize)とやってますんで、0で初期化されてるはずなんだけど。。
どこがおかしいのかが分からないという。。。



201 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:58:33 ]
>>191
FindResourceの方は半ば冗談だったのだけどな……

LockResourceで先頭のアドレスが取れるのだから、後はそれを手繰っていくだけ。
中身は通常のビットマップのファイルとほとんど一緒。
ただし、BITMAPFILEHEADER部分が省かれているので、その点には注意。

202 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:11:42 ]
ウィンドウのメニュー部分を透明にすることは出来ますかね?

203 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:12:15 ]
C++で静的な仮想関数を使用する方法 or 参考HPを教えてください。

やりたいことは、_beginthreadexでスレッドクラスを作成して、
子クラスで任意の子メソッドを呼び出すことです。
つまづいている点は、_beginthreadexのコールメソッドが、
Staticなため、子クラスがオーバーライドできなくて困ってます。

ちなみに、以下のHPを参照しましたが、
これよりスマートな方法があれば教えてください!

よろしくです!

C++で遊ぼう「静的仮想関数」編
ttp://www.ksky.ne.jp/~seahorse/cpp/staticvirtual.html

204 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:18:16 ]
>>203
「スレッドクラス」「子メソッド」「コールメソッド」「子クラスがオーバーライド」の意味が
わかりません。

エスパーカモン。

205 名前:203 mailto:sage [2007/11/17(土) 20:23:21 ]
203です。スレッドだと話がややこしいのでサンプル書きました。
以下で、BとCクラスのtest()を呼んだとき、BとCのtest1()を読んでほしいという質問です。
よろしくおねがいします。

#include <iostream>
using namespace std;
class A{
public:
static void test1(void){cout << "A" << endl;}
void test(void){test1();}
};
class B : public A{
public:
static void test1(void){cout << "B" << endl;}
};
class C : public A{
public:
static void test1(void){cout << "C" << endl;}
};
int main(int argc, char *argv[]){
B *bbb = new B();
C *ccc = new C();
bbb->test();
ccc->test();
delete bbb;
delete ccc;
return 0;
}
実行結果:
A
A

206 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:32:34 ]
>>203
やりたいのはこういうことじゃないか?
静的な仮想関数なんてわけのわからないものは必要ない

class A{ public: virtual void test1(){ cout << "A" << endl; }};
class B{ public: virtual void test1(){ cout << "B" << endl; }};
class C{ public: virtual void test1(){ cout << "C" << endl; }};

void thread_main(void *p){
 static_cast<A*>(p)->test1();
}

int main(int argc, char **argv){
 B *bbb = new B();
 C *ccc = new C();
 _beginthreadex(NULL, 0, thread_main, bbb, 0, NULL);
 _beginthreadex(NULL, 0, thread_main, ccc, 0, NULL);
 ....
}

207 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:34:14 ]
>>205
static を virtual に変えて終了。

Windows API 関係ないなら C/C++ スレいけば?

208 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:46:05 ]
>>205
thisポインタで自分を取り戻すんだ!

209 名前:203 mailto:sage [2007/11/17(土) 20:53:03 ]
203です。
>>207,206
_beginthreadexで実行する関数が、GlobalかStaticの制限があるのです。
また、スレッドクラスを継承するクラスは、簡単に使えるようにしたかったのです。
わけあって、MFC等のライブラリを使用できないのです。
>>208
thisを渡す方法も検討したのですが、これも上記Win32APIの理由で・・・

C++すれ逝って来ます。どうもです。

210 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:55:58 ]
>>209
> _beginthreadexで実行する関数が、GlobalかStaticの制限があるのです。

嘘だろ?どこに書いてある?

_beginthreadex のせいでこんなことになってるなら C++ スレに逝っても
迷惑なだけだろう。



211 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:59:00 ]
>>209
>thisを渡す方法も検討したのですが、これも上記Win32APIの理由で・・・ 

どの理由だよ
thread_mainはグローバル関数なんだから制限の範囲内じゃん

212 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 21:08:43 ]
>>201
カスタムリソースにも興味があったのでFindの方やってみようかなと思って
アドバイスありがとう、やってみます

213 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 21:32:25 ]
class A {
public:
virtual unsigned threadProc () = 0;
static unsigned threadProcStatic (void * arglist) {
return ((A *)arglist)->threadProc(); }
void Start () {
_beginthreadex(threadProcStatic, this); // 引数適当 }
};
class B : public A {
public:
virtual unsigned threadProc () { // なんか }
};
こんな感じじゃ駄目なのか? >>209

214 名前:203 mailto:sage [2007/11/17(土) 22:14:30 ]
203です。Win32APIよくわかってなくてスイマセン。

>>210
 _cdeclか_clrcallで渡すことが規約のようです。global or 非staticなメンバ関数を渡せるなら教えてください。
>>211
 混乱しててスイマセン。_beginthreadexとthisをどううまく使えば良いのかわかりませんでした。
>>213
 ありがとうございます!これで動きました!一度staticな関数を噛まして非staticを呼ぶのですね。

皆様どうもありがとうございました。

215 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 22:32:28 ]
>>214
>213 は >206 と同じことなわけだが。

216 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:28:01 ]
>>195
>ANSI版は、文字数とバイト数がバラバラというか。。
>ダブルバイト文字とシングルバイト文字が一緒くたでわかりにくいというか・・
それが、可変長であるダブルバイト文字列というもの。
それに嫌気がさしたから、UNICODEは1文字が固定長になっている。
#というはずだったが現実そう上手くは行かず。

>>196
ANSIだとchar型、UNICODEだとwchar_t型でどれだけの要素数を占めるのかと考えればよい。

217 名前:デフォルトの名無しさん [2007/11/18(日) 00:01:51 ]
>>215
206は再利用ということを考えてないっぽい

218 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 00:02:44 ]
このようなのを作りたいんですが、どのような関数を使えばできますか?

ttp://www.hsjp.net/upload/src/up5686.jpg

219 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 00:08:52 ]
CreateListViewMitainaControl()

220 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 00:10:59 ]
>>214
>>210は間違っている気がするな



221 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 00:12:32 ]
>>219
ありがとう。そんな便利な関数があるんだね
CreateListViewでググって勉強してくる

222 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 00:12:37 ]
>>219
Mitainaワロタw

223 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 07:03:24 ]
>>199
やっぱり無いですか。調べても出てこないわけだ
エラー無くす方向で頑張ってみます

224 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 08:12:52 ]
>>198-199
無いこともない。joySetCaptureでググれ。

といっても、これを使ったところで全く解決にはならないけどな。
結局自分の代わりにポーリングして監視してくれるだけ。

ゲームパッドはキーボードやマウスのようにmake/breakコードを
送信するいわゆる割り込みデバイスではないから、能動的に
状態の変化を受け取るのは不可能。

225 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 08:47:25 ]
画面上の任意のテキストを右クリックして、文字列を取得するにはどうしたらよいでしょうか。
Babylon ttp://www.babylon.com/jpn/ のような感じで、Webブラウザに表示されたWebコンテンツでも、
ウィンドウのタイトルの文字列でも、自由にテキストを取得できるようにしたいです。
調べた限りでは、クリックした座標を元にウィンドウハンドルを取得し、該当する文字列を*丸ごと*取得することはできます。
しかし、*クリックした付近の文字列*を取得することが必要なのです。何かよい方法はありますでしょうか。

226 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 09:09:23 ]
先に言っておくが汎用的な方法は無い

テキストが表示されてるのがEDITクラス(エディットコントロール)なら
EM_GETSELで選択範囲を取れるから
WM_GETTEXTでテキストを取ってから選択範囲を切り出せばいい

ブラウザの場合は表示されてるのはキャプションじゃないのでもっと別の方法が必要になる
具体的には
IWebBrowser2→IHTMLDocument::selection→
HTMLElement::createTextRange→IHTMLTxtRange::findText
って感じで取る

まあ無理だろう

227 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 09:35:55 ]
Babylonは画面上の「画像」をOCRで読み取ってる
だからIEだろうがFirefoxだろうが、画像中の文字だろうが読み取れる

同等の物を作るのは相当な困難が予想されるが、まぁがんばれw

228 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 10:32:19 ]
>>227
>Babylonは画面上の「画像」をOCRで読み取ってる
これ、まじ?
("O(ptical)"では無いだろうというツッコミは置いといて、)
ほんとに、画像→文字認識してるの?


229 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 10:38:13 ]
>>228
Babylonの説明にそう書いてあるだろう
例に出してるものくらいちゃんと調べろよw

230 名前:228 mailto:sage [2007/11/18(日) 10:48:08 ]
>>229
ごめりんこ




231 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 11:01:02 ]
どこの誰が書いたかわからんヨタかもしれん話をいちいち調べるかよw

232 名前:158 mailto:sage [2007/11/18(日) 11:05:38 ]
昨日の158です。再び助けて下さい。

i-bbs.sijex.net/imageDisp.jsp?id=gtrgtr&file=1195351075500o.jpg
ダイアログのボタンを押して、メッツセージBoxを表示させました。

これを、異なるダイアログを表示させたいです。
例 i-bbs.sijex.net/imageDisp.jsp?id=gtrgtr&file=1195351124662o.jpg

表示させる記述と方法がわかりません。
出来れば具体的な記述をしてくれると有り難いです。
どなたか、ご教授お願いします。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<231KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef