Win32API質問箱 Build51at TECH
Win32API質問箱 Build51 - 暇つぶし2ch175:デフォルトの名無しさん
07/03/26 21:04:06
>>172
WinMain が管理すべきものはフレームウインドウだけであって、
クライアントウインドウはフレームウインドウが管理すべきだから。

oo に従っておくと同時に考えなくてはいけないことが減ってうれしい。
というか不正なウインドウを操作しようとするようなバグが減る。

176:デフォルトの名無しさん
07/03/26 21:04:59
>>148
XP以降限定でもいいならPrintWindow()でも使え。

URLリンク(www.microsoft.com)
// メモリ デバイス コンテキスト hdcMem に格納されている、
// ウィンドウ hwnd のスナップショットを受け取ります。
HDC hdc = GetWindowDC(hwnd);
if (hdc)
{
    HDC hdcMem = CreateCompatibleDC(hdc);
    if (hdcMem)
    {
        RECT rc;
        GetWindowRect(hwnd, &rc);

        HBITMAP hbitmap = CreateCompatibleBitmap(hdc, RECTWIDTH(rc), RECTHEIGHT(rc));
        if (hbitmap)
        {
            SelectObject(hdcMem, hbitmap);

            PrintWindow(hwnd, hdcMem, 0);

            DeleteObject(hbitmap);
        }
        DeleteObject(hdcMem);
    }
    ReleaseDC(hwnd, hdc);
}

177:デフォルトの名無しさん
07/03/26 21:24:05
>>175
> WinMain が管理すべきものはフレームウインドウだけであって、
> クライアントウインドウはフレームウインドウが管理すべきだから。

なるほど目から鱗ですWinMainから除きます
そういう考え方ってどうやったら身に付くのでしょうか
本屋行ってもWin32APIのいい本になかなか出会えないです

> oo に従っておくと同時に考えなくてはいけないことが減ってうれしい。

ooはメッセージキューという意味ですよね??

178:デフォルトの名無しさん
07/03/26 21:25:35
oo = オブジェクト指向 だ

179:デフォルトの名無しさん
07/03/26 21:27:31
>>177
>ooはメッセージキューという意味ですよね??

たぶんオブジェクト指向( object oriented )のことだと思うよ。

180:デフォルトの名無しさん
07/03/26 21:28:24
oo == おっぱいおっぱい

181:デフォルトの名無しさん
07/03/26 21:31:55
oo == ∞

182:148
07/03/26 21:58:56
>>170
>>176
やった!できました。すげー!!

ありがとうございました。

183:176
07/03/26 22:06:53
あ、>>170 で既出だったのか。ポイントしてるURLまで一緒だし。orz

184:デフォルトの名無しさん
07/03/26 22:28:24
XPでVistaのサムネイルみたいなの実現してるフリーソフトがあるけどあれは
どうやってるんだろう
やっぱりPrintWindow?

185:デフォルトの名無しさん
07/03/26 22:35:26
>>178
>>179
ありがとうございます無知なのが恥ずかしいです><
てっきり無限→ループ→キューかと・・

186:デフォルトの名無しさん
07/03/26 22:35:36
>>184
それって Vista みたいにリアルタイムで表示が更新されてるってこと?
だとしたら PrintWindow() じゃないと思う。
そうじゃないなら多分、PrintWindow() だと思う。

187:デフォルトの名無しさん
07/03/26 22:36:56
>>185 の想像力に脱帽。

188:デフォルトの名無しさん
07/03/26 22:42:03
                                 ~ ∞
                          [ノ゚д]ノ <キュー待ってー
                           [_] 
■■■■◇_◇_□□□□_□      / >

189:高橋尚子
07/03/26 23:42:10
>>184
マジレスすると、
IExtractImageインターフェイス

190:デフォルトの名無しさん
07/03/26 23:52:30
>>189
ウィンドウじゃなくてファイルの話だったのか?

191:デフォルトの名無しさん
07/03/27 01:19:17
指定したフォルダに書き込み権限があるかどうかというのは、
どのAPIを使えばいいんでしょうか?
サンプルとか置いてあるサイトをご存知でしたら、教えてください。

192:デフォルトの名無しさん
07/03/27 02:18:35
実際に書き込んでみる…という手がVistaまでは使えた

193:デフォルトの名無しさん
07/03/27 05:43:39
>>192
サンクス! Vistaでもそれでいけるんだね!・・・という意味になるぞ。お前の日本語ちょっと変。

194:デフォルトの名無しさん
07/03/27 06:41:40
じゃあXPまでは使えたに訂正

195:デフォルトの名無しさん
07/03/27 06:53:12
に、2003は……?

196:デフォルトの名無しさん
07/03/27 10:46:09
書き込めたと思ったら、仮想ナンチャラフォルダに書かれてた、ってことがあるから使えないんじゃね?

197:デフォルトの名無しさん
07/03/27 10:46:37
ACLちゃんとたどる

198:デフォルトの名無しさん
07/03/27 11:52:29
(Media Playerの様に、アプリケーション再利用を行いたい為)

多重起動を抑止のアプリケーションを作るのですが、
後起動のアプリケーション(多重起動を抑止破棄される予定)から
既に起動しているアプリケーションにデータを送るには、
WM_COPYDATAの他にどういう手法があるのでしょうか?

説明が不明瞭ですかね?



199:デフォルトの名無しさん
07/03/27 12:18:07
>>198
ファイルを介してもいいしメッセージでもいいしイベントでもいいし、プロセス間通信の好きな手段が使える。

200:198
07/03/27 12:24:55
>>199
ご回答ありがとうございます。
数点質問させてください。

①ファイルというのは、FindFirstChangeNotification関数を利用する事でおk?
②メッセージはWM_COPYDATAの他なにかいいのがありますか?
 あれば、メッセージ名を教えていただきたいです。
 (メッセージ動作は調査しますんで)
③先も書いたとおり、メディアプレイヤーの様な動作を想定する場合、
 プロセス間通信ではパイプ?メールスロット?どっちがお勧めでしょうか?

以上です。

201:デフォルトの名無しさん
07/03/27 12:28:53
多重起動禁止なんてぐぐればいくらでも

202:デフォルトの名無しさん
07/03/27 12:46:49
>>201
この場合、意図は多重起動禁止というより、
プロセス間通信なんでしょうかね?



203:デフォルトの名無しさん
07/03/27 12:56:19
WM_COPYDATAじゃいやなのは何で?
他のアプリから送ることが可能になるから?

204:デフォルトの名無しさん
07/03/27 13:12:02
>>200
(1)通知は別にやった方が安全だから、情報量が多くないならファイルにする必要はないかと。
(2)通知するだけなら、ユーザ定義メッセージでもできる。そのとき32bitのデータは一緒に送ることができる。
(3)どれだけデータを送りたい? それによって手段は変わるわけだけど。

205:デフォルトの名無しさん
07/03/27 13:24:06
俺はファイルを経由するくらいなら、VirtualAllocExを選ぶな。
送りたいのが255文字以下の文字列ならアトムを使うという手もあるよ。

206:198
07/03/27 13:38:23
>>201-205
WM_COPYDATAの場合、FindWindow→SendMessageの手順となります。
この時、FindWindowでキャプションをヒントにウィンドウを検索するのに抵抗があり、
もっとスマートでエレガントな方法があるんではないかと思って、
皆様に質問をだした次第です。
ちなみに、コマンドライン情報(ファイルパス)を渡そうと考えています。


207:デフォルトの名無しさん
07/03/27 13:45:32
>>206
多重起動抑止はどうやってるの?

208:デフォルトの名無しさん
07/03/27 13:57:58
FindWindowでタイトル検索するしか知らないならしょうがないな
名前付きパイプでもメールスロットでも好きなほう使えばいいじゃん

209:デフォルトの名無しさん
07/03/27 14:01:24
セカンダリのディスプレイにアプリケーションを起動するにはどうすればよいのでしょうか?

GDIでデバイスコンテキストとかモニタハンドルとか探ればセカンダリのディスプレイは特定出来そうですけど,
それとCreateProcessのデスクトップ/ウィンドウステーションとどう結びつけるのか良く判りません.


210:デフォルトの名無しさん
07/03/27 14:17:59
>>198
FMOにウィンドウハンドルつっこんどけば?
多重起動抑止かつプロセス間通信だとFMOが定石じゃね?

211:198
07/03/27 14:26:23
>>207
Mutexを利用して判定していますね。
んで、既にハンドルがあれば死にに行くみたいなことをしています。

>>208
パイプは考えていましたが、メールスロットは知りませんでした。
調査してみます。


一度ここで質問をクローズしますね。
レスを下さったみなさま、ありがとうございました。


212:198
07/03/27 14:27:48
>>210
申し訳ありませんが、
FMOってなんですか?

213:デフォルトの名無しさん
07/03/27 14:28:01
FRONT MISSION ONLINE

214:デフォルトの名無しさん
07/03/27 14:28:41
ファイル マッピング オブジェクト のことだと思う

215:198
07/03/27 15:38:44
>>214
ありがとうございます。
皆様、ご回答ありがとうございました。

216:デフォルトの名無しさん
07/03/27 18:58:20
そういうのってDDEを使ったり
そうか、ROTに登録してGetObjectしたりとか

217:デフォルトの名無しさん
07/03/27 21:58:14
DDE は Vista でほぼ廃止と聞いた(NetDDE が廃止なのは確実)

218:デフォルトの名無しさん
07/03/27 23:53:45
VistaでDDEがごく一部しかまっとうに動かないって嘆いていた人がいたのはこのスレだっけ?

219:デフォルトの名無しさん
07/03/28 05:08:10
>>197
それでもVistaでは仮想フォルダにファイルが作成済みだとうまくいかない場合がある。
それを何とか検出しようとすると泥沼になるから(つーか検出させないための互換性機能
なわけだし)素直にmanifest付けるのが良さそうだ

220:デフォルトの名無しさん
07/03/28 07:49:29
こんにちは、質問させて下さい。
WindowsXPにて、MFCライブラリを使わずに、
バイナリデータを転送する方法ってありますか??

もしあるのでしたら、サンプルを下さい。御願いします。

221:デフォルトの名無しさん
07/03/28 07:58:06
どこに転送するのさ

222:デフォルトの名無しさん
07/03/28 08:39:23
int a = 1;

223:デフォルトの名無しさん
07/03/28 08:40:09
これはエスパーの出番だな

224:デフォルトの名無しさん
07/03/28 09:13:59
socket

225:デフォルトの名無しさん
07/03/28 09:24:19
これだけ情報が抜けてるってことはhttpで転送とか?

226:デフォルトの名無しさん
07/03/28 09:40:23
MDIのフレームウィンドウにステータスウィンドウを表示させたら
MDIの子ウィンドウが表示されなくなったんだけど、原因なんでしょう?
エスパーさん助けて

227:デフォルトの名無しさん
07/03/28 09:41:18
ステータスウィンドウ→ステータスバーです

228:デフォルトの名無しさん
07/03/28 09:49:05
呼んだ?

229:デフォルトの名無しさん
07/03/28 09:51:18
>>228
ステータスバー表示させるだけで、他のウインドウが表示されなくなる
バグってあるんですか??

230:デフォルトの名無しさん
07/03/28 10:01:05
LRESULT CALLBACK FrameProcの中の以下が追加されるとMID子ウィンドウが
表示されなくなるみたいです、、、助けて、、

// ウィンドウサイズが変更されたとき
case WM_SIZE:
 SendMessage(hStatusbar, WM_SIZE, wp, lp );
 return 0;

231:デフォルトの名無しさん
07/03/28 10:04:12
returnの下に文が続いてるとか言わないよな?
とりあえず
return 0;

break;
にしてみ

232:デフォルトの名無しさん
07/03/28 10:07:47
>>230
DefFrameProc呼んどけ

233:デフォルトの名無しさん
07/03/28 10:08:01
>>231
すごい!!!!出てきました!!!ありがとうエスパー!
case WM_CREATE:とかだとreturn 0;でいいのに
なんでcase WM_SIZEはbreak;なんだろう!?

