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

Win32API 質問箱 Build5

レス数が950を超えています。1000を超えると書き込みができなくなります。
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
0893デフォルトの名無しさんNGNG
>890
無事表示できました
ありがとう
0894891NGNG
>>892
ありがとうございます。
その方法で解決できました。
プロジェクトの上の方で
#define _WIN32_WINNT 0x0400
って決定がされていたので

#pragma pack( push, 1 )
typedef struct tagOFN2000 {
DWORD lStructSize;
(中略)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
} OPENFILENAME2000;
#pragma pack( pop )

と途中で宣言し、
(必要ないかもしれませんが)次のように場合分けしておきました。

ofn.lStructSize = ( bWin2000MeLater ? sizeof(OPENFILENAME2000) : sizeof(OPENFILENAME) );
GetSaveFileName( (OPENFILENAME *)&ofn );
0895デフォルトの名無しさんNGNG
http://sakashita.strangeworld.org/source/up0768.jpg
これってどうやったら出来るんだろう?
SDKでやってるのかな?
0896デフォルトの名無しさんNGNG
>>895
対象 URL
http://sakashita.strangeworld.org/source/up0768.jpg
--------------------------------------------------------------------------------

mailto ストーム
アンカータグではないタグで mailto: の記述が見つかりました。
メール作成ウィンドウがたぁっくさん出てきてしまうかもしれません。
パワーのないマシンでは,ブラウザがフリーズする可能性があります。
--------------------------------------------------------------------------------

FDD アタック / concon クラッシャー等 [img タグ等]
IMG タグや JavaScript 等により file スキーマを参照します。
ブラウザの設定によってはフロッピーディスクドライブに不要なアクセスが続いたり, OS がクラッシュする可能性があります。
0897デフォルトの名無しさんNGNG
>>895
ム板に、しかも今時こんなブラクラ貼るなんて(・∀・)イイセンスしてるな。
0898デフォルトの名無しさんNGNG
やりかたを質問してるのでは?
0899デフォルトの名無しさんNGNG
ウィンドウプロシージャ側でコマンドライン引数を利用したいのですが
グローバル変数とメッセージ、どちらで伝えるべきですか?
0900900get!!NGNG
>>899
グローバル変数の方が楽だろうな
GetCommandLine()を使うのもありだろ
0901デフォルトの名無しさんNGNG
>>899
CreateWindowの引数という手もあり
0902デフォルトの名無しさんNGNG
GetCommandLine()ですか。
どうやらこれがよさそうですね、ありがとうございます。
0903デフォルトの名無しさんNGNG
PSH_WIZARD なプロパティシートで「キャンセル」ボタンを非表示にしたいのですが、
そんなことってできるのでしょうか?
0904デフォルトの名無しさんNGNG
>>903
GetDlgItem(IDCANCEL)でキャンセルボタンのCWnd*とれたかも
0905904NGNG
すくなくともVC5の時に普通の(ウィザードでない)プロパティシートではできた
CPropertySheetの派生クラスを作ってOnInitDialog()をオーバーライドして
CPropertySheet::OnInitDialog() ;
CWnd *pwndCancel = GetDlgItem(IDCANCEL) ;
pwndCancel->ShowWindow(SW_HIDE) ;
こんな感じか(あってるかどうかしらん)
0906デフォルトの名無しさんNGNG
>>904,905
スレ違い。
0907904NGNG
Win32Apiスレだった
904,905はMFCの場合
0908904NGNG
>>906
イッテキマース
0909906NGNG
>>908
逝かなくてもいいよ。
十分ヒントになったはず。
0910あえて言うとNGNG
>>903 キャンセルできないウィザードというのはいかがなものか。
0911デフォルトの名無しさんNGNG
×ボタンを押して閉じれば良し。
0912デフォルトの名無しさんNGNG
UIとしてあんまり、、ね。
0913デフォルトの名無しさんNGNG
×ボタンってあったっけ?
0914デフォルトの名無しさんNGNG
標準にすると右上にあると思う
0915903NGNG
盛り上げて下さってどうもありがとうございます。903でございます。

