Win32API質問箱 Build ..
[2ch|▼Menu]
116:デフォルトの名無しさん
07/03/24 10:30:06
>>101 ありがとうございます。早速ハンドルを持ったままに変更しようと思います。

117:デフォルトの名無しさん
07/03/24 11:24:30
>>111
それはここに書いていないだけに違いない

118:デフォルトの名無しさん
07/03/24 12:55:13
24bitDIBに4の倍数の縛りはなかったと思うぞ。
ただ1ピクセルの転送にWord、Byteそれぞれ1回づつ必要だからDoubleWord1回ですむ32bitのほうが扱い易いのは確か。
4の倍数は24bitDIB扱うライブラリの制限じゃ?(高速化のために4バイトづつ処理する関係上4の整数倍ピクセルじゃないと問題が出る)

119:デフォルトの名無しさん
07/03/24 13:06:41
要はアライメントの問題って事?

120:デフォルトの名無しさん
07/03/24 13:09:24
Win32の非圧縮DIBでは、スキャンライン毎のDWORDアラインは必須。
あと、HeapAllocとか使うくらいならCreateDIBSectionの方が楽だな。

121:デフォルトの名無しさん
07/03/24 15:59:24
>>118
「1行辺りの」バイト数に4バイトアラインの制限がある。1ピクセルあたりではない

122:デフォルトの名無しさん
07/03/25 13:22:59
>>5
Update来ている
Microsoft® Windows® Software Development Kit Update for Windows Vista™
URLリンク(www.microsoft.com)

123:デフォルトの名無しさん
07/03/25 14:32:52
>>122
今日寝る前に>>5をインストールしたばかりだというのに、
この仕打ちはあんまりだorz

124:デフォルトの名無しさん
07/03/26 02:10:40
Win32APIのコモンコントロールにデータグリッド(Excelの表みたいなやつ)
ってないんでしょうか?

125:デフォルトの名無しさん
07/03/26 02:14:21
つ[リストビュー]

126:デフォルトの名無しさん
07/03/26 02:15:08
>>124
リストビューコントロール(エクスプローラの右側のペインのヤツ)ぐらいしかない。

127:デフォルトの名無しさん
07/03/26 02:46:31
オーナードロー駆使しまくって無理やり似せたことがあるけど

なかなか死ねる

128:デフォルトの名無しさん
07/03/26 03:11:17
>>127
それ、壱からコントロールをフルスクラッチしたほうがまだ楽なんじゃないのか?
描画位地の調整が半端じゃなく大変だったろうに。

129:デフォルトの名無しさん
07/03/26 03:11:35
ActiveXコントロール

130:デフォルトの名無しさん
07/03/26 03:17:04
>>128
五時間くらいhDCと格闘してからそうしたorz

131:デフォルトの名無しさん
07/03/26 03:30:46
フルスクラッチでも挙動や見た目をコモンコントロールに似せようとするとどのみち大変なんじゃねえの

132:デフォルトの名無しさん
07/03/26 03:48:26
>>131
それはそうなんだが、コモンコントロールってWindowsのバージョンによって
微妙に挙動が異なったりするし、描画位置の調整が恐ろしく大変だから
>>124 みたいなのはフルスクラッチしたほうが楽なんだよ。

133:デフォルトの名無しさん
07/03/26 10:20:57
そういや、NT3.51以前にListBoxを基底にしてListView作ったっけな

134:デフォルトの名無しさん
07/03/26 10:33:14
あるファイルを開いているプロセスの一覧を取得するアプリを
作りたいのですが、どのようなAPIを使えばよいでしょうか?
ヒントになるようなことだけでもよろしくお願いします。

135:124
07/03/26 10:49:37
データグリッドをフルスクラッチってどどどどんな感じで作るんでしょうか。

136:デフォルトの名無しさん
07/03/26 10:51:27
どんなって、普通にウィンドウプロシージャ書いて、ウィンドウクラス登録して、ウィンドウ作るんだろ?

137:デフォルトの名無しさん
07/03/26 10:52:48
まず縦横に線を引くことからはじめるんだ

138:デフォルトの名無しさん
07/03/26 10:55:01
データ構造決めてからやればそんなに手間でもないけど
使う人が慣れてるやつとかけ離れてると使ってくれないかもな