234:デフォルトの名無しさん
07/03/28 10:14:44
URLリンク(www.geocities.jp)
URLリンク(wisdom.sakura.ne.jp)
どっちもreturn 0;なのに・・・・・

235:デフォルトの名無しさん
07/03/28 10:20:57
switchのdefaultにDefWindowProc入れて他はbreakしてreturn 0;にしてる。

236:デフォルトの名無しさん
07/03/28 10:22:10
げ、俺が学習に使ったページまで・・
こういう場合ってreturn 0;が定石なのか?

デフォルトプロシージャに処理させたくないとき以外は
デフォルトプロシージャに処理がわかるようにするもんだと思ってた。

237:デフォルトの名無しさん
07/03/28 10:30:45
DefWindowProcには自分が処理しないメッセージだけを渡せばよい。

しかしDefFrameProcはこんなメッセージを処理すると書いてあるのだから、それらのメッセージは渡してやるべき。
URLリンク(msdn.microsoft.com)

238:デフォルトの名無しさん
07/03/28 10:39:59
>>237
その4個だけでDefWindowProcに渡す必要があるのならこれが正解?

{
case ↓の4個以外のWM_
break;
case WM_COMMAND:
case WM_MENUCHAR:
case WM_SETFOCUS:
case WM_SIZE:
default DefWindowProc
break
}

239:デフォルトの名無しさん
07/03/28 10:42:57
とりあえずC言語の勉強からがんばれ…

240:デフォルトの名無しさん
07/03/28 10:46:39
>>238
DefWindowProcじゃなくて、DefFrameProcの話しだろ

241:デフォルトの名無しさん
07/03/28 10:47:56
>>239
その前に日本語の勉強から頑張れと言うべき

242:デフォルトの名無しさん
07/03/28 10:52:37
ごめん寝起きでボケてたんで書き直したw
DefFrameProcはDefWindowProcと異なり、WM_COMMAND,WM_MEMUCAHR,
WM_SETFOCUS,WM_SIZEの4つのメッセージに関しては、ユーザーで行いさせ
たい処理を記述した後に、DefFrameProcを呼ぶ必要がある
ってことね

{
 case WM_CREATE等 //WM_COMMAND,WM_MEMUCAHR,WM_SETFOCUS,WM_SIZE以外のメッセージ
  break;// breakしてDefFrameProcに処理を渡す必要なし
 case WM_COMMAND:
 case WM_MENUCHAR:
 case WM_SETFOCUS:
 case WM_SIZE:
 default:
  DefFrameProc();
  break;
}

243:デフォルトの名無しさん
07/03/28 11:15:30
自分が処理しないメッセージだけを渡せばよい。 というのは

例えばWM_SIZEなら
「自分でサイズ変更の処理を書く」や「新しいサイズを調べて制限値に引っかかるならサイズ変更しない」というのが「自分で処理した」にあたる。
だから「フォームのどこかに新しいウィンドウサイズを表示する」といった処理は
「自分で処理した」内に入らないのでデフォルトプロシージャを呼び出す必要がある。

こんな風に理解していたんだが間違ってる?

244:220
07/03/28 12:26:34
どうもすみません、質問の仕方が悪かったです。

2台のPC間で、SOCKETを使い、
片方をサーバー、もう片方をクライアントにして通信しているのですが、
一方から一方にバイナリデータのファイル(拡張子が jpeg, exe 等)を送りたいのです。

テキストデータなら、send,recvで簡単に送受信できたのですが、
バイナリデータは同じ方法で転送できない事に気付きました。

ググってみたところ、MFCを使う方法しか探せなかったんです・・・。
もしかして、バイナリデータを送受信できるSocketAPIって、
提供されていないんでしょうか??

コンパイラはVC.NET 2003です。
エスパーの皆様、ヨロシクお願いいたします m(。-_-。)m

245:デフォルトの名無しさん
07/03/28 12:29:47
バイナリデータをsend/recvで送受信できないわけが無い。
MFCのソケット関連だって所詮winsockのラッパに過ぎない。

246:デフォルトの名無しさん
07/03/28 12:45:07
バイナリもsend/recvで送受信できるお

247:デフォルトの名無しさん
07/03/28 12:56:58
ファイルをテキストモードでオープンして送ってんじゃないの?

248:デフォルトの名無しさん
07/03/28 14:01:46
MDI子ウィンドウをステータスバーに重ねると、ステータスバーが消えてしまいます。
消えないようにするにはどうすればいいのですか?
WM_PAINTになにかすればいいのはわかるのですが、うまくいきません・・・。
(消えたステータスバーはMDIフレームウィンドウのサイズを変えるとまた表示されます)

(1)MDIフレームウィンドウ
(2)MDI子ウィンドウ
(3)ステータスバー

+---------------------+
|(1).  +---------+    |
|    |(2)..     |    |
|    +---------+    |
+---------------------+
|(3).              |
+---------------------+
  ↓ (2)を(3)に重ねてから、(2)を元の位置に移動するとこうなる

+---------------------+
|(1).  +---------+    |
|    |(2)..     |    |
|    +---------+    |
+-----+       +----+
|(3)..  |       |    |
+-----+---------+-----+
      ↑ステータスバー消える!!

249:デフォルトの名無しさん
07/03/28 14:55:58
ステータスバーの親を MDIフレーム から MDIフレームの親にすれば?

250:デフォルトの名無しさん
07/03/28 15:24:41
>>249
できました
だめだ親とか子とか全然理解してないみたい・・・Orz=3

251:デフォルトの名無しさん
07/03/28 16:53:59
親の心子知らず

252:デフォルトの名無しさん
07/03/28 18:18:41
子の心親知らず

アスペ親子乙

253:デフォルトの名無しさん
07/03/28 19:30:13
>>244
まさか strlen(buf) とかやってないよな?

254:デフォルトの名無しさん
07/03/28 19:38:04
SetBkMode(hdc , TRANSPARENT)するとして、
透過度の濃度はどうやって設定するのでしょうか?

255:デフォルトの名無しさん
07/03/28 19:58:11
無理
AlphaBlend

256:デフォルトの名無しさん
07/03/28 19:58:21
strlenしててもbase64とかでエンコしてればだいじょぶさー
してないだろうけど

257:デフォルトの名無しさん
07/03/28 20:11:11
IEのお気に入り表示した時のように、お気に入りの画面とIE本体の画面と
バー(?)のようなもので自由に画面分割を変えるのってどうやってるんですかね?

258:デフォルトの名無しさん
07/03/28 20:23:15
スプリットウィンドウでぐぐるといい感じになれるけど、
実装していくうちにやな感じに面倒くさくなってくると思う

WTLとか使っちゃうのが楽なのかな


259:デフォルトの名無しさん
07/03/28 21:23:07
>>258
どうもです
ぐぐってみたけど面倒だねこれ・・

260:デフォルトの名無しさん
07/03/28 23:42:17

MFCを使わずにDAOかADOでSQLServerかAccessとアクセスするサンプルどこかに落ちて無いでしょうか。

ぐぐってみたらMFCばっかでした。

261:デフォルトの名無しさん
07/03/29 00:40:27
ODBCじゃダメなわけ?

262:デフォルトの名無しさん
07/03/29 01:51:45
ぶっちゃけ、ADOならVBのサンプルみれば判らないとおかしい。
あとデータアクセスなら、ATL OLEDBという手もあるが

263:260
07/03/29 02:02:09
解決しましたありがとうございました。


264:デフォルトの名無しさん
07/03/29 02:12:21
メニューの開くと終了の間にセパレータを入れたい場合、
リソースにはどのように書けばいいのでしょう?

IDM_MAIN MENU {
POPUP "ファイル(&F)" {
MENUITEM "開く(&O)" , ID_OPEN
---ここにセパレータ入れたい---
MENUITEM "終了(&X)" , ID_EXIT
}
}

265:デフォルトの名無しさん
07/03/29 02:50:17
MENUITEM SEPARATOR
つーか、それくらいぐぐれ

266:デフォルトの名無しさん
07/03/29 07:38:07
メッセージフックでWMメッセージを破棄する場合、CallNextHookExしなければいいんだっけ?

267:デフォルトの名無しさん
07/03/29 07:39:21
WM_NULL に置き換えればいい。

268:デフォルトの名無しさん
07/03/29 07:46:03
サンクス!

269:デフォルトの名無しさん
07/03/29 10:25:10
>>265
そんなこといわないで

ありが㌧

270:デフォルトの名無しさん
07/03/29 10:28:12
リソースエディタで作って、ソース見るという手もある

271:デフォルトの名無しさん
07/03/29 10:33:08
>>270
最初XN Resource Editorでそうしようと思ったんですけど
出来たファイルがバイナリーで見れなかったよ

272:デフォルトの名無しさん
07/03/29 13:33:38
名前無しパイプとメールスロットは、
どっちもWaitForSingleObjectで待機できないの?

それとも実は待機できるとか?


やっぱ、ポール牧んぐしなきゃ無理?

273:デフォルトの名無しさん
07/03/29 13:46:16
スレッドでポーリング

274:デフォルトの名無しさん
07/03/29 14:25:25
つか、スレッドなら待ちっぱなしでいいか

275:デフォルトの名無しさん
07/03/29 14:26:16
・標準入力に対するReadFile()でブロックしている状態に他スレッドから
 割り込んでブロックを解除する良い方法はありますか。

・cookedモードで動作しているConsoleへの入力を、Unixのselect()
 のように待機する方法はありますか。
 改行が入力され、プログラム側が読み込み可能になった時点で待機が
 解除されることが望ましいです。

276:272
07/03/29 14:37:31
>>273-274
おー。その手があったんですね。
姉さん感動したわ。

277:デフォルトの名無しさん
07/03/29 17:35:30
ATL使ってCOM DLL作っているんだが、
メソッド内でCreateDialog呼び出す際のhInstanceって何設定すればいいんだ?
hwndないからGetWindowLongも呼べないし

え?もしかしてすげー低次元な質問?

278:デフォルトの名無しさん
07/03/29 17:39:25
>>277
GetModuleHandle(NULL)

279:デフォルトの名無しさん
07/03/29 17:40:02
DllMain

280:デフォルトの名無しさん
07/03/29 17:44:30
CComModule::m_hInstだっけな?

281:デフォルトの名無しさん
07/03/29 17:50:36
ATLならGetResourceInstance?

282:デフォルトの名無しさん
07/03/29 17:52:10
>>275
・たぶん無い。
・それなら普通に読めばいいのでは?

>>277
たぶんこれ。 URLリンク(support.microsoft.com)

283:280
07/03/29 17:53:54
>>282
これは知らなんだ。
さんくすこ

284:デフォルトの名無しさん
07/03/29 18:49:13
>>278-282
thx!!
皆のアドバイスから紐解いていったら
_Module.m_hInst に入ってた!

まじありがとう

285:284
07/03/29 18:49:45
sage忘れスマソorz

286:デフォルトの名無しさん
07/03/29 19:57:59
DLLファイルとDEFファイルとHPPファイルがあって
LIBファイル無しでコンパイルする方法教えてください

287:デフォルトの名無しさん
07/03/29 20:00:33
>>286
DEF があれば LIB を作ることは可能
gcc だと LIB 作らずに DLL をリンクに加えるだけでもコンパイルできる
他のコンパイラはどうだか知らない

288:デフォルトの名無しさん
07/03/29 20:08:38
GCCってmingwのことですか?
dlltoolをつかったらエラーが出てlibが作れませんでした。
lib.exeでdefからlibは作くれても
リンクで「~は未解決です」の
エラーが出来ませんでした

289:デフォルトの名無しさん
07/03/29 20:28:56
開発環境がMSVCだとして話をするが。
dumpbin -EXPORTS foo.lib
してみて、インポートライブラリのエクスポートシンボルを確認汁。
ヘッダとつきあわせて、名前がヘッダで宣言されている呼び出し規約と
適合しているかチェック汁。

cdeclなら_で始まっているのが正しいし、
stdcallならうしろに@ほにゃららがつく。
つうかC++か。名前マングルされてるとマンドいな。
DEFファイルは本当に正しいのか?


290:デフォルトの名無しさん
07/03/29 21:06:45
XXX.h