「戻る」「次へ」に対してキャンセルができないのは確かにダメダメだと思いますが、
「完了」があるなら「キャンセル」は要らないと思うのですけれども
どんなもんでしょうか?

んで、やっぱり GetDlgItem() しないとダメなのですかね?
あんまり美しくねーなー…
0916デフォルトの名無しさんNGNG
>「完了」があるなら「キャンセル」は要らないと思うのですけれども
凡人には理解できません。
どういう論理ですか?
0917デフォルトの名無しさんNGNG
>>915
あなたの作るソフトは一生使わないと心に固く誓いますた。
0918デフォルトの名無しさんNGNG
>>915は初心者板へ行ってアプリの使い方から勉強しる
0919デフォルトの名無しさんNGNG
画面のハードコピー処理のプログラム(私がプログラミングしてものではありません)で、
殆どのPCでは印刷に成功するのですが、中には印刷出来ないPCがあります。

印刷まで行かないPCの失敗箇所は、
CreateCompatibleBitmapで作ったビットマップを
SelectObjectで選択するところでNULLが返却されています。

機種またはPCごとの設定で何か違いがあるのでしょうか?
私自身まだ詳しくないので、わかりづらい説明で申し訳ありません。
0920デフォルトの名無しさんNGNG
完了だと、指定した内容で何らかの動作が実行されてしまったり、設定内容が保存されてしまったりするじゃないですか。実際は知らないけど、少なくともイメージ的には。
それに対して、つまりキャンセルしたいんですよ。何の動作も行わせたくなかったり、設定内容を保存したくなかったり。
0921デフォルトの名無しさんNGNG
じゃあキャンセル封じんなよ
ネタか?
0922デフォルトの名無しさんNGNG
支離滅裂だな。ネタ認定。
0923デフォルトの名無しさんNGNG
>>921-922
ネタにしたいから焦ってるのか?
どうして、920が903=915と同一人物だと
思っているのか小一時間問い詰めたい
0924デフォルトの名無しさんNGNG
今日の目標:誰宛のレスなのかを明確にしよう。
0925デフォルトの名無しさんNGNG
結論:ウィザードに限らずダイアログにはキャンセルを実装しよう。
0926デフォルトの名無しさんNGNG
目標:出来れば人生のキャンセル方法も議論してみよう
0927903NGNG
ごめん。漏れ勘違いしてたのかな。ウィザードって

 �@何とかウィザードにようこそ!(戻る|次へ|キャンセル)
 �A条件1設定(戻る|次へ|キャンセル)
 �B条件2設定(戻る|次へ|キャンセル)
 �C次へを押すと実行します(戻る|次へ|キャンセル)

  〜ここで実行〜

 �D実行しますた(戻る|完了)

だと思ってたけど違うの?ひょっとして

 �@何とかウィザードにようこそ!(戻る|次へ|キャンセル)
 �A条件1設定(戻る|次へ|キャンセル)
 �B条件2設定(戻る|次へ|キャンセル)
 �C完了を押すと実行します(戻る|完了|キャンセル)

  〜ここで実行(ウィザード閉じる)〜

 �D実行しますた(メッセージボックス)

だったりする?




0928デフォルトの名無しさんNGNG
>>923
アタマだいじょうぶ?ぼく
0929デフォルトの名無しさんNGNG
どのウィザードをもって判断してるんだろう・・・
0930デフォルトの名無しさんNGNG
>>927
実行した後で戻れるプログラムって、怖いけど見てみたい。
0931デフォルトの名無しさんNGNG
ブラウザを比較しよう part 2
http://pc3.2ch.net/test/read.cgi/software/1032017120/

