トップページ⇒tech
1001コメント311KB

Win32API 質問箱 Build5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。

前スレ
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html

Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html

Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html

Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/

参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp

猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0360デフォルトの名無しさんNGNG
>>359
フックすれば?
0361デフォルトの名無しさんNGNG
>>360
ですね。
03623ヶ月目NGNG
ディレクトリのコピー/削除等の実装をSDKでやった事ある方は
MFCのときはCFileFindクラスを使いますか?
サンプル等探してもCFileFindクラスを使用した例があまり見当たりません。
使い勝手等何か問題あるのでしょうか?
0363286NGNG
>362
普通に便利だな、と思った。
0364デフォルトの名無しさんNGNG
exitのかわりになるWin32 APIってないですか?
0365デフォルトの名無しさんNGNG
ExitProcess
0366デフォルトの名無しさんNGNG
>>365
ありがとう!
0367デフォルトの名無しさんNGNG
>>364-366

なんだか危険な感じがしないでもない。
0368デフォルトの名無しさんNGNG
まあ普通はexit()するわな。Cランタイムが後処理してくれるし。
0369デフォルトの名無しさんNGNG
実行形式ファイルのバージョン情報を得るにはどうしたらいいんですか?
右クリック->プロパティ->バージョン情報
で出てくる情報を得たいんですけど、教えてください。
0370デフォルトの名無しさんNGNG
>>362
SDKだろうがMFCだろうがATLだろうが、ディレクトリ操作はSHFileOperation()
0371362NGNG
>>363 >>370
さんくすです。
NT4.0考えなくていい時はSHFileOperation()使います。
0372370NGNG
>>371
NT4.0でも使えるのですが・・・ ( ;´Д`)
0373362NGNG
>>372
検索してみたんですが、
SP1だと複数のファイルを指定すると失敗するらしいです。
0374362NGNG
↑実際に確認してませんので違ったらすいません。
0375351NGNG
>>358
出ました! ありがとうございます
0376デフォルトの名無しさんNGNG
>>369
GetFileVersionInfoだったっけ
こんなわかりやすいAPI名で人に聞くとはお前PG向いてないよ。田舎帰れ
0377デフォルトの名無しさんNGNG
最近いろいろなアプリケーションでよく見かけますが、
ツールバーやリストボックスなどのコモンコントロールで、
背景に画像を設定するにはどうしたらいいですか?
検索しても背景色がせいぜいだったので教えていただけないでしょうか。
0378デフォルトの名無しさんNGNG
>>377
コモンコントロール・・・
それ、VB板で聞いたら?
0379デフォルトの名無しさんNGNG
間違った。
VBスレね。
0380デフォルトの名無しさんNGNG
>>378
なんでVBなの?
0381デフォルトの名無しさんNGNG
>>380
378 が何か勘違いしてるんだろ。放置しといてやれよ。
0382デフォルトの名無しさんNGNG
>>351 >>358 に便乗するっす。長くてすんません。
CreateDC に DEVMODE 構造体を渡す前に (>>351 さんは代わりに ResetDC を
使ってるけど) DocumentProperties() を呼ばなくてもよいんですっけ。
DocumentProperties(NULL, hPrinter, pszPrinterName,
    pDevMode, pDevMode,
    DM_IN_BUFFER | DM_OUT_BUFFER);
みたいな感じ。
私が試している限り、あってもなくても関係なさそうだったんだけど
なんだか「偶然動いてるだけ」な感じがして気持ち悪いです。

MSDN によると「現在の設定を使うならこの DocumentProperties は不要」と
読めるんですよね。ここでもう混乱っす。

文書やネット上のサンプルコードや私が試した事をまとめるとこんな感じなんだけど:
 上のようにして DocumentProperties を呼ぶと、"非"一時的に設定を変更
 しちゃう。すなわち、次にアプリケーションを起動して DEVMODE を
 取得してみると、前回 DocumentProperties で設定したモノが取得できる。
ていう解釈でよいと思いますか?
0383デフォルトの名無しさんNGNG
質問。
子ウインドウを作ると、その子ウインドウのほうが
アクティブになると思うのですが、
親ウインドウの方をアクティブにし続けるにはどうすればよいでしょうか?
今は、子ウインドウを作ったあとにSetActiveWindow関数を呼んで
親ウインドウに戻しています。

また、終了するまでアクティブでい続けるような
ウインドウを作ることはできるでしょうか。
誰かよろしくお願いします。
0384デフォルトの名無しさんNGNG
>終了するまでアクティブでい続けるような

使いたくねー、こんなアプリ
0385デフォルトの名無しさんNGNG
>>383
アクティブでなくなったら終了する
0386デフォルトの名無しさんNGNG
>>384
いや、別にみんなに配るようなアプリを作っているわけじゃなくて
自分で使うのに、アクティブで無くなると困るって言うだけなんですが。
0387デフォルトの名無しさんNGNG
挙動が激しく、トロイっぽいよね
0388デフォルトの名無しさんNGNG
画像を扱うアプリなんです。
高速な描画、表示が条件なんですが、どのような方法がベストなんでしょう結局。
まず、バックバッファ相当のモノについて、
1.DIBSectionを使う
2.ただのメモリブロックを使う
3.DirectDrawSurfaceを使う(システムメモリ上??)
で、フレームバッファへの転送なんすけど、
1.Blt
2.アドレス拾ってmemcpy
とか考えられるんだけど、いったいどうすりゃストレスない描画ってできるんでしょう?

例えばフォトショップとかmameとか、ああいったのはどういった方法で実現してるんでしょうか?
0389デフォルトの名無しさんNGNG
>>388
>フォトショップとかmameとか
同列で語って良いのか・・・?
0390デフォルトの名無しさんNGNG
>>389
どちらにせよGDIとか使わずに表示まで持っていってますよね?
で、どちらも膨大なリソースを表示しているって意味では
まともにグラフィック処理してるって思うんですよ。
その方法は全然違うんだろうけど・・・
0391デフォルトの名無しさんNGNG
>>390
>どちらにせよGDIとか使わずに表示まで持っていってますよね?

マジで?
0392デフォルトの名無しさんNGNG
>>391
違うの??よく知らないんだけど。
つーか普通にDIBとかからBlt、StretchBltとかって全然重いと思うんです。
mameの60fpsとかって全然無理なレベルぐらい重いんだけど・・・
画面モードとかによるのかな?
0393デフォルトの名無しさんNGNG
>>392
君、DirectXとかその辺の基本理解してからしゃべってる?
0394デフォルトの名無しさんNGNG
>>393
あんまり。基本っつーと、どんなことかな?
0395デフォルトの名無しさんNGNG
>>394
ハードウェアが「どんな操作を」支援してくれるのか、じゃないの?
0396デフォルトの名無しさんNGNG
Wininet で非同期通信をやろうと思ったんですが、
MSDNのサンプルを見るとスレッドを使っているみたいです。

WinSock ではスレッドを使わずにできたような気がするんですが、
Wininet ではスレッドを使わない非同期通信はできるんでしょうか。
0397デフォルトの名無しさんNGNG
>>378
Delphiで作った2chブラウザでも見かけるけど・・・。
結局どうやったらできるのかな?
0398デフォルトの名無しさんNGNG
>396
ほんとにMSDN調べた?
http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/wininet/tutorials/implement_async.asp
0399396NGNG
見ましたよ>398
// Create a thread to handle the header and
// resource download.
cpContext->hThread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)Threader,LPVOID(cpContext),
  0,&cpContext->dwThreadID);
このぶぶんでThreadを作っているけど、これをやらないではできないのかという話です。
0400デフォルトの名無しさんNGNG
>>377
ツールバーの場合はRebarをつかって背景画像をセットしてると思う。
0401デフォルトの名無しさんNGNG
続き(じゃねーけど)はここに書いてある。
http://www.codeproject.com/useritems/asyncwininet.asp
0402デフォルトの名無しさんNGNG
OS が日本語Windowsか英語Windowsか調べられるAPIってあります?
0403デフォルトの名無しさんNGNG
>>402
おれはGetACP() == _KANJI_CPで判定しているが、もっとうまい方法があれば、知りたい。
しかし、マルチリンガル版も視野に入れたら、GetACPしか無いような気もするんだが。
0404デフォルトの名無しさんNGNG
>>403
GetOEMCP()は?
0405デフォルトの名無しさんNGNG
GetSystemDefaultLCIDってのはどうだろう?
0406デフォルトの名無しさんNGNG
>>405
よさげ。
0407396NGNG
>401
ふむ、ためしてみます。
0408デフォルトの名無しさんNGNG
hInstanceを保存する必要ってあるの?
常にGetModuleHandle(NULL)使ったらまずい?
0409 NGNG
>>408
効率を考えなければ特に問題はない。
0410デフォルトの名無しさんNGNG
>>409
ありがとう
0411デフォルトの名無しさんNGNG
使っているWindowsが日本語版かどうかってどうやって調べるんでしょ?
特に無断転載する輩の多い韓国版では動かなくしたいんですけど。
0412デフォルトの名無しさんNGNG
>>408
DLLなら保存しないとダメれすよ
0413377NGNG
ツールバーはRebarですか、どうも。
試してみます。
0414デフォルトの名無しさんNGNG
VBで使用するOCXを、VCで作っているんですけど
そのOCXでエラーが発生した場合、VB側のOn Errorでそのエラーを捕まえたいんです。

その場合、OCX側でどのようなコードを書けば良いのでしょうか?
0415デフォルトの名無しさんNGNG
>>414
throws Throuwable
0416デフォルトの名無しさんNGNG
COMの境界をまたがって例外を投げてはいけない、と
COMの偉い人がいってますた。
0417414NGNG
レスどーもです。
VB側のOnErrorで取れました。
が、
>416サソの「COMの境界を〜」って、如何いう意味なんですか?
いまいち意味が判らんのですが...出来ましたら、解説をお願いします。
0418デフォルトの名無しさんNGNG
>>411
ライセンスを日本海ウェアか竹島ウェアに変更しる。
if(IDNO==MessageBox(,"竹島は日本の領土?",,MB_YESNO)) exit(-1);
0419デフォルトの名無しさんNGNG
>>416 C++の例外とCOMの例外を区別してないと思われ(先生はわかっていると思われ)
くそMFCだとそのあたりが隠蔽されているから、わからないと思われ。
つーか、S_OKとS_FALSE以外のHRESULT直接返せ。
0420デフォルトの名無しさんNGNG
>>411
ちょっと前にロケール識別子でFA出てる。
レジストリ変えられたらおしまいだから、色々複合してみるのもいいかもしれん。
0421デフォルトの名無しさんNGNG
>>420 すみません、FAとはなんでしょう?
0422デフォルトの名無しさんNGNG
>>421
話の流れからして Final Answer かな。
しかしFAなんて略すなや。
0423デフォルトの名無しさんNGNG
AFならAnal Fuckだったのに。
0424デフォルトの名無しさんNGNG
フラットツールバーの途中にコンボボックスを設置したいのですが、
どうやればいいのか教えてください。

現在、セパレータの幅を指定して挿入しているのですが、
フラットスタイルにすると真ん中に縦線がに入ってしまい、
上下に線が見えてしまいます。

コンボボックスを大きくすれば解決するのですが、
見栄えが悪くなるのでどうしたらいいか悩んでいます。
バイナリエディタのBzが綺麗にやっているのですが、
どうやったら良いのでしょうか。
0425デフォルトの名無しさんNGNG
FA:深キョン アナルファック
0426421NGNG
>> 425 thanks なわけねーだろ、thanks > 422
0427デフォルトの名無しさんNGNG
初歩的な質問なんですが、テキストファイルを読み込むとき、
一行ずつ読みたいのですがみなさんどうやっていますか?
一行ずつ読むAPIはありませんよね?というわけで
1.Cライブラリ関数を使う
2.ReadFileで全部メモリに読んでから一行ずつ抜く
3.ReadFileで一文字ずつ読んで改行を見つける
のどれかになるのかなと思ったのですが、ライブラリ関数は使いたくない
ということと、3.では遅くなるということを考えた場合、2しかないですか?
0428デフォルトの名無しさんNGNG
>>427
2.5 ReadFileで少しずつ読んで改行までを使う

っていうかどうしてライブラリが使いたくない?
0429デフォルトの名無しさんNGNG
>>427
なぜfgetsを使いたくない?
0430デフォルトの名無しさんNGNG
>>429
一行の長さがわかんないんで。。。
0431デフォルトの名無しさんNGNG
>>430
分からないんなら、どこのメモリに読み込むの?
0432デフォルトの名無しさんNGNG
俺は最大行の長さを調べてからmallocして読み込んでいる。
ファイルサイズ分バッファを獲得してもいいけど、無駄といえば無駄だから。
0433デフォルトの名無しさんNGNG
>>430
Perl使え。
0434デフォルトの名無しさんNGNG
がいしゅつだと思いますが、
SetDIBitsToDeviceでJPEGをディスプレイに表示させようと思っています。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6145.asp
↑を参考に書いてみましたが、描画されませんでした。
自力でJPEG展開は出来ましたが、気になって仕方がありません。
どなたかご存知の方、手順を教えてください。
0435434NGNG
sageてしまったのでアゲ
0436デフォルトの名無しさんNGNG
そのサイトに書いてある手順でOK
出来ないのならあんたに問題有り
0437デフォルトの名無しさんNGNG
描画ってもしかしてディスプレイか?
それなら不可能。プリンタのDCへStretchDIBits汁
0438壁紙がかわらんNGNG

#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, "C:\\sample.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );

return 0;
}
全く変化しません.(?_?) win98se + VC6
0439デフォルトの名無しさんNGNG
「Delphi」
これが読めなくて
そろそろ一年。。
これはなんと発音すればいいのでしょう?
デルピ??
0440439NGNG
↑
すみません、すれ違いとは思ったのですが、
どこで聞いてもすれ違いっぽいので書き込みました。
申し訳ない。
0441デフォルトの名無しさんNGNG
「でるふぃ」です
0442439NGNG
>441
おかげ様で人前で
「でるぴ」
などと発言し、恥をかかなくてすみました。
ありがとうございます。
0443デフォルトの名無しさんNGNG
実際の発音はde'lfaiで、カタカナ表記ではデルフォイ、デルポイと言うらしい。
0444439NGNG
>443
そうなんですか、
とりあえず
「でるふぃ」でいきますねw
ありがとうございました。
0445デフォルトの名無しさんNGNG
>>439
http://www.borland.co.jp/news/delphi7j.html
0446439NGNG
>445
あっ。。
デルファイ
って書いてあるw
情報ありがとうございます。
でも自分で言うのもなんですが、
低レベルな質問ですねぇ。
0447デフォルトの名無しさんNGNG
>>437
ディスプレイには使えないのですか?
言われてみると、そんな気もします・・・。
サンクス。
0448デフォルトの名無しさんNGNG
SetWindowRgnでリージョンセットして、
そのあとさらにSetWindowRgnであっさり新しいリージョンに置き換わると思ったら
置き換わらないYO!

これってウィンドウ破棄してリージョンセットしなきゃ無理でつかね?
0449魔王ハルトンNGNG
>>448
んなこたないよ、何回リージョン変えても併記だよ。
何かエラー出てるんじゃないの。
0450デフォルトの名無しさんNGNG
リージョン破棄とかもせずSetWindowRgnでよいのか?
それでいいなら漏れのPCもうだめぽ(´д⊂
0451デフォルトの名無しさんNGNG
//DIB をファイルへセーブ
hfile = CreateFile("aa.bmp", GENERIC_WRITE, FILE_SHARE_WRITE,
NULL,CREATE_ALWAYS, 0, NULL);

とすると aa.bmp が全く指定した覚えのないディレクトリ内に作成されてしまう
んですが,原因はなんでしょうか.
途中で PaintDesktop() とかしてるんでカレントが変わってしまってるってこと?
0452デフォルトの名無しさんNGNG
GetCurrentDirectoryで確認してみれば?
0453デフォルトの名無しさんNGNG
↑お,了解.
0454デフォルトの名無しさんNGNG
GetOpenfileNameで

ofn.lpstrFilter = "BMP files(*.bmp)\0*.bmp\0\0";

同時に jpg も表示するにはどう書けばええんですか?
(*.bmp,*.jpg) とか色々試したがだめや
0455デフォルトの名無しさんNGNG
"All image files (*.bmp,*.jpg,*.pcx)\0*.BMP;*.JPG;*.PCX\0"
0456デフォルトの名無しさんNGNG
自己解決でした↑
0457デフォルトの名無しさんNGNG
>>456オメ
0458デフォルトの名無しさんNGNG
#define STRICT
#include<windows.h>
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR CmdLine,int CmdShow)
{HWND hwnd;MSG msg;WNDCLASS wc;
wc.style=0;wc.lpfnWndProc=WindowProc;wc.cbClsExtra=0;wc.cbWndExtra=0;
wc.hInstance=hInstance;wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;wc.lpszClassName="Hello";
if(RegisterClass(&wc)==0)return 0;
hwnd=CreateWindow("Hello","Hello World",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,0);
if(hwnd==NULL)return 0;ShowWindow(hwnd,CmdShow);UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
return msg.wParam;}
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{switch(message){case WM_DESTROY:PostQuitMessage(0);return 0;}
return DefWindowProc(hwnd,message,wparam,lparam);}

こんな俺はセンス内でしょうか
0459デフォルトの名無しさんNGNG
何回も聞いて申しわけないんですが以下で壁紙が変化しないのはどういう
原因がありえますかね.SystemParametersInfo の返り値は毎回0です.エラー

#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow )
{SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, "森.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );
return 0;}
■ このスレッドは過去ログ倉庫に格納されています