#ifdef _EXPORT_LIB_
#define __PORT __declspec(dllexport)
#else
#define __PORT __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C"
{
#endif
__PORT WINAPI プロトタイプ定義
#ifdef __cplusplus
}
#endif

291:デフォルトの名無しさん
07/03/29 21:18:37
すみません↓をビルドするとエラーが出ます
HINSTANCEの型は後ろから二番目の引数なのでキャストしたのですが消えません
どこが間違ってるのでしょうか??

(コード)
hChild1 = CreateWindowEx(
WS_EX_CLIENTEDGE,
clsChild1Window,
(LPCWSTR)"", //タイトルバーにこの名前が表示されます
WS_CHILD | WS_VISIBLE | WS_THICKFRAME, //ウィンドウの種類
-frame, // x座標
-frame, // y座標
x1, // 幅
y1, // 高さ
hWnd, // 親ウィンドウのハンドル、親を作るときはNULL
(HMENU)1, // メニューハンドル、クラスメニューを使うときはNULL
(HINSTANCE)hInstance, // インスタンスハンドル
NULL
);

(エラー)
error C2440: '=' : 'HWND' から 'HINSTANCE' に変換できません。

292:デフォルトの名無しさん
07/03/29 21:20:26
hChild1の宣言を確認してみればいい予感

293:デフォルトの名無しさん
07/03/29 21:20:29
「hChild1の型がHINSTANCEだからだ死ねぼけ」
みたいなエラーに思えるがどうか?

294:デフォルトの名無しさん
07/03/29 21:22:45
とりあえずあれだ、何も考えずにキャスト乱用するの止めれ。

295:デフォルトの名無しさん
07/03/29 21:23:58
HWND型の方は確認してないだろ。CreateWindowExの戻り値の型はHWND

296:デフォルトの名無しさん
07/03/29 21:26:02
>>292
>>293
>>294
>>295
hChild1の型が間違ったました
HINSTANCEからHWNDにしたらビルドできました
すぐ吊ってきます

297:デフォルトの名無しさん
07/03/29 21:43:31
>>296
よーし吊って来いwwwwwwwww

298:デフォルトの名無しさん
07/03/29 21:58:12
みなさん、質問があります。

CreateMutex, CreateSemaphore, CreateEventとか、
引数に名前があるCreate~関数がありますよね。
また、これと対のOpen~関数もありますよね。
これらは以下のシナリオで利用されると思いますが・・・

・ハンドルが定義されてない場合
①.Open~関数→失敗(ハンドルがない)
②.ハンドルがないのでCreate~関数→成功
③.(゚Д゚)ウマー

・既にハンドルが定義されている場合
①.Open~関数→成功(ハンドルがある)
②.ハンドルを流用
③.(゚Д゚)ウマー

しかし、ハンドルが定義されてない場合で
①と②の間に別プロセスかスレッドで、
ハンドルが生成される可能性もあるんですよね?

もし可能性があるなら、矛盾がないように生成シナリオを組むには
どういう手法をとるべきでしょうか?
それとも、考え違いなんでしょうかね?


299:デフォルトの名無しさん
07/03/29 22:20:58
常に Create 使えば良し。

300:デフォルトの名無しさん
07/03/29 22:21:21
クレアテ

301:デフォルトの名無しさん
07/03/29 22:30:18
Create~系は、既に同名のオブジェクトがあればそれを開くという動作をする。

302:デフォルトの名無しさん
07/03/29 23:20:18
>>299-301
へー知りませんでした。
調査してみます。

303:デフォルトの名無しさん
07/03/30 00:02:46
MSDN読んでればこんな疑問湧かないのに

304:デフォルトの名無しさん
07/03/30 00:24:47
MSDNがどんな専門書籍よりも早く正確に理解できるのに
なんで読まないんだろうね

305:デフォルトの名無しさん
07/03/30 00:30:59
MSDNは重いし目次分かりにくくて調べにくいからキライとか言ってみる

306:デフォルトの名無しさん
07/03/30 00:48:31
関数の詳細調べるにはいいけど、
「何をしたいときには、どの関数を使えばいいか」
っていうのは調べられない

307:デフォルトの名無しさん
07/03/30 01:25:03
まあ、リファレンスマニュアルだしな。

308:デフォルトの名無しさん
07/03/30 01:33:00
あと、リファレンスって結構サンプルコードがあってなんぼな面もあるのに
MSDNはサンプルコードがろくになかったり、あっても酷いサンプルだったりする。
まぁ、昔に比べれば少しはよくなりつつあるようにも見受けられるが。

309:デフォルトの名無しさん
07/03/30 02:57:04
MSの解説って日本語でおkなとこが一杯あるしな。
関数リファレンスとかはまだマシだけど。

310:デフォルトの名無しさん
07/03/30 02:59:46
SDKの中にサンプルあるだろ?

311:デフォルトの名無しさん
07/03/30 03:04:31
>>310
お前、ちゃんと見たことないだろ。 メチャクチャだぞ、SDKのサンプルは。
あんまりにも酷いんで近年はあんまりみてないけど、ひょっとして最近はマシになってんのか?

312:デフォルトの名無しさん
07/03/30 07:20:34
そういえば最新版のWindowSDKからSampleがいくつか削除されてるな
ATLとMFCを使ってた奴がが全滅っぽい

313:298
07/03/30 08:12:39
>>303
MSDN読んだ上の疑問だったのです。
用途としての理由というか裏づけがイマイチだったし、
家にある参考文献も役に立たなかったので・・・

また、関数の命名上、Create~系とOpen~系には
ルールがあるんではと思い、ここに質問した次第です。


314:デフォルトの名無しさん
07/03/30 08:25:50
>戻り値
>関数が成功すると、ミューテックスオブジェクトのハンドルが返ります。
>この関数を呼び出す以前にそのミューテックスオブジェクトが存在していた場合は、
>この関数は既存のオブジェクトに対するハンドルに返し、GetLastError 関数は
>ERROR_ALREADY_EXISTS を返します。

MSDNのCreateMutexより。本当にMSDNを読んでいたのであれば、
>>301が初耳だなんてことはないのだが。

315:デフォルトの名無しさん
07/03/30 09:38:20
そろそろカチンときそうです。

316:デフォルトの名無しさん
07/03/30 09:44:39
メインスレッドから直接リストボックスにログ表示していますが、
ログが増えるとメイン処理の速度低下が著しいので、
ログ表示スレッドを分離しようかと思います。
ログ情報(テキスト)はパイプで渡そうかと考えているのですが、
他に良い方法ありませんか?


317:デフォルトの名無しさん
07/03/30 09:51:50
分離ってどこに分離?
syslogにのっとって作ると何かと便利

318:デフォルトの名無しさん
07/03/30 10:29:38
WM_SETREDRAW

319:デフォルトの名無しさん
07/03/30 10:38:06
スレッドって言ってるな・・・
同じプロセスならパイプ使うまでもないと思うんだけど。
メモリ空間は同じだぜ?

320:デフォルトの名無しさん
07/03/30 12:09:53
ChooseFont関数でフォント名とサイズを初期設定する方法を教えてください

321:デフォルトの名無しさん
07/03/30 12:16:39
LOGFONT構造体に値をセットして
CF_INITTOLOGFONTSTRUCT フラグ入れればできないか?
つか説明に書いてあると思うんだけど

322:デフォルトの名無しさん
07/03/30 13:39:28
>>321
ありがとう。
確かにかいてあった・・・

>FlagsメンバにCF_INITTOLOGFONTSTRUCTを指定した場合は、この構造体で指定したフォントに最も近いフォントが選択されている状態でダイアログボックスが初期化されます。
これちょっと説明的にわかりずらかった・・

323:デフォルトの名無しさん
07/03/30 17:03:55
>>316
同一プロセス内のスレッド間通信なら、普通にポインタを渡すだけでいい。
(バッファの確保・更新・解放には同期処理が必要)

ただし、リストボックスを作成したのがメインスレッドだと、リストボックスの管理は
メインスレッドが行うので、リストボックスの動作そのものが問題になっていると
意味がない。この場合、ログ表示スレッドからSendMessage等をしても、それを実際に
実行するのはメインスレッドになる。
(ログ表示スレッドはメインスレッドがメッセージ処理を終えるまで待たされる)

また、上手くスレッドを分けたところで、マルチプロセッサでなければ魔法のように
速くなるわけではないので、単純に処理が重いだけだとスレッドを分けても
全体の速度は変わらない。

324:デフォルトの名無しさん
07/03/30 17:08:28
逆に、可能であれば速度低下を嫌うメイン処理こそワーカスレッドにするとよいのだけれど。

325:デフォルトの名無しさん
07/03/30 19:35:28
リストボックスをLVS_OWNERDRAWFIXED|LVS_NODATAで作成して
オーナードローで描画、実データを持たさないようにすれば多少速くなるかな。

326:デフォルトの名無しさん
07/03/30 22:42:52
スレッドにしたところでリストボックスが著しく負荷高いってことには変わりがないと思うよ。
標準のコントロールは大量データを高速に処理できるようになっていないと思う。

327:デフォルトの名無しさん
07/03/30 23:19:35
大量のデータを高速に処理するために標準機能として仮想リストがついているんだが。

328:デフォルトの名無しさん
07/03/31 05:01:29
重くなるってリストに何件データ保持してるんだろ?

実際にそこまで過去のログを表示しておく必要があるか考えてみる

…これは実装とは関係ないか

329:デフォルトの名無しさん
07/03/31 08:50:27
3Dモデリングのライブラリってありますか?
街作ったり、車作ったりの

330:デフォルトの名無しさん
07/03/31 08:57:07
スレタイよく嫁

331:デフォルトの名無しさん
07/03/31 11:15:05
自アプリのwebbrowserコントロール内でユーザが文字列を選択し、
コンテキストメニューから「コピー」を選んだとき、
クリップボードに書き込まれる前になんらかのイベントを
捕捉することはできますでしょうか?

おねがいします。

332:デフォルトの名無しさん
07/03/31 17:04:43
>>331
ヒント:DDK

333:デフォルトの名無しさん
07/03/31 17:35:32
ヒント:DDR

334:デフォルトの名無しさん
07/03/31 17:38:25
ヒント:DDR2

335:デフォルトの名無しさん
07/03/31 17:46:45
ヒント:DDRMAX

336:デフォルトの名無しさん
07/03/31 17:48:55
EDORAM SIMM

337:デフォルトの名無しさん
07/03/31 18:04:40
EROIM ESSAIM

338:デフォルトの名無しさん
07/03/31 18:49:05
  ┏┳┳┓     ハイ.     ┏┳┳┓
┏┫┃┃┃     雑談は   ┃┃┃┣┓
┃┃┃┃┣┓   ここまで.┏┫┃┃┃┃
┃      ┃┃┏━━┓┃┃      ┃
┃ 雑談   ┣┫ . ・∀・ ┣┫. STOP!┃
┗━━┛┗┳━┳┛┗━━┛
            ┏┻┓┃
        ┏━┛  ┣┻┓
        ┗━━┫  ┗━┓
             ┗━━┛

339:316
07/03/31 22:49:05
共有のメモリでリードライトポインタを制御するって意見が多いですね。
パイプにしとけば別プロセスにしたときにも使えるかなってのはあるんですが。。。

速度低下ってのは言葉足らずで、メイン処理を一定周期で
回したいのでログが多くなった瞬間にメイン処理が
待たされるのを避けたいという意味です。
最悪、ログのバッファオーバーフローもあり得るってことで。


340:デフォルトの名無しさん
07/03/31 22:55:04
ソケットにしておけば別マシンからでも使えるぞ。

341:デフォルトの名無しさん
07/03/31 23:38:49
DLLの中からCreateWindowでウィンドウを表示できますか?
でもってその場合hInstanceにはHMODULEを渡すですか?

342:デフォルトの名無しさん
07/03/31 23:56:00
>>341
出来る。それでおk。つーか試した方が早くね?

343:デフォルトの名無しさん
07/03/31 23:57:42
ありがと

344:デフォルトの名無しさん
07/04/01 00:15:48
しつもんがあります。

かなり大量のメモリ確保したいのですがGlobalLockは最高何個まで
メモリ確保できますか?上限とかありますか?メモリが許す限り
無制限でしょうか?
よろしくお願いします。