このスレから飛んできたのですが、教えて下さい。
IEの起動がMozillaよりも速いのは、MSが隠しAPIを使っているからだと
言っているのですが、そんなことってあり得るんですか?
勿論、隠しAPI使うことは否定しませんが、それで速度にものすごく差が出るんですか?
0932903NGNG
ごめん。間違えた。眠気が。。。
前者の�@と�Dには「戻る」はないです。
そういうのってなかったっけ?
0933デフォルトの名無しさんNGNG
>>932
それなら最初からそう説明しないと、ずっとキャンセルボタンが無いのかと思われるよ。
そういうウィザードはある。もしくはキャンセルボタンなどの使わないボタンを使用不可にするとか。
0934デフォルトの名無しさんNGNG
ファイルの非同期読み書きは

どのようにすればよいのでしょうか?
0935デフォルトの名無しさんNGNG
CreateFile で FILE_FLAG_OVERLAPPED 付けて、
ReadFileEx, WriteFileEx使えばええんでわ?
0936デフォルトの名無しさんNGNG
>>931
単にIEがOSの一部だから、起動時にロードされてるんだろ
隠しAPIの10や20使ってるとは思うが・・・
0937771NGNG
>>802

亀レスでスマソ

CreateProcessするところを、別スレッドを起こして
その中でやっていたためにうまく行かなかったようです。

ソケットは、プロセスセーフではない、だけでなく、
スレッドセーフではない、ということでしょうか?
0938デフォルトの名無しさんNGNG
>>931
隠しAPIごときで差が出ることほとんど考えられないな。
0939903NGNG
>>933
言葉足らずでスマソン。
でも後者のスタイルが一般的なのならそっちにしようかと思います。