139:デフォルトの名無しさん
07/03/26 11:00:55
オブジェクトの動作の一部だけを上書きするのがサブクラス化、
構築からウィンドウクラスの登録から全部最初から
書くのがフルスクラッチという解釈でいいんすか?

140:124
07/03/26 11:39:08
自分で線引くってことは、もしかして、クリックされたセルの色反転させるのも
一々座標見て、「ここは上から2番目、左から3番目のセルだから、
座標x、y−s、tで描かれる長方形の色を今ある色と反転させる」とか
やる必要あるんですかねッ!?行列のソートも自前!?

141:デフォルトの名無しさん
07/03/26 11:56:19 BE:122283779-2BP(222)
>>140
内部でこっそりListBoxとかを持っておくとか。

142:デフォルトの名無しさん
07/03/26 12:32:03
>>140
ListCtrlで足りない機能を列挙するところから始めたら?

143:デフォルトの名無しさん
07/03/26 12:32:41
>>140
だから自前描画は普通やらないの。

144:デフォルトの名無しさん
07/03/26 12:43:59
>>140
そうだよ、スクロールも考慮してな

145:デフォルトの名無しさん
07/03/26 13:51:56
Cでスクリーンショット撮ってクリップボードや適当な画像ファイル形式に保存する
プログラムを作成したいんだけどどうしたらいい?

146:デフォルトの名無しさん
07/03/26 13:54:37 BE:67935375-2BP(222)
GetDC(NULL)

147:デフォルトの名無しさん
07/03/26 13:55:43
CreateDC "DISPLAY", 0, 0, 0

148:デフォルトの名無しさん
07/03/26 14:01:21
便乗質問なんですが
他のWindowで隠れてるWindowのキャプチャって可能ですか?

149:デフォルトの名無しさん
07/03/26 14:07:55
hDC取得出来ればいけるんじゃね?

150:145
07/03/26 14:10:59
>>146
>>147
ありがとう。

151:デフォルトの名無しさん
07/03/26 14:11:07 BE:29115735-2BP(222)
FindWindow
GetDC(hWnd)

152:デフォルトの名無しさん
07/03/26 14:22:19
隠れてるウィンドウは表に出てWM_PAINTメッセージがきて初めて描画される
だから裏にいるときにDC取得しても上に乗っかってるウィンドウの内容がとれる

153:148
07/03/26 14:26:23
>>149
>>151
GetDC + BitBlt で試してみましたがやはり上のWindowが写りこんでしまいました。

>>152
ああ、やっぱり普通には無理なんですね。

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

154:デフォルトの名無しさん
07/03/26 14:37:49
vistaだと、その辺の様子変わるのかねぇ・・・

155:デフォルトの名無しさん
07/03/26 15:32:21
ビットマップのDC作成して、レンダリングさせればいいじゃまいか。
でも対象プロセスの中で動作させないと色々リソース管理が面倒そうだ。DllInjectionでちょっと実行が楽かな。

156:デフォルトの名無しさん
07/03/26 15:47:35
>>154
どっかのブログで見た。
DWMまわりをごにょごにょするんだったかな。


157:デフォルトの名無しさん
07/03/26 16:15:04
あえろが効いていればできるって聞いたけどな
vistaいじってみてえ

158:デフォルトの名無しさん
07/03/26 16:16:34
DirectX使ってるならレンダリングイメージを保持してるのはサーフェスだからなぁ

159:デフォルトの名無しさん
07/03/26 16:29:33
>>158
ゲームの動画取るソフトで、パフォーマンスのために
APIフックとかしてサーフェイス取得してるのもあるな

160:デフォルトの名無しさん
07/03/26 16:38:29
ReadFileの第3パラメータ「読込バイト数」を、MessageBox()で出力したいのですが、
下だとエラーが出ます、どうすればいいですか?

MessageBox(NULL ,GetFileSize(hFile, NULL) , TEXT("読込バイト数") , MB_OK);

エラー↓
error C2664: 'MessageBoxW' : 2 番目の引数を 'DWORD' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。

161:デフォルトの名無しさん
07/03/26 16:48:51
>>160
C言語からやり直してきて

162:デフォルトの名無しさん
07/03/26 16:52:55
char buff[256];
wsprintf(buff, "%d", GetFileSize(hFile, NULL));
MessageBox(NULL ,buff , TEXT("読込バイト数") , MB_OK);