345:デフォルトの名無しさん
07/04/01 00:18:24
ヒント32ビットOS

346:デフォルトの名無しさん
07/04/01 00:24:18
2^32個ということですね
ありがとうございました


347:デフォルトの名無しさん
07/04/01 00:27:19
ポインタやハンドルは4バイトだから
それを記録する変数のために(2^32)*4を引くのを忘れるなよ。

348:デフォルトの名無しさん
07/04/01 00:31:26
SysListView32で「キーボードカーソル」
の現在位置の取得及び設定はどうやるのですか?

ウィンドウの中で点線で囲まれていて、
Ctrl + 上下キーで移動する部分です。

349:デフォルトの名無しさん
07/04/01 00:54:39
>>344>>346
Win32では、基本的にリニアアドレス空間の半分をシステムが持っているので、
実際にユーザが使えるのは理論上2^31Byte、つまり2GiB。
ただしNT系ではリンク時の/LARGEADDRESSAWAREと
boot.iniの/3GBオプションにより、3GiBまで広がる。

/LARGEADDRESSAWARE付けた32ビットEXEをWin64で動かしたら4GiBまでいけるという話もある。

実際にはそこからEXE/DLL、つまりコードやリソース、
それにスタックなどの分も差し引かれるのでもう少し減る。

勿論空き仮想メモリの量が実際的な上限。

ところで1度に1MiB以上の確保するときにはVirtualAllocが推奨されている。
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)

350:デフォルトの名無しさん
07/04/01 01:06:56
GiBってなんだ

351:デフォルトの名無しさん
07/04/01 01:13:44
>>350
URLリンク(hwb.ecc.u-tokyo.ac.jp)

352:デフォルトの名無しさん
07/04/01 02:13:53
MiBはあちこちで記憶を消して回るやつらのことだろ

353:デフォルトの名無しさん
07/04/01 04:11:05
>>352
DELIVER THE GALAXY OR EARTH WILL BE DESTROYED.
SORRY!

354:デフォルトの名無しさん
07/04/01 04:13:49
ウィルスミスカコイイ

355:デフォルトの名無しさん
07/04/01 05:05:59
virus miss?

356:デフォルトの名無しさん
07/04/01 08:44:47
32ビットでもWindows Server 2003 R2 Datacenterなら128GBまでOK。
Windows 2000 Datacenter Serverでも64GB

357:デフォルトの名無しさん
07/04/01 09:03:57
知識としては良いのかも知れんが
本当に2GBのメモリを要求するようなプログラムは
設計から間違ってる気がする

358:デフォルトの名無しさん
07/04/01 10:38:31
科学計算やるソフトなら本当に2GBまで使ったりするけどね~

359:デフォルトの名無しさん
07/04/01 10:54:45
32bitのWindowsでやるようなことじゃないな。

360:デフォルトの名無しさん
07/04/01 11:00:23
>>331
IHTML*Events::oncopy()
書き込み前か書き込み後かは知らん

361:デフォルトの名無しさん
07/04/01 11:10:13
>>356

1プロセスは4GBまでだろ

362:デフォルトの名無しさん
07/04/01 11:11:01
タスクトレイのアイコンはウィンドウがないと作れないの?

363:デフォルトの名無しさん
07/04/01 11:21:29
>>361
志村、AWE、AWE

>>362
ウィンドウがないとタスクトレイメッセージが受け取れない

364:デフォルトの名無しさん
07/04/01 11:21:46
>>361
AWEとか抜け道はあるだろ。

365:デフォルトの名無しさん
07/04/01 11:25:33
>>359
修士論文ならそれでもなんとかなる@理論化学

366:デフォルトの名無しさん
07/04/01 12:42:14
>>362

っ コールバック関数

367:デフォルトの名無しさん
07/04/01 13:38:48
Shell_NotifyIconにもNOTIFYICONDATAにも
コールバック関数を指定する所は見当たらんが

368:デフォルトの名無しさん
07/04/01 14:27:23
プロフィールなどに
Microsoft MVP for Windows SDK
とか書いてる人がいるんですが、どう言う意味なんでしょうか?


369:デフォルトの名無しさん
07/04/01 14:29:41
MVPって(藁) コピペ2回目
スレリンク(tech板)

370:デフォルトの名無しさん
07/04/01 16:24:12
しっ、見ちゃいけません

371:デフォルトの名無しさん
07/04/01 18:05:11
クライアント領域の更新にInvalidateRect(hWnd,NULL,TRUE);を使っているのですが画面がちらつきまくります。
他に良い方法はないでしょうか?

372:デフォルトの名無しさん
07/04/01 18:12:03
InvalidateRect(hWnd,NULL,FALSE);

373:デフォルトの名無しさん
07/04/01 18:23:08
>>372
ありがとうございます。

マシにはなりましたが書き直す量が多くなって間隔が短くなるとどうしてもちらつくもんですね……

374:デフォルトの名無しさん
07/04/01 18:39:51
>>373
背景を消す
新しいのを書く
これを繰り返すからちらつくんだよ。

WM_ERASEBKGNDが呼ばれているなら何もせずreturnする。

ダブルバッファリングをつかう。
方法は検索すれば見つかると思う。
要するにメモリ上で背景や絵を描画して
その完成させた絵をウィンドウに描画する。

375:デフォルトの名無しさん
07/04/01 21:36:17
カスタムリソースのPNGをHBITMAPで読み出してBITMAPと同じように扱うにはどうすればいいのでしょうか?
PNG GDI+ libpng カスタムリソース等であらかたググってみましたが理解できませんでした。

URLリンク(hp.vector.co.jp)
も試してみましたがlibpng.libに変な部分があるという旨のエラーが出て(bcc32)コンパイルできませんでした。
うぐぅ

376:デフォルトの名無しさん
07/04/01 21:45:22
全然確認してないけど後者はマングリの問題な気がする

377:デフォルトの名無しさん
07/04/01 21:50:16
>>375
エラーはコピペしろ。エスパーに期待するな。
だけど俺も>>376に一票。
そのlibpngもbccでビルドしたのか?

378:デフォルトの名無しさん
07/04/01 21:59:06
Error: 'C:\PROGRAM FILES\BORLAND\BCC55\LIB\LIBPNG.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

です。すいません。
ビルドは説明通りVC++EEでやりました。それがいかんのですね。
bccならどうコンパイルしていいのかがわからなかったもので。

379:デフォルトの名無しさん
07/04/01 22:00:48
>>378
っ coff2omf.exe

380:デフォルトの名無しさん
07/04/01 22:04:12
逆にお前が書くプログラムもVC++でコンパイルすればいい。

381:デフォルトの名無しさん
07/04/01 22:13:13
>>379
コンパイルはうまくいったみたいなのでこれから実際にloadpngが使えるか試してみます。

>>380
猫で始めたんですがVC++の使い方がよくわからないんですよね。
PSDKのインストールまではやってみたんですがコンパイルもエラーでまくるし……

382:デフォルトの名無しさん
07/04/01 22:23:59
プログラム→Visual C++ 2005 Express Edition→Visual Studio Tools→Visual Studio 2005 コマンド プロンプト
コンパイラのコマンド名はbcc32ではなく、VC++ではcl。これでVC++コンパイラが使える。
コンパイラオプションも色々違うが、MSDN2を見てくれ。

383:デフォルトの名無しさん
07/04/01 22:26:56
連投すいません。
プログラム内で hBmpBackGround = LoadPng("./images/background.png"); 記述したところ
 Error: 外部シンボル '_png_create_read_struct' が未解決(D:\MY DOCUMENTS\VISUAL STUDIO 2005\PROJECTS\****.OBJ が参照)
などのエラーが16個出ました。

そのままloadpng.cppをコンパイルすると
 警告 W8017 loadpng.cpp 1: マクロ 'STRICT' の重複定義
 エラー E2109 loadpng.cpp 123: 許されない型(関数 LoadPng(const string &) )
 エラー E2108 loadpng.cpp 124: typedef 'png_color' の使い方が間違っている(関数 LoadPng(const string &) )
とかforループの行に対して
 警告 W8008 ****.cpp 432: 条件が常に真(関数 ***() )
が出るので1、4、11行目はコメントアウトしています。
他の必要なファイルは***.cppと同じディレクトリです。画像は./images/以下にあります。

384:デフォルトの名無しさん
07/04/01 22:29:28
>>382
bcc32もVisual Studio 2005 コマンド プロンプトから動かしているんですが、
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\windows.h(28) : warning C4068: 不明なプラグマがありました。
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\windows.h(200) : fatal error C1083: include ファイルを開けません。'windef.h': No such file or directory
というエラーが出てコンパイルできないので仕方なくbccを使ってます……

385:デフォルトの名無しさん
07/04/01 22:44:11
英語だからって条件反射でエラー文読むの拒否してないか?

386:デフォルトの名無しさん
07/04/01 22:47:03
>>385
ではなくて、自分の作ったファイルならともかくVCの用意してるファイルでのエラーなんかどう対処すればいいんだ……
ってのとマイクロソフトへの不信感から勝手にお手上げしてる感じですね……

387:デフォルトの名無しさん
07/04/01 22:48:08
はあ?

388:デフォルトの名無しさん
07/04/01 22:51:08
面白くなってまいりました

389:デフォルトの名無しさん
07/04/01 22:55:06
>>384
なぜbcc32でVCのインクルードフォルダが現れる?

390:デフォルトの名無しさん
07/04/01 22:56:27
1つめは対処法がわからないのでとりあえず置いておいて、
2つめに関してはPSDKのincludeにあったものをVCのディレクトリにコピーしました。
とりあえずC1083になるファイルは全部コピーしたのですが

C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xlocale(326) : warning C4530: C++ 例外処理を使
っていますが、アンワインド セマンティクスは有効にはなりません。/EHsc を指定してください。
d:\my documents\visual studio 2005\projects\nyaopuyo\loadpng.cpp(121) : error C2664: 'memset' : 1 番
目の引数を 'std::_Vector_iterator<_Ty,_Alloc>' から 'void *' に変換できません。(新しい機能 ; ヘルプ
を参照)
with
[
_Ty=png_color,
_Alloc=std::allocator<png_color>
]
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。

等のエラーが多数出ます。

391:デフォルトの名無しさん
07/04/01 22:57:19
>>389
あ、それはVC++コマンドからclでコンパイルしたときのものです。

392:デフォルトの名無しさん
07/04/01 23:01:03
>>384
> bcc32もVisual Studio 2005 コマンド プロンプトから動かしているんですが

エラーメッセージの内容から言って、それはVC++のclコンパイラが出しているものだ。
bcc32じゃない。
それにしても、clがwindows.hを読んでunknown pragmaとか、
windef.hが無いだとか、明らかにおかしい状態になっているな。
インストールミスかなにかじゃないのかな。あるいはウィルスにでも
食い荒らされたか。

393:デフォルトの名無しさん
07/04/01 23:02:40
>>390
C4530はエラーではなくワーニングだが(それぐらいは区別しろ、頼むから)
clに-GXオプションを与えればよい。

2番目はあんたのユーザコードloadpng.cppの問題だろ。

394:デフォルトの名無しさん
07/04/01 23:07:32
>>390
>memset(vPalette.begin(), 0, nPal * sizeof png_color);

こんなことをやっている糞コードのようだな。
こんなコードはドブに捨ててしまえ……と言いたいところだが、とりあえず
vPalette.begin -> &vPalette[0]
とでも書き換えるんだな。

395:デフォルトの名無しさん
07/04/01 23:10:41
>>390
コピーする必要は無い。
単にPlatfrom SDKのIncludeフォルダをインクルードディレクトリに追加すれば十分だ。

396:デフォルトの名無しさん
07/04/01 23:11:39
>>393
-GXよりも警告メッセージのとおり/EHscがお勧め。
VC++ 8からGXは推奨しないというような警告が出るようになったはず。

397:デフォルトの名無しさん
07/04/01 23:15:04
コンパイルが通ったら今度は「うまく動きません。どうすればいいんでしょうか?」と長いソースを張り付ける予感。
しかし、画像のロードとセーブだけならもっと簡単なライブラリがあるんだけどなw