後学のために使わないボタンを使用不可にする方法も
一応知っておきたいのですが、やっぱ GetDlgItem() なんでしょうか。
0940デフォルトの名無しさんNGNG
>>937
スレッドセーフの意味がわかっているのかと小一時間・・・(略
0941デフォルトの名無しさんNGNG
>>919
とりあえずGetLastError()でも見てみたら
0942デフォルトの名無しさんNGNG
>>939
PropSheet_SetWizButtons()とか。あと MFCの CPropertySheet あたりを参考に汁!
キャンセルボタンは、ずーと表示で、「次へ」を「完了」ボタンに変えるのが標準っぽいよ。
0943903NGNG
>>942
PropSheet_SetWizButtons() ではキャンセルは非表示または無効にできないですよね。
やはり>>927で言う後者が標準なんでしょうね。
0944デフォルトの名無しさんNGNG
>>943
そんなに非表示にしたいなら、実際にやってみりゃいいのに。
 ::ShowWindow( ::GetDlgItem( hWizDlg , IDCANCEL ) , SW_HIDE );
でできたよ。
0945デフォルトの名無しさんNGNG
ファイルハンドルから、ファイル名って逆引きできませんか?
0946デフォルトの名無しさんNGNG
NT4.0でGetFileAttributes("NUL")を呼ぶと、FILE_ATTRIBUTE_DEVICE
ビットが立っていないのですが、これはXP/2000でも同様でしょうか?
NT4.0以降でファイルをオープンせずに、デバイスかどうかの判別をするには
どうしたらいいのでしょうか?
0947デフォルトの名無しさんNGNG
>>945
CreateFileMapping -> MapViewOfFile -> GetMappedFileName
の3段攻撃で。
0948945NGNG
>>947
THX。E:\test.txt を試したら、"\Device\HarddiskVolume4\test.txt" と
返ってきて面食らいましたが。
//うーん、でも、GetMappedFileName が 9xでは使えないのか...
0949919NGNG
>>941
アドバイスありがとう。
仰る通りにエラー番号を取得してみますね。
では。
0950デフォルトの名無しさんNGNG
age
0951デフォルトの名無しさんNGNG
SDKでフレームを実現するにはどうすれば良いのでしょう?
因みにフレームとはウインドウを仕切るフレームのバーの事を指しています。
0952デフォルトの名無しさんNGNG
初めて書き込ませてもらうんですが
APIでアルファブレンディングを実装するにはどうしたらいいのでしょうか?
ピクセル単位でブレンドしたい画像それぞれのRGBを取得して
計算を行えばいいのでしょうか?
計算の方程式は簡単に思いつくのですが、それでは恐ろしく遅いと思うので
一応ゲームに使う予定なので、もっと早い方法はないのか……と
思っているところです。
0953デフォルトの名無しさんNGNG
>>951
スプリッタのこと?
完全に自分で実装するしかないよ。
WM_LBUTTONDOWNが来たときにSetCaptureして〜てな感じで。

>>952
AlphaBlend(
HDC hdcDest,
int nXOriginDest, int nYOriginDest,
int nWidthDest, int hHeightDest,
HDC hdcSrc,
int nXOriginSrc, int nYOriginSrc,
int nWidthSrc, int nHeightSrc,
BLENDFUNCTION blendFunction
);
0954デフォルトの名無しさんNGNG
質問です。
構造体のリファレンスが載ってる本もしくはHPってしりませんか?
0955デフォルトの名無しさんNGNG
>>954
お前は
今朝までに作った構造体の数をおぼえているのか?
0956デフォルトの名無しさんNGNG
>>954
英語版のMSDNへ逝けよ。
0957あNGNG
>955
お前は今まで食べたパ(以下略
0958デフォルトの名無しさんNGNG
(以下略 =>ンツの数を覚えているのか?
0959デフォルトの名無しさんNGNG
ある大きさ(単位pt)のフォントの高さの上限というものは決まっているのでしょうか?
例えばどんなフォントでも12ptならば高さ0〜X以内におさまる、と言えるのでしょうか?
言えるのならばXの値を取得する方法を教えてください。
0960デフォルトの名無しさんNGNG
>>959
フォントサイズが12ptなら高さ上限は12ptだと思うが?
0961デフォルトの名無しさんNGNG
何の単位で取得したいんだか。

>>950 次スレは?
0962デフォルトの名無しさんNGNG
>>953
スプリッタと言うんですか。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_117.htm
こういうやつです。

しかしこのやりかたでは、3つ以上に分割できない。

どうやって実装するのかイメージが掴めません。
もうすこしヒントを頂けないでしょうか?
0963デフォルトの名無しさんNGNG
指定された文字が全角か半角かを判別するAPIありませんか?
0964デフォルトの名無しさんNGNG
>>962
楽をしたいのならスプリッタ専門のウインドウを作るといいよ
勿論、その分リソース消費することになるけど。
それがイヤなら実装でがんばるしかない。
0965デフォルトの名無しさんNGNG
そもそもプロポーショナルフォントに全角も半角もないが。
0966デフォルトの名無しさんNGNG
>>963
文字ってなんだよボケナス。
SJISの上位バイト判定ならIsDBCSLeadByteでも使っとけ。
0967デフォルトの名無しさんNGNG
>>965
ネタで言ってんのかマジで言ってんのかわからん。
0968964NGNG
>>962
役に立たないかも知れないけど、
うぷろだ用意してきたら昔つくったソース上げるよ
0969966NGNG
>>964
いい人がいるもんだな。
超低レベルな煽りしか書けないアホ共に
爪の垢を煎じて飲ませてやってくれ。
0970デフォルトの名無しさんNGNG
>>965
勿論固定ピッチのフォントです

>>966
文字コードとかに依存しない方法が知りたいんです。
たとえば、昔PC98であった2バイト半角文字とか、UNICODEのキャラクタとかのように、
文字列のバイト数で簡単に判別出来ない事があるので

指定のグリフの属性がhalf-widthかfull-widthか知りたいのです。
勿論、そんなAPIが無いので困っているのですが…

http://www.microsoft.com/japan/developer/windows/techart/FixedPitchFont.asp
ここで明らかにされたようにXP以外の環境だと、
固定ピッチでも全角が常に半角の2倍の幅になるとは限らないので
GetCharWidth32()で得た値を信じて文字を描画していくことが出来ないのです。
今まではSJISだったので単純に(文字列のバイト数*半角文字の幅)で幅が計算
出来たのですが、UNICODE化するとそうも行かず困ってます。
0971デフォルトの名無しさんNGNG
>>936
例の和解で公開されたものから1つ例を挙げるとShowJavaConsoleか。
これのおかげで速くなってるとはまったくもって思えないけど
0972959NGNG
取得したいのは論理単位でです。
おなじ12ptでもフォントによってTEXTMETRICのtm.tmHeightは異なるので
上限があるのかなと思ったのですが…
0973デフォルトの名無しさんNGNG
>>970
ふつーGetTextExtentPoint32()で一々数えると思うが。
0974デフォルトの名無しさんNGNG
新スレ立てます。
0975デフォルトの名無しさんNGNG
立てますた。
http://pc3.2ch.net/test/read.cgi/tech/1032548635/
0976デフォルトの名無しさんNGNG
>>970
Unicodeか・・・ちなみにギリシア文字(アルファとかベータとか)は全角だと思いますか?半角だと思いますか?
0977デフォルトの名無しさんNGNG
>>976
んなVB厨みたいなこと言うなよ。
全角に決まってるじゃん
固定ピッチフォントで確かめれば一発でわかるじゃん。
ちったー自分で試してみろよ
0978デフォルトの名無しさんNGNG
>>977
ぎゃはは! マヌケなDel厨発見。

コードページって知ってるか?
それ以前にUnicodeって知ってるか?

けっこう笑えたんで晒しとくね。
0979デフォルトの名無しさんNGNG
>977
固定ピッチのCourier Newで試してみたところ、半角ですた。
0980デフォルトの名無しさんNGNG
>>977
実は自分がVB厨?

( ´,_ゝ`) プッ
0981デフォルトの名無しさんNGNG
仲良くな。
0982デフォルトの名無しさんNGNG
> 全角に決まってるじゃん
> ちったー自分で試してみろよ

( ´,_ゝ`) プッ
0983デフォルトの名無しさんNGNG
>>977
自分が限られた環境の中で生きていることを忘れているらしい…
0984デフォルトの名無しさんNGNG
977のスキルを考慮して反論を予想してみると、
 V B 厨 必 死 だ な (藁
くらいが関の山だろな。

自業自得なんで同情はできんが。
0985デフォルトの名無しさんNGNG
>>984
「俺がやったときはそうだった」とかな。
0986デフォルトの名無しさんNGNG
CreateThreadについて質問です。
MSDNのヘルプに
> C ランタイムライブラリの関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、
> _beginthread 関数と _endthread 関数を使うようにしてください。
と書いてあったのですが、これは何故ですか?
言われたとおり_beginthread/_endthreadを使いましたが、気になったんで…
0987デフォルトの名無しさんNGNG
FAQだ氏ね
0988デフォルトの名無しさんNGNG
ランタイムの初期化処理や終了処理が必要になるから。
ただし、すべてのランタイム関数で必要なわけではない。
0989デフォルトの名無しさんNGNG
>>986
ライブラリの内部変数排他処理絡みじゃないの?
_beginthreadで、排他処理用mutexの初期化とかやったりとか
考えられる。(合ってるかどうかわからないけど)
0990デフォルトの名無しさんNGNG
なんでライブラリのソースみないの?
0991デフォルトの名無しさんNGNG
例えば asctime のような関数をスレッドセーフに作るなら、スレッドごとに領域を確保しなきゃならんし、解放しなきゃならんでそ。実装の詳細は知らんけどたぶん。
0992986NGNG
>>988-991
レスありがとうございます。
>>991さんのレスで納得しました。
レス数が950を超えています。1000を超えると書き込みができなくなります。