163:デフォルトの名無しさん
07/03/26 17:01:36
VB出身かなぁ

164:デフォルトの名無しさん
07/03/26 17:07:53
まぁ誰もが一度は通る道だ。
最近の.NETとか触ってからWindowsAPIをやろうとすると
文字列→数値や数値→文字列変換を自前でやらないといけないめんどくささにびっくりするもんだ。

165:デフォルトの名無しさん
07/03/26 17:10:31
>>162
charじゃなくてTCHARにしとけ

166:デフォルトの名無しさん
07/03/26 17:22:40
うーすみません>>162をchar→TCHARにして実行したところまたエラーが・・

error C2664: 'wsprintfW' : 2 番目の引数を 'const char [3]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

一応環境です
Windows2000SP4
VC++2005ExpressEdition
PlatformSDK

167:デフォルトの名無しさん
07/03/26 17:23:38
>>166
wsprintf(buff, "%d", GetFileSize(hFile, NULL));

wsprintf(buff, TEXT("%d"), GetFileSize(hFile, NULL));

168:デフォルトの名無しさん
07/03/26 17:36:31
何のためにTEXT()マクロを使っているかを自分で調べた方がいいな

169:デフォルトの名無しさん
07/03/26 17:40:00
できました!ありがとうございました!

170:デフォルトの名無しさん
07/03/26 20:20:26
>>148
ふらっとC♯, C#(初心者用) Part13
スレリンク(tech板:893-894番)

893 名前: デフォルトの名無しさん [sage] 投稿日: 2007/03/06(火) 11:22:59
ほかのアプリケーションのスクリーンショットを撮りたいとき
Alt+PrintScreenを送ってクリップボードから取得する以外に
いい方法はありませんか?

Vistaでのウィンドウ一覧の3D表示をXPでも
できるようにするソフトを作りたいのですが。

894 名前: デフォルトの名無しさん [sage] 投稿日: 2007/03/06(火) 11:38:00
>>893
PrintWindow API使えばある程度できるよ。
URLリンク(www.microsoft.com)

でもVistaみたいに最小化しているウィンドウについては無理。
あとリアルタイムアニメーションも多分きつい。

Vistaはわざわざライブサムネイルのためにウィンドウマネージャ書き換えてAPIまで追加したわけで、
それが何の苦労もなくXPで実現できるならXPでいいじゃんということになる。

171:デフォルトの名無しさん
07/03/26 20:29:34
MDIがこうなってるのはわかったのですが、
フレームウィンドウ
 ↓
クライアントウィンドウ
 ↓
子ウィンドウ1
子ウィンドウ2
子ウィンドウ3

フレームウィンドウはWinMainで作るとして、
クライアントウィンドウはWinMainの中でフレームウィンドウ作成後に作るのと、
CALLBACK FrameProc関数がWM_CREATE:を受け取ったときに作るのと
どちらがいいのでしょうか??

172:171
07/03/26 20:51:10
URLリンク(wisdom.sakura.ne.jp)

すみません補足です
このページではFrameProc関数がWM_CREATE:を受け取ったときに
クライアントウィンドウを作っているのですが、なぜWinMainで
作ってないのか疑問に思ったのです

173:デフォルトの名無しさん
07/03/26 20:53:22
動けばいいんだから細かいところを
ゴチャゴチャゴチャゴチャ
ゴチャゴチャゴチャゴチャ
ゴチャゴチャゴチャゴチャ
ゴチャゴチャゴチャゴチャ
気にするな。

174:デフォルトの名無しさん
07/03/26 20:56:43
>>173はVB出身

175:デフォルトの名無しさん
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?
AメッセージはWM_COPYDATAの他なにかいいのがありますか?
 あれば、メッセージ名を教えていただきたいです。
 (メッセージ動作は調査しますんで)
B先も書いたとおり、メディアプレイヤーの様な動作を想定する場合、
 プロセス間通信ではパイプ?メールスロット?どっちがお勧めでしょうか?

以上です。

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
そんなこといわないで

ありがd

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〜関数→失敗(ハンドルがない)
A.ハンドルがないのでCreate〜関数→成功
B.(゚Д゚)ウマー

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

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

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


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 + 上下キーで移動する部分です。


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

4974日前に更新/230 KB
担当:undef