398:デフォルトの名無しさん
07/04/01 23:15:27
>>390
2番目のはイテレータとポインタをごっちゃにしているのが悪い。
イテレータ⊇ポインタだが、逆は成り立たない。

std::vector<png_color> v;というのがあったとしたら、
vの先頭要素へのポインタは&v[0]で取得できる。
memsetを使わずに、std::fill使えとか、vectorのメンバでどうにかしろとも言えるが。

399:デフォルトの名無しさん
07/04/01 23:19:10
みなさんありがとうございます。+゚:。(つД`)*.゚。

>>392
自分でincludeディレクトリいじったことはもちろん無いし、ウィルスも恐らく無かったので
インストールミスなんでしょうかね……

>>393>>396
仰る通りで申し訳ないです。/EHscでコンパイルを試みました。

>>394
3箇所書き換えたらエラーが
 loadpng.cpp(121) : error C2064: 0 引数を取り込む関数には評価されません。
に変わりました。

>>395
そうだと思ったんですがその方法を調べるとまた時間がかかりそうだったのでその場しのぎの苦肉の策ということで……

400:デフォルトの名無しさん
07/04/01 23:23:15
>カスタムリソースのPNGをHBITMAPで読み出してBITMAPと同じように扱うにはどうすればいいのでしょうか?
>PNG GDI+ libpng カスタムリソース等であらかたググってみましたが理解できませんでした。


この質問を自分もしたかったので、成り行きに注目していたんだが。。。

401:デフォルトの名無しさん
07/04/01 23:26:04
>>399
vPalette.begin() -> &vPalette[0]
         ↑
かっこぬけてはるみたいやね。
もう一つも同じ要領。

402:394
07/04/01 23:26:07
>>399
悪い悪い、
&vPalette[0]()にしちゃったのか?

正しくは、
vPalette.begin() -> &vPalette[0]
だ。


403:デフォルトの名無しさん
07/04/01 23:31:35
コンパイルはできてオブジェクトファイルまでは作成できました。
ライブラリが見あたらないと出たのでSDKから根こそぎコピーしました。

MSVCRT.lib(MSVCR80.dll) : error LNK2005: _abort は既に LIBCMT.lib(abort.obj) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
error LNK2019: 未解決の外部シンボル __imp__ReleaseDC@8 が関数 "struct HBITMAP__ * __cdecl LoadPng(中略) で参照されました。

等のエラー、警告が山ほど出てきました……
根こそぎコピーがマズかったのでしょうか。

404:デフォルトの名無しさん
07/04/01 23:32:24
memset(&vPalette, 0, nPal * sizeof png_color);
もしこう書いているのであれば、単にvPalette.resize(nPal)で十分なはず。
png_colorはどうせただのPODな構造体だろ。
デフォルト初期化と0クリアは同じような結果になるはず。

405:デフォルトの名無しさん
07/04/01 23:35:23
>>400
いやはや実は俺もなんだ・・・

406:デフォルトの名無しさん
07/04/01 23:36:17
もう働きたくない

407:デフォルトの名無しさん
07/04/01 23:43:26
つうか>>375のリンク先のLoadPng()って、ファイルからロードする仕様じゃん。
カスタムリソースをロードしたいんじゃなかったの?

つうかVC++持ってるんなら素直にCImage使えやってのは禁句か。
GDI+が対応してるフォーマット(PNGを含む)は全対応だし、リソースからの
ロードも出来るぞ。
atlimage.hな。

408:デフォルトの名無しさん
07/04/01 23:44:39
Express EditionにはATLないだろ。

409:デフォルトの名無しさん
07/04/01 23:47:30
ああ、Express Editionか。これは失礼。

410:375
07/04/01 23:53:23
>>407
カスタムからロードしたかったんですが、できるかどうかわからなかったのでとりあえずやってみようって感じです。
で、できないんですか……残念です。

VC++はウィンドウ表示するだけのプログラムすらコンパイルできなかったので(↑でコンパイルまでは解決)bccに乗り換えてました。
本格的にやりたいので製品版も買おうと思うんですが、製品版も今のような調子だったりしないか怖くて手が出ません。
あと、EEでも猫の本とだいぶ違っているし(猫のが古いんだと思いますが)、C++はまだ始めたてだったりするのでそれも手が出ない理由です。

ちなみに製品版買うならVisual Studio 2005 Standard Edition(Academic Edition)ですかね?
やりたいことはWINAPI(将来的にはDirectXでも)でゲーム制作です。

411:デフォルトの名無しさん
07/04/01 23:54:54
libpngはPNG_SETJMP_NOT_SUPPORTEDを指定してビルドしない限り、
longjmp()でエラーレポートを行う。
>>375のコードはsetjmp()を呼んでいないようだから、多分全く
エラーに対応していないな。
もっとマシなコードを探せ。
setjmp(), longjmp()である以上、デストラクタは実行されないから、
その区間でvectorなんぞを使うのは論外だ。

ま、CreateDIBSection, png_create_read_structあたりのキーワードで
google codesearchでもすれば、色々引っかかるだろ。


412:デフォルトの名無しさん
07/04/01 23:58:56
>>410
> 本格的にやりたいので製品版も買おうと思うんですが、製品版も今のような
> 調子だったりしないか怖くて手が出ません。
PlatformSDKはEnterprise Editionではそもそも付属してなくて自分で別途
インストール&環境設定しなきゃいけないからな。
あんたがインストールにミスったってだけの話だろ。

Visual Studioの品質の問題じゃない。
あんたに問題解決能力がないだけの話。それは、どんな製品を使おうが変わらないよ。

413:348
07/04/02 00:02:25
おながいします・・・orz

414:デフォルトの名無しさん
07/04/02 00:04:50
>>411
VC++ならSEHとの絡みでsetjmp/longjmpでも自動変数のデストラクタが呼ばれるはず

415:デフォルトの名無しさん
07/04/02 00:05:28
お前らスルー汁

416:デフォルトの名無しさん
07/04/02 00:06:03
ていうかもう、API全然関係ないなwww

417:デフォルトの名無しさん
07/04/02 00:06:38
>>414
へぇ。それはいいことを聞いた。教えてくれてありがとう。
ま、それに依存したコードは書く気になれないが……

418:デフォルトの名無しさん
07/04/02 00:07:01
何だこのスレの伸び具合は

419:375
07/04/02 00:08:05
>>411
ちょっくら頑張ってきます( `・ω・´)

>>412
了解、明日にでもVCとSDK再インスコしまつ。

>>416
サーセンwww

420:デフォルトの名無しさん
07/04/02 00:12:50
Platform SDKよりもWindows SDKのほうがお勧め。
スタートメニューの中にVS 2005への設定を行うショートカットがある。

それを実行するだけで、VSコマンドプロンプトからもIDEからも
インクルードパスの設定を含めWindows SDKを使用できる状態になる。


421:デフォルトの名無しさん
07/04/02 00:19:56
開発環境すらちゃんと構築できないような奴には無理ということで

422:デフォルトの名無しさん
07/04/02 00:25:05
>>413
取りあえず LVM_ 以下の全メッセージを調べてみろ。話はそれからだ。

423:デフォルトの名無しさん
07/04/02 00:25:22
初心者叩きはその辺にしておいて結局のところこれは誰もわからんのだね?

>カスタムリソースのPNGをHBITMAPで読み出してBITMAPと同じように扱うにはどうすればいいのでしょうか?

424:デフォルトの名無しさん
07/04/02 00:29:04
普通にLoadResourceで読んでBITMAPに変換すれば

425:デフォルトの名無しさん
07/04/02 00:33:19
EE使ってるちょちんちゃだから、PNGのリソースは妄想に過ぎないに1000ペリカ
















と思ったら今日は四月馬鹿じゃんw

426:デフォルトの名無しさん
07/04/02 00:54:53
もう四月馬鹿は終了している件

427:デフォルトの名無しさん
07/04/02 00:55:13
>>423
リソースをバイナリデータとして読み取り、それをストリーム化、
Gdiplus::BitmapのIStream*を受け取るコンストラクタへ渡す。
そしてメンバのGetHBITMAPでビットマップハンドルを得る。

これでいい?

428:デフォルトの名無しさん
07/04/02 01:01:58
UpdateLayeredWindowでウィンドウを透明化させると黒色が完全透明扱いに
なっちゃうんだけどどうやったらSetLayeredWindowAttributeと同じような処理にできるかな

429:デフォルトの名無しさん
07/04/02 01:13:59
黒でもアルファ値は255にする

430:デフォルトの名無しさん
07/04/02 01:38:46
>>427
横やりでなんですが僕も気になるので実装を詳しく書いて頂けると助かります。

431:デフォルトの名無しさん
07/04/02 01:45:04
>>430
詳しくも何も、書いてあることそのままやればいいだけじゃないのか?

432:デフォルトの名無しさん
07/04/02 01:49:10
さっきから「僕も気になる」って人が多い件

433:デフォルトの名無しさん
07/04/02 01:49:14
GDI+を使うんならPNGのローディングの面倒はGDI+が見てくれる。
>>427そのままでいいはずよ。

434:デフォルトの名無しさん
07/04/02 02:01:09
Bitmap::Bitmap(HINSTANCE,WCHAR*)
使えるか知らんがこんなコンストラクタもあるみたいだ

435:デフォルトの名無しさん
07/04/02 02:39:41
TreeViewのExpandをキャンセルするにはどうしたらいいんでしょうか?


436:デフォルトの名無しさん
07/04/02 02:48:06
僕も気になってるので完全なソースコードをください

437:デフォルトの名無しさん
07/04/02 02:50:12
僕も絶対に気になります。
ソースコードお願いしますこれは絶対に必要ですね。

438:432
07/04/02 03:10:06
すまない。俺が悪かったwww

439:432
07/04/02 03:15:06
>>435
ツリーが展開される直前に親ウィンドウに
TVN_ITEMEXPANDINGが通知されるからそれを引っ掛ける

440:デフォルトの名無しさん
07/04/02 05:18:15
僕も「僕も気になります」が大杉て気になります

441:デフォルトの名無しさん
07/04/02 07:05:30
質問スレで言うのもなんだけど、>>427のレスだけでコードが書けない奴って真性のバカだろ。

442:デフォルトの名無しさん
07/04/02 07:12:51
確実に言えるのは書けなかったとしたらもはやこのスレで扱う内容ではない

443:428
07/04/02 08:24:22
>>429
SetPixelで0x00ffffffは白が表示されて0xffffffffだと透明になるから
アルファ値は読んでるみたいなんだけど、
0x00000000でも透明になっちゃうんだよ

444:デフォルトの名無しさん
07/04/02 11:37:15
>>439
ありがとうございました。

もうひとつお願いしたいんですが、
イメージインデックスを変える方法はどうしたらいいんでしょうか。



445:439
07/04/02 11:47:50
>>444
イメージリスト作ってLVM_SETIMAGELISTでSendする

446:デフォルトの名無しさん
07/04/02 11:50:33
間違えたTVM_だった

447:デフォルトの名無しさん
07/04/02 12:16:19
URLリンク(msdn2.microsoft.com)

448:デフォルトの名無しさん
07/04/02 12:26:55
猫でも分かる~でWin32プログラミングの基礎は分かりますか?

449:デフォルトの名無しさん
07/04/02 12:30:27
猫のWin32は言っちゃ悪いけどひどいコーディングしてると思う
メニューのとこ見たら右クリックごとにメニューの生成と破棄繰り返してたよ。

450:デフォルトの名無しさん
07/04/02 12:36:43
オブジェクト指向的でいいじゃん

451:デフォルトの名無しさん
07/04/02 12:37:27
>>449
そうですか・・・
本を買う金がないので、400章まであるサンプルを一つ一つ手打ちで勉強してるんですが、
ところどころ非効率なコードが書いてあるということですね。注意して読みます。
ありがとうございました。

452:デフォルトの名無しさん
07/04/02 12:38:09
方法論を学ぶ所であってコードを学ぶ所ではないと意識しておけばおk

453:デフォルトの名無しさん
07/04/02 13:25:27
効率に限らず、独学の初心者的な泥臭いコードが多い
あれは教科書ではなくノートだと考えろ
丸写しすると他人の変な癖まで取り込むことになる

454:デフォルトの名無しさん
07/04/02 13:31:01
反面教師なんだよ。

455:デフォルトの名無しさん
07/04/02 13:36:47
ついでに思うのは果たして400章までやる必要があるかどうか?

応用って言葉の意味が無いよな

456:デフォルトの名無しさん
07/04/02 13:39:28
必要な動作を追うには、再利用性を考えて効率的に使えるように書かれたコードよりも見やすい。
STLやboostのコードを逐次追うような状態を想像してみると分かりやすいだろう。

457:デフォルトの名無しさん
07/04/02 14:14:27
まぁでもなーーーーんもわかんない人にはわかりやすいとは思う。
俺も猫からプログラミング入ったクチだし。数年前の話だけど。

458:デフォルトの名無しさん
07/04/02 15:21:10
猫は雰囲気だけ掴んで詳細はMSDNって感じだな。

459:デフォルトの名無しさん
07/04/02 16:20:28
猫とMSDNの間に差ありすぎだろ

460:デフォルトの名無しさん
07/04/02 17:18:33
猫を含めたWEBサイトだけで窓プログラミングを覚えた
(正確にはMFCの本を1冊だけ買ったけど)俺でも
猫のコードを「あまり良くない」と思えるぐらいには成長した
結局>>452>>456だと思う

461:デフォルトの名無しさん
07/04/02 17:41:54
猫はほとんど見ないで解説サイトだけで勉強したけど
猫のコードが何故よくないのかわからない俺もいますよ
まだまだ勉強不足ってことだろうか・・・

462:デフォルトの名無しさん
07/04/02 18:13:38
猫のコードは普通に醜いし
処理過程も追いにくいと思うぞ
窓初心者ならこっちのほうがお勧め
URLリンク(wisdom.sakura.ne.jp)
トピック毎のサンプルが短いから
C言語の知識なくても解説見て丸写ししてるうちに分かるはず
ちょっとバグってる所もあるけど猫ほどじゃないし

463:デフォルトの名無しさん
07/04/02 18:22:46
後学のために質問なんだけど、
GDI+とか他のライブラリ使わないで、
PNGの画像ファイルをDCに描画する方法って、
どうやればいいのか、解説してるところあったら教えてほしい。

464:デフォルトの名無しさん
07/04/02 18:30:43
libpngでテンポラリメモリ上に展開したのち、SetDIBitsToDeviceとか
 DIBSectionのメモリ上に展開してBitBltとか。
OleLoadPictureしてRenderとか。

465:デフォルトの名無しさん
07/04/02 18:37:11
windowを必要としないソフトでメッセージだけを受け取られますか?

466:デフォルトの名無しさん
07/04/02 18:37:59
投げる側がPostThreadMessage使うなら、ウインドウは要らない。

467:デフォルトの名無しさん
07/04/02 18:41:35
libpngが既に外部ライブラリだと思うんだけど
そういうことでなくて?

468:デフォルトの名無しさん
07/04/02 18:42:51
>>465
エスパー回答するとシステムトレイ上のアイコンからWM_COMMANDを投げたりできる
でもこれは厳密にはWindowを作ってることと一緒

469:デフォルトの名無しさん
07/04/02 19:15:47
>windowを必要としないソフトでメッセージだけを受け取られますか?
Windowを作らずに、Windowメッセージだけを取れるか?という意味?
例えばタイマーとか

470:デフォルトの名無しさん
07/04/02 19:46:29
>>463
URLリンク(www.w3.org)
ここに詳しく書いてある。
ライブラリを使うのが嫌なら自前で実装しろ。

>>465
必用としなくても見えないウインドウを生成すればいいだけ。
知恵が足りない。

471:デフォルトの名無しさん
07/04/02 20:05:02
ダイアログに文字を表示する方法でリソースに

LTEXT "URLリンク(hogehoge)

と書けば表示されるのですが、ということは、SetDlgItemTextは
なんのために存在するのでしょうか??

472:デフォルトの名無しさん
07/04/02 20:05:34
"が抜けていました
LTEXT "URLリンク(hogehoge)です

473:デフォルトの名無しさん
07/04/02 20:08:42
他のコントロールを変更するときに使う。
もちろん、LTEXTも変更できるので、位置だけ取って、あとから必要に応じて書いたり

474:デフォルトの名無しさん
07/04/02 20:08:53
何でもかんでも静的に決まると思ったら大間違いだ

475:デフォルトの名無しさん
07/04/02 20:10:20
俺はlibpngとlibjpegとlibtiffを使って相互にフォーマット変換できるクラスを作った。
もちろん、DIBに変換できるのは言うまでもない。
いや、ただそれだけなんだけど。

476:デフォルトの名無しさん
07/04/02 20:13:35
>>473
他のコントロールを変更するとは、どういう意味なんでしょ??

477:デフォルトの名無しさん
07/04/02 20:15:12
ボタンならボタンに表示されてる文字列が変わる。
というかSetDlgItemTextを何だと思ってたんだ。

478:デフォルトの名無しさん
07/04/02 21:39:45
動的に変えたい場合

479:デフォルトの名無しさん
07/04/02 21:51:29
逆に考えるんだ
OSもダイアログテンプレートのLTEXTの文字列を読んで
SetDlgItemTextを呼び出してるのだと

480:デフォルトの名無しさん
07/04/02 22:35:56
>>470 thx. やってみる。

481:デフォルトの名無しさん
07/04/02 22:52:25
CreateDialogを使用してダイアログを表示したいのですが戻り値がNULL、GetLastErrorの値が1812
になり表示できません。
ボタンを押したときに表示したいのでメッセージループに下のように埋め込んでいるのですが。
(ShowWindowとUpdateWindowは省略しています)

case WM_COMMAND:
hDlgWnd =(ghInst, MAKEINTRESOURCE(IDD_DIALOG1), ghWndKihon, (DLGPROC)MyDlgProc);

なにか、こうじゃないの?的な物でもいいのでヒントください。

482:デフォルトの名無しさん
07/04/02 22:54:46
肝心の「CreateDialog」が抜けていますがコピペミスなのでw気にしないでくださいw

483:デフォルトの名無しさん
07/04/02 23:02:49
エラーコード1812の意味を調べりゃ一目瞭然

484:デフォルトの名無しさん
07/04/02 23:04:59
481ではないしついでに聞こうとも思っていないが、
調べてみたらなるほど一目瞭然だな。

485:デフォルトの名無しさん
07/04/02 23:11:32
Error Lookupで見ると「指定されたイメージ ファイルはリソース セクションを含んでいません。 」。

ごめん、馬鹿なんです。resource.hの中に手動で何か追加するとか、そんな感じなの?


486:デフォルトの名無しさん
07/04/02 23:16:25
EXEの中にダイアログのデータが入っていないということ。
EXE内にリソースを入れるようなことをしたか?

487:デフォルトの名無しさん
07/04/02 23:31:35
>>486
おお!VCにScript1.rcを追加したら表示されまいた!
ありがとー!


また来ますノシ

488:デフォルトの名無しさん
07/04/02 23:34:58
低脳の悪寒

489:デフォルトの名無しさん
07/04/02 23:40:12
GetLastErrorの値まで調べておきながらエラーメッセージを調べないって何なんだ・・。

490:デフォルトの名無しさん
07/04/02 23:42:36
>>487
二度と来なくていい

491:471
07/04/03 00:04:38
>>474
>>477
>>478
>>479
ありがとうございます
静的な場合はリソースに記述
動的な場合はSetDlgItemTextで記述
という感じに考えます

492:デフォルトの名無しさん
07/04/03 01:51:54
>>443
アルファ値って255が不透明のはずだったけど

493:デフォルトの名無しさん
07/04/03 02:32:04
VCのリソースエディッタでダイアログをデザイン、ラジオボタンを並べました。
グループボックス内に配置し2グループに分けたのですが
どうも両グループ同一と認識いされているようで、2個同時にオンにできません。

同時に2個オンにするにはどうすればいいのでしょうか?

494:デフォルトの名無しさん
07/04/03 02:40:07
各グループで先頭のタブオーダーを持つラジオボタンのグループプロパティをTRUEにする

495:デフォルトの名無しさん
07/04/03 02:50:36
>>494
出来ました。夜分にサンクス。


496:デフォルトの名無しさん
07/04/03 08:27:36
>>493
ラジオ1 ラジオ2 ラジオ3 で1塊、ラジオ4 ラジオ5 ラジオ6 で1塊 として
(レイアウト - タブオーダー で順序そろえてから)

「ラジオ1」 と 「ラジオ4」 のプロパティ グループ にチェック
それ以外のラジオのプロパティ グループ はアンチェック

これで望みの動作になると思われ

497:デフォルトの名無しさん
07/04/03 09:20:12
Vistaの検索を自分のプログラムから利用するための
情報へのポインタはないでしょうか?

498:デフォルトの名無しさん
07/04/03 09:32:21
はい。

499:デフォルトの名無しさん
07/04/03 11:54:20
>>492
そういえばそうだ
ますますわかんなくなってきた

500:デフォルトの名無しさん
07/04/03 12:00:45
ストリーミング放送(livedoorのネットラジオ)を録音するのに良い方法はないでしょうか?
放送をダウンロードするのではなくて、現在再生中の放送を録音するみたいなAPIとか無いものでしょうか?
ちなみに当方VB6です。

501:デフォルトの名無しさん
07/04/03 12:59:26
>>499
RGBQUAD の rgbReserved が 0 デフォルトなんだよね…
1-alpha と alpha がごっちゃごちゃだわ

502:デフォルトの名無しさん
07/04/03 13:28:06
>>500
せめてもう少しマトモな書き方ができないものか

503:デフォルトの名無しさん
07/04/03 13:52:26
LivedoorStreamingRecording()

504:デフォルトの名無しさん
07/04/03 14:01:01
>>500
物理的にライン出力と入力を線でつないで録音するといいよ。

505:デフォルトの名無しさん
07/04/03 15:08:08
>>503
探したじゃないかw

506:デフォルトの名無しさん
07/04/03 19:28:29
プログラム中で生成したカラーのビットマップをマウスカーソルに
設定するにはどうしたらいいでしょうか? マウス用のリソースを
用意せずにリアルタイムにマウスカーソルを書き換えたいのです。


507:デフォルトの名無しさん
07/04/03 19:54:33
win32APIの勉強し始めたばかりのオレが答えてみる
マウス表示を消してマウス位置を調べてそこにBMPを描画すればいいんじゃね?

508:デフォルトの名無しさん
07/04/03 19:56:48
CreateCursorしといて、WM_CURSORとかでSetCursorでなくて?
システムグローバルに書き換えたい、というなら話は別だが

509:デフォルトの名無しさん
07/04/03 20:17:44
よろしくお願いしまっす。

SetForeGroundWindow等でもフォアグラウンドになったりしない
ウィンドウってできないんでしょうか。

現在はWS_EX_NOACTIVATEをつけて、
WM_MOUSEACTIVATEにMA_NOACTIVATEANDEATを返すようにして
普通ではアクティブ化しないようになっています

具体的にはツールチップのようなウィンドウを
マウ筋の「スクロールを監視」に引っ掛からないようにしたいんですが。
当該ウィンドウ上でホイールを回転させると
アクティブ化しないまでも他のウィンドウのフォーカスを奪ってしまうんです


510:デフォルトの名無しさん
07/04/03 20:30:48
制御したい動作のはフォアグラウンド化なのか、アクティブ化なのか、フォーカス持ちなのか。

511:509
07/04/03 21:02:37
どうも。言葉が曖昧ですんません
現在アクティブなウィンドウが非アクティブにならなきゃいいんです。。
つまりアクティブ化しないように出来ませんかってことで

512:506
07/04/03 21:02:43
>>508
CreateCursorを調べてみましたが、モノクロのビットマップカーソルは
作成できるようです。今回はカラー(24bit以上か、せめて16bit以上)
のマウスカーソルを作りたいのです。

システムグローバルではなくて、自アプリのカーソルのみです。

>>507
その方法だと、自アプリの縁を少しはみ出した状態で(ホットスポットが
自アプリ内)、クライアント領域の外にマウスが描画されないです。

513:506
07/04/03 21:11:20
カラーのマウスカーソルに関しては、CreateIconIndirectっていうのを
見つけました。

514:デフォルトの名無しさん
07/04/03 21:40:59
>>512
URLリンク(msdn2.microsoft.com)

515:デフォルトの名無しさん
07/04/03 23:23:11
Response & Balance 2600cc Dohc Engine Twin Turbo

516:デフォルトの名無しさん
07/04/04 01:19:05
>>511
違う方法になるけどWS_EX_TRANSPARENTは駄目?

517:509
07/04/04 02:20:26
>>516
ありがとうございます。

マウスホイールが透過するようになりました
が、クリックも透過してしまいます。
なんか情報後出しになってしまいましたが。


518:517
07/04/04 02:36:46
>>517
WM_COMMANDを監視してマウ筋から送られてくるコマンド(message)に対して
return値をごにょごにょする

519:デフォルトの名無しさん
07/04/04 06:46:10
>>509
WM_WINDOWPOSCHANGINGでSWP_NOACTIVATEを強制的に立てる

520:デフォルトの名無しさん
07/04/04 09:52:27
マウスフックを使用したプログラムを作成しているのですが、
システムフックが上手く機能しません。以下の事例と全く同じ現象です。
URLリンク(rararahp.cool.ne.jp)
他のプログラムのソースを参考にしたいので、何かあれば教えて下さい。
お願いします。<(_ _)>

521:デフォルトの名無しさん
07/04/04 10:32:21
>>520
その先読んでみたけど仕様を勘違いしているただの間抜けにしか見えないんだが

522:デフォルトの名無しさん
07/04/04 11:56:15
ウィンドウ上にボタンを配置し、クリックで新しいウィンドウを表示するプログラムを作成しています。
クリックで呼び出される側は  WM_DESTROY メッセージが来たときに

  SendMessage(hWnd, WM_CLOSE, 0, 0L);

として終了しています。
で、質問なのですがクリックで表示するウィンドウのCreateWindowで取得したハンドルは
クローズしなくてもリークしませんか?
しないといけない場合、どこですればいいのでしょうか?


523:デフォルトの名無しさん
07/04/04 14:50:19
親ウィンドウが破壊されるとき、
子ウィンドウも一緒に破壊される。

524:デフォルトの名無しさん
07/04/04 17:07:22
rand()の代替ルーチンがあったら教えてください

525:デフォルトの名無しさん
07/04/04 17:17:03
CryptGenRandom
再現性で問題が出るかもしれないが。

526:デフォルトの名無しさん
07/04/04 17:17:12
Win32APIにはないから自分で作れ。

527:デフォルトの名無しさん
07/04/04 17:19:42
まあ2000以降は仕様上プロセスが終了したら基本的にオブジェクトは何も残らんけどな

528:デフォルトの名無しさん
07/04/04 23:19:10
URLリンク(r.tabelog.com)
お○んこ画像

529:デフォルトの名無しさん
07/04/04 23:51:00
お○んこ!しかも無修正!!

530:デフォルトの名無しさん
07/04/04 23:51:07
>>528
うひょ~、よだれが出てくるぜ

531:デフォルトの名無しさん
07/04/04 23:55:44
>>528
もう我慢できない

532:デフォルトの名無しさん
07/04/05 00:00:44
>>528
綺麗に処理してあるな

533:デフォルトの名無しさん
07/04/05 00:04:27
こんやのおかずにちょうどいい。くれ。

534:デフォルトの名無しさん
07/04/05 00:11:10
俺、今がちょうどこういうのが欲しくなる時間なんだ

535:デフォルトの名無しさん
07/04/05 00:11:34
>>527
終了したプロセスへのハンドルをつかんでい00る、別プロセスがあるかもしれない。

536:デフォルトの名無しさん
07/04/05 01:22:33
> つかんでい00る
00ってなんじゃらほい

537:デフォルトの名無しさん
07/04/05 02:19:39
パーマン絵描き歌を思いだした

538:デフォルトの名無しさん
07/04/05 09:51:06
ここ何スレだよw


539:デフォルトの名無しさん
07/04/05 11:19:22
プロセスの実行時間を計るのはどうしたらいいんでしょうか?
実時間じゃなくてプロセスの一部の処理に使ったユーザー時間のようなもの
が欲しいです。
PDHとやらを使うのかと思ったんですがよく分かりません。

540:デフォルトの名無しさん
07/04/05 12:15:38
>>539
timeGetTimeの差分じゃダメ?

541:デフォルトの名無しさん
07/04/05 12:20:28
GetProcessTimesじゃらめぇ?

542:デフォルトの名無しさん
07/04/05 12:49:32
>>539
>実時間じゃなくてプロセスの一部の処理に使ったユーザー時間のようなもの
>が欲しいです。

ここを詳しく。
処理に費やした時間を計測したいのか?


543:デフォルトの名無しさん
07/04/05 12:58:29
CPU時間でしょ。
>>541でおk

544:539
07/04/05 13:24:19
>>542
そうです。Unixのtimeの結果のようなものを計算したいんです。
GetProcessTimesを使ってみます。ありがとうございました。

545:デフォルトの名無しさん
07/04/05 13:46:06
モジュール内で抜けるまでどれくらい時間がかかてtるのかを計測したいなら
GetTickCountでいいような希ガス

546:デフォルトの名無しさん
07/04/05 16:01:50
すいませんWin32API入門の第72章リソースで詰まってしまいました
BorlandC++にBCCFormを入れてます

EDGEで32×32のtest.bmpを作って、アイコンとして読み込みたいんですが
LoadIcon()は分かるんですが、そこに至るまでが???で

宜しくお願いします

547:デフォルトの名無しさん
07/04/05 17:00:16
>>546
「メニュー」→「プロジェクト」→「プロジェクトに追加」
ファイルの種類を「リソースファイル (*rc)」にして、作成したrcファイルを指定する。

これだけで、後はその例通りに行けるよ。

548:デフォルトの名無しさん
07/04/05 18:21:32
>>547
レスありがとうございます
でもどうやらどつぼにはまったようで、さっぱり分かりません

.RES拡張子のファイルがないので
リソースコンパイラがよく分かってないようです

549:デフォルトの名無しさん
07/04/05 18:25:35
BorlandC++なら自前で .res にコンパイルしなくても
コンパイラが自動でやってくれる。

550:デフォルトの名無しさん
07/04/05 18:45:41
FILETIME構造体の
DWORD dwLowDateTimeと DWORD dwHighDateTime
の各ビットの意味教えてください。
年と月と日と時間が何ビットに書かれているかわかりません。


551:デフォルトの名無しさん
07/04/05 18:53:36
>>546
ビットマップファイルとアイコンファイルは別物なので
まずbmp→icoの形式変換から始めなはれ

>>550
ここがそのまんま役に立ちそう
URLリンク(wisdom.sakura.ne.jp)

552:デフォルトの名無しさん
07/04/05 18:54:25
直接ビット見たことないな

553:デフォルトの名無しさん
07/04/05 18:54:52
>>550
URLリンク(msdn2.microsoft.com)
1601年1月1日 (UTC)からの100ナノ秒単位での経過時間。
1つの64ビット整数だと見なせばよい(実際にそう扱うならアラインメントに注意)。

そういうわけでどこのビットが年とか月とかそういう性質のものではない。
だから素直にFileTimeToSystemTimeでも使っていなさい。

554:デフォルトの名無しさん
07/04/05 19:17:29
素直にfiletimetosystemtime使ったほうが早そうですね
こちらで検討してみます。
ありがとうございました


555:デフォルトの名無しさん
07/04/05 19:25:07
Notepadのように、フォームの領域一杯にEDITを表示してフォームのサイズ変更に追従させたい。
ドットネットで言う
textBox1.Dock = DockStyle.Fill;
をやりたいのですが

これってCreateWindow時にウィンドウスタイルのようなもので設定するとばかり思っていたのですが
そのような設定が見あたりません。
もしかしてウィンドウプロシージャのWM_SIZEのところで、自分でEDITのサイズを変更しないといけないんでしょうか?

556:デフォルトの名無しさん
07/04/05 19:28:14
そのまんまサイズ渡してやるだけ

557:デフォルトの名無しさん
07/04/05 19:42:20
>>549 >>541
レスありがとう

EDGEに.icon保存形式があったのでそれにしました
色々弄ってみて最後にBCCデベロッパーのDOSアイコン(コマンド実行)から
brc32 test.rc main.exe と入力したら
何とかmain.exeのアイコンだけ変えることができました
exe起動後のウィンドウタイトルバーの横のアイコンが変わらないので
また弄ってみます

558:デフォルトの名無しさん
07/04/05 19:45:32
>>557
それはウィンドウクラスのアイコンを設定すればいい

559:デフォルトの名無しさん
07/04/05 19:49:08
>>556
できました。
覚悟はしていたが本当に全部で自分でやらないといけないんだな・・。

560:デフォルトの名無しさん
07/04/05 19:55:08
>>558
この部分のことですよね? winc.hIcon = LoadIcon();
一応LoadIcon(hInstance, TEXT("KITTY") );とやってるんですがならないので
初めからやり直してみます

561:デフォルトの名無しさん
07/04/05 20:21:26
>>140
URLリンク(www.codeproject.com)

562:アイコンで聞いた者
07/04/05 21:02:27
何とか上手くやれるようになりました!
何度も聞いて申し訳なかったです
レスしてくれたみなさんありがとうございました

563:デフォルトの名無しさん
07/04/05 23:18:48
>>561
すげえw

564:デフォルトの名無しさん
07/04/06 04:31:37
デモ落としてみたけど根性ありすぎwww

565:デフォルトの名無しさん
07/04/06 10:09:34
>>561
これWin32APIで作られてるのか!?

566:デフォルトの名無しさん
07/04/06 10:13:48
>>561
軽く漏らした

567:デフォルトの名無しさん
07/04/06 11:01:24
>>565
思いっきりWTLって書いてあるじゃねえか

568:デフォルトの名無しさん
07/04/06 19:05:55
mcisend

569:デフォルトの名無しさん
07/04/06 19:10:36
VC++とplatformSDKで
mcisendcommad()でデバイスを開くときに
MCI_OPEN_PARMS構造体を使う場合でデバイスタイプにMPEGVideoを指定する事は出来るんでしょうか?
mmsystem.hにはMCI_DEVTYPE_SEQUENCERまでしか定義されてないようですが…

570:デフォルトの名無しさん
07/04/06 21:05:13
64ビット環境では___asmが使えないってのは本当なの?


571:は@c178.016.c3-net.ne.jp ◆cplnFO9T0I
07/04/06 21:30:33 BE:90784692-2BP(1000)
リストビューを使うためにLV_COLUMN構造体を定義しようとしても「定義されていない識別子です」と突っぱねられます。
VC.net20003を使っているのですが、どうすればいいでしょう。
前に痛い目を見たので#define WIN32_LEAN_AND_MEANはカットしているんですがね....

572:デフォルトの名無しさん
07/04/06 21:30:39
>>570
スレ違い

573:デフォルトの名無しさん
07/04/06 21:35:36
UNIXでの ls -a -r に相当するコードが知りたいです。
隠しファイル等を含む全てのファイルを再帰的に取得する方法を教えてください。

574:デフォルトの名無しさん
07/04/06 21:37:21
>>573
っ FindFirstFile
っ FindNextFile
っ FindClose

575:デフォルトの名無しさん
07/04/06 21:38:24
UNIX系のファイルシステムに、そもそも隠しファイルという概念など無い。
lsが勝手にフィルターしているだけ。

576:デフォルトの名無しさん
07/04/07 02:09:16
>>575
それを隠しファイルというんじゃないのか

WinだってExplorerが勝手にフィルターしてるだけだし

577:デフォルトの名無しさん
07/04/07 02:18:42
Win(というかFATとNTFS)にはファイル属性に隠しファイルビットがあるだろ
つーか質問はWindows上で隠しファイルを含めて検索する方法じゃないのか?
もう回答出てるけど

578:デフォルトの名無しさん
07/04/07 02:26:51
VC2005でダイアログボックスを作りたいのですが、どうやって作ったらいいのかわかりません。
VC2003だったらリソースの追加でできたのですがorz
ググッてみましたがわかりませんでしたので、教えてもらえると助かります。


579:デフォルトの名無しさん
07/04/07 02:56:36
>>578
Express Editionにはリソースエディタは付属しないので作れない。
別途にリソースエディタを用意するべし。

580:デフォルトの名無しさん
07/04/07 03:04:14
リソースエディタとはなんですか?
リソースの作り方すらわからない(´・ω・`)

581:デフォルトの名無しさん
07/04/07 03:07:18
これだからVCはオススメできない。

とりあえず、今までに作ったプロジェクトの拡張子が.rcの奴をテキストエディタで開け

582:デフォルトの名無しさん
07/04/07 03:12:15
開きましたー!!

583:デフォルトの名無しさん
07/04/07 03:13:34
>>580
2003で作ったときには開発環境でダイアログボックスを作れたでしょ?
あれは内部的にリソースエディタと呼ばれるツールを呼び出してただけなの
んでExpress Editionではその機能が削除されてるので作ることができない。

作ることができないといってもVCの開発環境で作ることができないだけで
リソースをプログラムから読み込むといったことは可能なので
フリーソフトのリソースエディタでダイアログを作るしかない、ってこと

584:デフォルトの名無しさん
07/04/07 03:20:29
>>583
親切にありがとう。

585:デフォルトの名無しさん
07/04/07 07:52:10
リソースって言っても二種類の意味で使われてない?

バイナリで書かれたリソースとテキストで書かれたのリソース
どう呼び分ければいいんだろう??

586:デフォルトの名無しさん
07/04/07 07:52:42
「書かれたリソース」の間違い

587:デフォルトの名無しさん
07/04/07 08:17:00
っ「リソーススクリプト」

588:デフォルトの名無しさん
07/04/07 08:19:44
リソース
 ├フォーマットがテキストの
 └フォーマットがバイナリの

589:デフォルトの名無しさん
07/04/07 09:02:01
コンパイル済みリソースがバイナリリソース。

590:デフォルトの名無しさん
07/04/07 17:13:30
テキストのリソースファイル(.rcファイル)+バイナリ(画像など)を
リソースコンパイラでコンパイルして .res ファイルをつくり
リンカで EXEにバインドする。直接.resを編集するツールもある。

591:デフォルトの名無しさん
07/04/07 21:12:44
僕ハッカー

592:デフォルトの名無しさん
07/04/07 21:15:17
僕バッカー

593:デフォルトの名無しさん
07/04/07 21:17:57
バカバッカー

594:デフォルトの名無しさん
07/04/07 21:18:00
バカばっかー

595:デフォルトの名無しさん
07/04/07 21:57:10
けこん

596:デフォルトの名無しさん
07/04/08 02:15:51
winAPIでテキストエディタに文字列を書き込んで保存したいのですが、どのようにしたらよいですか?
VC使って組んでいます。

597:デフォルトの名無しさん
07/04/08 02:18:20
意味が分からんな
外部のテキストエディタに文字を送り込むのか?
自前でテキストエディタを作るのか?

…単にテキストエディタじゃなくてテキストファイルってオチか?

598:デフォルトの名無しさん
07/04/08 04:21:34
普通にfopen、fwrite?

599:デフォルトの名無しさん
07/04/08 07:55:34
他のアプリケーションのウインドウの座標と大きさを取得するにはどうすれば良いですか?
また、座標と大きさを指定するにはどうすれば良いですか?

600:デフォルトの名無しさん
07/04/08 08:00:51
GetWindowRect
MoveWindow

プロセス跨いで使えたかはシラネ

 春 の 香 り 乙 !

601:デフォルトの名無しさん
07/04/08 08:51:32
>>600
ありがとうございました

602:596
07/04/08 10:28:48
>>597
テキストファイルの間違いでしたw

603:デフォルトの名無しさん
07/04/08 13:44:29
マウスフックについての質問です。MOUSEHOOKSTRUCT構造体の内容を
フックプロシージャから他のウィンドウプロシージャへ渡したいのですが、
上手くいきません。フックプロシージャのコードは次の通りです。
LRESULT CALLBACK HookProc(int nCode,WPARAM wp,LPARAM lp)
{
COPYDATASTRUCT cds;
if (nCode < 0) CallNextHookEx(hHook,nCode,wp,lp);
cds.dwData = wp;
cds.cbData = sizeof(MOUSEHOOKSTRUCT);
cds.lpData = (PMOUSEHOOKSTRUCT)lp;
SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cds);
return CallNextHookEx(hHook,nCode,wp,lp);
}
間違いがあれば指摘して下さい。又、参考になるソースがあれば教えて下さい。
お願いします。<(_ _)>

604:デフォルトの名無しさん
07/04/08 13:54:02
相手が別プロセスなら自メモリ領域のポインタを渡しても無意味。
相手のメモリ内に領域を確保してそのポインタを渡す。

605:デフォルトの名無しさん
07/04/08 14:12:44
Windows XPでのCPU使用率の取得方法を教えてください

606:603
07/04/08 14:19:45
>>604
そのためにWM_COPYDATAメッセージを使用しています。ファイルマッピングオブジェクトの
内容を参照するので、メモリを共有する必要は無いと思ったのですが。
URLリンク(yokohama.cool.ne.jp)

607:デフォルトの名無しさん
07/04/08 14:22:09
>>603
その中だとhWndが一番怪しい。
SendMessageするときにhWndにちゃんとした値が入ってる?

608:603
07/04/08 14:36:11
問題ありません。
「猫でもわかる」の162章のように、フックプロシージャ内での処理には成功しました。

609:デフォルトの名無しさん
07/04/08 14:49:03
そもそもうまくいかないって何が巧くいってないんだ?
WM_COPYDATA が hWnd の WindowProc に来ないのか、来た WM_COPYDATA からデータが取れないのか

610:603
07/04/08 15:00:54
>>609
WM_COPYDATAメッセージは届くのですが、COPYDATASTRUCT構造体の内容の参照が上手くいきません。
フックは次のようにセットしています。
#define EXPORT __declspec (dllexport)
#pragma data_seg(".shared")
static HHOOK hHook = NULL;
static HWND hWnd = NULL;
#pragma data_seg()
EXPORT HHOOK SetHook(const HWND hCaller)
{
hWnd = hCaller;
hHook = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)HookProc,hInst,0);
return hHook;
}
ウィンドウプロシージャでは次のように処理しています。
case WM_COPYDATA:
if (((PCOPYDATASTRUCT)lp)->dwData == WM_NCLBUTTONDOWN) {
pmhs = (PMOUSEHOOKSTRUCT)lp;
if (pmhs->wHitTestCode == HTCAPTION) {
SetWindowText(pmhs->hwnd,"猫でもわかるフック");
}
}
break;


611:デフォルトの名無しさん
07/04/08 15:22:04
>>610
> pmhs = (PMOUSEHOOKSTRUCT)lp;
pmhs = (PMOUSEHOOKSTRUCT)((PCOPYDATASTRUCT)lp)->lpData;
だろ常識的に考えて

612:603
07/04/08 15:38:41
>>611
すみません。ウィンドウプロシージャの処理を訂正します。(^_^;)
PCOPYDATASTRUCT pcds;
PMOUSEHOOKSTRUCT pmhs;
case WM_COPYDATA:
pcds = (PCOPYDATASTRUCT)lp;
pmhs = (PMOUSEHOOKSTRUCT)(pcds->lpData);
if (pcds->dwData == WM_NCLBUTTONDOWN) {
if (pmhs->wHitTestCode == HTCAPTION) {
SetWindowText(pmhs->hwnd,"猫でもわかるフック");
}
}
break;
ローカルフックには成功したのですが、グローバルフックに失敗します。

613:デフォルトの名無しさん
07/04/08 16:03:20
SetWindowText が気になって仕方ないが、
WindowProc 内での pcds->dwData とか pmhs->wHitTestCode とかはどうなんだ?
正しい値を示してるのか?

614:603
07/04/08 16:46:12
他のアプリケーションにフックDLLがロードされていることは確認できたのですが、
COPYDATASTRUCT構造体の内容が空のようです。

615:デフォルトの名無しさん
07/04/08 18:41:35
URLリンク(msdn.microsoft.com)
> ほかのプロセス内のコントロールのテキストを設定するには、SetWindowText 関数を
> 呼び出すのではなく、直接 WM_SETTEXT メッセージを送ります。

何でフックがうまくいってないと思い込めるんだかさっぱり分からん。
明らかに間違ってたソースも「訂正します」の一言で済まされるし。

616:603
07/04/08 18:54:38
あたながたが思いのほか低スキルだったのでがっかりしています。
2ちゃんもたいしたことないですね。

617:デフォルトの名無しさん
07/04/08 18:56:30
↓真603による「616は私ではありません」というレス

618:デフォルトの名無しさん
07/04/08 18:56:33
615は無視かよ

619:603
07/04/08 19:50:46
>>615
SendMessage(pmhs->hwnd,WM_SETTEXT,0,(LPARAM)"猫でもわかるフック");
としたのですが、ウィンドウタイトルは変更されません。
間違ったソースを掲載したことについては深くお詫びします。大変申し訳ありませんでした。

620:デフォルトの名無しさん
07/04/08 20:43:43
>>619
dll.defに
SECTIONS
.shared SHARED READ WRITE
が有るか確認するとか

char sz[100];
wsprintf(sz, "pmhs->hwnd:%p ", pmhs->hwnd);
SetWindowText(hWndExe, sz);
として様子を見るとか

621:デフォルトの名無しさん
07/04/08 23:19:23
うまくいかないときには何がおきてるのかを見極めて原因究明。
期待通りにいくかいかないかだけを判断してたらいつまでたってもなおらん

622:デフォルトの名無しさん
07/04/09 00:44:15
デバッガ使ってないのかね?
1ステップずつ確認すれば、問題点はすぐに分かると思うが。

623:デフォルトの名無しさん
07/04/09 00:47:43
フックプロシージャのステップ実行なんて出来るの?

624:デフォルトの名無しさん
07/04/09 01:14:11
フック先のプロセスにアタッチしろ。

625:デフォルトの名無しさん
07/04/09 10:09:06
別にデバッガ使わなくてもログをファイルに書き出せばいいだけだし

626:603
07/04/09 10:33:11
>>620-624 レスありがとうございます。
>>620 モジュール定義ファイルは作成済みです。内容は次の通りです。
LIBRARY hook
SECTIONS
.shared READ WRITE SHARED
EXPORTS
HookProc @1
ResetHook @2
SetHook @3
pmhs->hwndの値をウィンドウプロシージャ内で出力したところ、
ローカルフックでは00060AA2でした。グローバルフックでは何も出力されませんでした。
グローバルフックではWM_COPYDATAメッセージが届いていないようです。(^_^;)
>>622 デバッガは使用していません。OutputDebugStringを使って変数の値をトレースしています。
>>623 プロセス間を跨いだデバッグ作業はどのように行うのでしょうか?
>>624 明示的にアタッチする方法があるのですか?
>>621 今までの状況を整理してみました。
・ローカルフックには成功し、グローバルフックには失敗する。
・ローカルフックの場合、フックDLLがロードされ、WM_COPYDATAメッセージが届く。
・グローバルフックの場合、フックDLLはロードされるが、WM_COPYDATAメッセージは届かない。

627:デフォルトの名無しさん
07/04/09 11:00:13
WindowsXPの[ユーザのログオフ]-[ユーザー切替]-[指定したユーザーのログオン]
という作業をプログラムから操作したいんですけど可能でしょうか?
可能なら使用するAPIを教えて頂けないでしょうか?

628:デフォルトの名無しさん
07/04/09 11:05:12
不可

629:627
07/04/09 11:11:17
やっぱりですね
即レスありがとうございました。

630:デフォルトの名無しさん
07/04/09 11:31:48
>>627
Ginaで何とかなるでしょ。Ginaでぐぐってみたら?

631:デフォルトの名無しさん
07/04/09 11:40:23
>>627
レジストリに自動ログオンの設定を書き込んで再起動


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch