- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:40:03 ]
- スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-10くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage 【前スレ】 61 ttp://pc11.2ch.net/test/read.cgi/tech/1199514664/
- 445 名前:デフォルトの名無しさん [2008/02/15(金) 18:03:59 ]
- >>400
「じゃあ、テラの次ってナニよ?」 って事になるし、それは誰もわからない。ヤバイ。誰にも分からないなんて凄すぎる。 ネタとはいえ、どんだけ教養ないんだよとオモタ
- 446 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:20:19 ]
- テラの次と言えばハカだろjk
- 447 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:36:24 ]
- 自分が知ってるとこだけつっこむってのは、それ以外は知らないということでいいのか?
- 448 名前:デフォルトの名無しさん [2008/02/15(金) 18:41:30 ]
- >>441
ありがとー☆ さっそくつくってみる
- 449 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:28:57 ]
- >>448
がんばれ 超頑張れ DirectXとかゲームPGもいいけどそっちの世界も面白いぞ
- 450 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:59:45 ]
- >>446
テラって葬式だけやってるわけじゃないぞ
- 451 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:20:21 ]
- エキスプレスエディションは、コンソールアポリ作れるようなヘダーやリブラリーしか入って無くて、
ウィンドーズ.hとか、コモンコントール.hとかはウィンドーズSDKに入ってるから、 別途インストロールしないといけないと思ってたが、違ったのか。 つか、ウィンドーズSDKのコンパイラーいれないと、エキスプレスエディションだけじゃ、 RC.Exeがないから、リソースがコンパイールできませ〜ん、ってエキスプレスの妖精さんに言われたんだが。
- 452 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:22:26 ]
- そういや神社って葬式しないのかな?
皇室の葬儀もよく判らんし
- 453 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:31:01 ]
- >>451
VC++ 2008はWindows SDKのサブセットが入っている。
- 454 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:34:56 ]
- 神域は穢れを嫌うから神社で葬式はしないだろ
神格化していた頃ならいざ知らず
- 455 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:06:29 ]
- DT_CALCRECTでItaricの立ったフォントを計算して描くと右端が切れます。
仕様ですか?
- 456 名前:デフォルトの名無しさん [2008/02/15(金) 23:18:08 ]
- サクラエディタや寺パッドとかって標準のテキストボックスじゃないよね?
だとしたらDrawTextとかで自力で書いてるの?
- 457 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:23:20 ]
- サクラエディタはソース公開されてるはずだから見てみれば?
- 458 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:23:53 ]
- テキストエディタの実装技術っつたらひとつの研究分野ですがな
- 459 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:36:36 ]
- VC++ 2005、WinXPで開発しています。
unicodeアプリです。 ある文字が全角文字か、半角文字かを判定したいと考えています。 どのようなAPIがあるでしょうか、よろしくお願いします。
- 460 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:39:14 ]
- 普通にデータの文字コードを見ろよ
- 461 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:47:41 ]
- U+00C0〜辺りも半角って言うの?
- 462 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:58:05 ]
- ユニコードコンソーシアムがUnicode文字の属性として全角・半角などを決めている。
それとどういう関係かは知らないけど、 Windows APIでは、GetStringTypeExのCtype 3で、全角・半角を取得できる。
- 463 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:48:44 ]
- ttp://wisdom.sakura.ne.jp/system/winapi/win32/index.html
↑のサイト見ながらWinAPI勉強し始めたばかりの者ですが コマンドライン引数の項に乗っている一番最初のサンプルプログラムをコンパイルしてみたところ PSTRとLPCWSTRの型に互換性がないと警告され、データファイルを実行ファイルにD&Dすると文字化けしたパスが表示されました その前のメッセージボックスの項で紹介されていた引数の型と違うからおかしいとは思っていたのですが・・・ 一応、型変換なども試してみたのですが表示されるのはいつも文字化けしたファイルのパスです なんとか文字化けさせずにD&Dしたファイルのパスをメッセージボックスに表示させたいのですがどうしたらいいでしょうか?
- 464 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:00:52 ]
- ユニコードについてと、Windows & VCでのユニコード文字の扱い、
プログラム上での表記について調べるがよい。 とりあえず、PSTR はchar型へのポインタ、LPCWSTR はwchar_t型へのポインタのハズ。 別ものだよ。 ただ、そのページの例にも問題があるなw
- 465 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:04:48 ]
- >>463
環境は? VisualStudio2005からはUNICODE文字セット使用がデフォルトになってるからな マルチバイト文字セット使用にするか、ソースをUNICODEにあわせるかどっちかで
- 466 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:06:28 ]
- >>464
ありがとうございます! 早速ユニコード文字について調べてきます
- 467 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:09:58 ]
- >>465
VC++2005EEです ・・・っということはやっぱりユニコードですか GUI作成に至るまでに覚えることは多そうだ・・・・・
- 468 名前:デフォルトの名無しさん [2008/02/16(土) 01:26:39 ]
- >>429
方法がさっぱりわかんねーです(涙涙涙涙涙涙涙涙涙涙涙涙;;;;;;
- 469 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:39:40 ]
- >>463
<tchar.h>をインクルードして、 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PTSTR pCmdLine, int nCmdShow) とすればいい。
- 470 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:59:01 ]
- Lunaでグループボックス作ったんだけど文字の背景色が変だ
どうやったら直るか誰か教えてorz
- 471 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:05:09 ]
- >>468
IXXX->lpVtbl->Func() って感じで書く。 ヘッダ見たほうが早いよ。 C用に下記みたいなマクロが用意されているし。 #define ITaskScheduler_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
- 472 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:04:46 ]
-
- 473 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:17:13 ]
- ttp://www.asahi-net.or.jp/~kv8s-yjm/another/yja001.htm
特別分かりやすいわけではないと思っているけど、Cでやるサンプルがある。
- 474 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:58:18 ]
- Kitty on your lapてなに?
- 475 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:01:51 ]
- hello worldと同じ
- 476 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:11:07 ]
- 膝の上の子猫
- 477 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:11:39 ]
- GlobalFreeで何故かエラーがでてしまいます。
書いてあった関数コメントアウトして確保と開放の処理だけにしてみたのにやっぱりエラー… 何故でしょうか? 問題の部分のソースとエラー unsigned long long int MojiCount=0; static HGLOBAL hMem; char *MojiBuf; MojiCount=Edit_GetTextLength(hEdit); hMem=GlobalAlloc(GHND,sizeof(char)*MojiCount+2); if(hMem==NULL) MessageBox(hWnd,"メモリが確保できませんでした","メモリエラー",MB_OK); MojiBuf=(char *)GlobalLock(hMem); MojiBuf[MojiCount+2]='\0'; Edit_GetText(hEdit,MojiBuf,MojiCount+1); //本当はここで関数に*MojiBufを渡しててそれが原因かと思って、コメントアウトしてみたけどやっぱりエラーでる GlobalUnlock(hMem); GlobalFree(hMem);//←ここにブレイクポイント設置、ステップインするとエラー Windows によって ○○.exe でブレークポイントが発生しました。 ヒープが壊れていることが原因として考えられます。○○.exe または読み込まれた DLL にバグがあります。 あるいは、○○.exe がフォーカスを持っているときに、ユーザーが F12 キーを押したことが原因として考えられます。 可能であれば、出力ウィンドウに詳細な診断情報が表示されます。 HEAP[○○.exe]: Heap block at 0023EF50 modified at 0023EF5A past requested size of 2
- 478 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:13:00 ]
- > ヒープが壊れていることが原因として考えられます。
> Heap block at 0023EF50 modified at 0023EF5A past requested size of 2
- 479 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:19:16 ]
- C言語の基礎から勉強するスレなのか?
- 480 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:26:07 ]
- MojiBuf[MojiCount+2]='\0';
- 481 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:43:58 ]
- >>480
ありがとうございます。MojiBuf[MojiCount+1]='\0'だったw 弄ってたらいつの間にかエラーでるようになってしまったと思ってたらEdit_GetTextLength で返ってくるのが文字数-1だと気づいて+2に変えたとき間違えて変えてしまってたみたい しかも精神衛生的に'\0'入れるのはEdit_GetTextの後にやった方がいいよね こんなのでずっと悩んでたなんて…
- 482 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:19:57 ]
- >>481
というか、これでいいんじゃないのか? MojiCount=Edit_GetTextLength(hEdit)+1; hMem=GlobalAlloc(GHND,sizeof(char)*MojiCount); MojiBuf=(char *)GlobalLock(hMem); Edit_GetText(hEdit,MojiBuf,MojiCount); GlobalUnlock(hMem); GlobalFree(hMem);
- 483 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:53:50 ]
- >>474
膝の上の同居人、っつーADVだったような。 というか、たるとといいミュウミュウといい、あのサイトの中の人はネコミミ属性のようだ。 普通の言語のテク紹介サイトだと思ってたら、何の前触れもなくたるととか出てきたから吹いたw
- 484 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:34:39 ]
- MSDN死んでる?
- 485 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:34:58 ]
- キャラが一世代古いな
- 486 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:57:20 ]
- >>483そうそう!何の前触れもなくいきなりって、ネットで勉強してるとしょっちゅうあるよなww
俺は、それを流すんだが、その状況が可笑しくなってきちゃうんだがw 「あれー・・・、今なんか・・・。いや、勉強勉強!」っつってww
- 487 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:33:47 ]
- MessageBoxで処理をぶった切りまくったらポインタが大変なことになった。
- 488 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:53:11 ]
- ビットマップを表示するところとか、もうここでは書きたくない。
- 489 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:55:42 ]
- >>486
日本語でおk
- 490 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:28:09 ]
- (´・ω・`)しらんがな
- 491 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:43:45 ]
- > 俺は、それを流すんだが、その状況が可笑しくなってきちゃうんだがw
誰かこれを日本語に翻訳してくれ
- 492 名前:459 mailto:sage [2008/02/16(土) 21:46:57 ]
- >>462
ありがとうございます。それを使ってみることにします。
- 493 名前:431 mailto:sage [2008/02/17(日) 00:23:27 ]
- >>434
>>435 >>439 有難うございます。 また来ます。
- 494 名前:デフォルトの名無しさん [2008/02/17(日) 00:47:01 ]
- >>491
俺は、 「kitty on your lap」 この言葉を見てもいつも気にせずスルーして次の文にいくんだが、 毎回やるこの自分の行動に可笑しくなってきちゃうんだww
- 495 名前:デフォルトの名無しさん [2008/02/17(日) 02:09:22 ]
- MSTask.h にこういう文があるんだけど、interfaceキーワードって何ですか?
K&Rにも載ってないです。 interface ITaskScheduler { CONST_VTBL struct ITaskSchedulerVtbl *lpVtbl; };
- 496 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:20:32 ]
- #define interface struct
- 497 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:50:52 ]
- 素直にC++使ったほうが楽だよ
- 498 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:54:29 ]
- C++しらねーんだYO!
- 499 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:11:26 ]
- >>498
( ・∀・)人(・∀・ )ナカーマ!!
- 500 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:38:29 ]
- 素直にC++習得したほうが楽だよ
- 501 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 04:34:13 ]
- つーかCでCOMとか在り得ねー
lpVtblとか第一引数とか&IID_〜とかめんどいしC++でスマートポインタ使わないとやってられん
- 502 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 04:49:19 ]
- C で COM なんて C++ 勉強するより難しいと思う。
- 503 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:19:02 ]
- COMが世に出た当初はC全盛だったけどな
- 504 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:36:47 ]
- そしてCOMの世界で死ぬ。小一時間死ぬ。手始めにアパートメントモデルで死ぬ。
- 505 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:38:21 ]
- COMって1997年か。C全盛だったか?
- 506 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:41:48 ]
- COM で結局オブジェクト指向を勉強するくらいなら
C++ から入った方がマシ。
- 507 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 10:21:40 ]
- >>505
COMという言葉を前面に打ち出すようになったのはその頃からかもしれないけど、 技術的にはWindows 3.1までには出たはずのOLE2から始まったといっていいはず。。
- 508 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 12:41:31 ]
- ハンドルって何ですか?
- 509 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 12:43:26 ]
- FILE*のような、よくわからない何か。
- 510 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 12:48:13 ]
- 何らかの操作を行うときに必用になる識別子
- 511 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:12:06 ]
- char s[100];
sprintf(s,"%d",GetLastError()); MessageBox(NULL, s , NULL , MB_OK ); GetLastErrorを確認するには上のような書き方ですか?
- 512 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:14:22 ]
- それもいいけど、FormatMessageを使うと番号に対応するメッセージが得られる。
- 513 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:38:24 ]
- ハンドル=ポインタだと思っている
- 514 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 14:22:15 ]
- >>511
wsprintf使え
- 515 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 14:23:25 ]
- だったらcharもTCHARへ変えないと。
- 516 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 14:33:37 ]
- >>515
wsprintfってchar*使えなかったの?
- 517 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 14:42:48 ]
- つかえるのはwsprintfA
- 518 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 14:58:53 ]
- このスレでAとかWとかそんなレベルの話はやめようぜ
- 519 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:49:38 ]
- >>517
へぇ・・・ 俺BCCだから関係ないや
- 520 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:51:37 ]
- >>518
このスレだからやるんじゃないか 他所でやられるほうがウザい
- 521 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:56:37 ]
- >>518
大して難しい話でもないだろ charだと一文字1バイト、TCHARだと一文字2バイトってだけの話じゃないか
- 522 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:05:25 ]
- >>519
BCCでも、Win32 APIを直接使うなら関係ある話だろ?
- 523 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:07:58 ]
- >>521
なにいってんだ? TCHARは1バイトかもしんないぞ。
- 524 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:16:39 ]
- テーチャラは、チャラー型かヲチャラーテー型の切り替え用マクーロだろ
- 525 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:17:20 ]
- てーちゃらてーちゃら
- 526 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:23:40 ]
- ブチャラーテイに見えた
- 527 名前:デフォルトの名無しさん [2008/02/17(日) 16:37:35 ]
- 質問です。
タイトルバー以外のところをドラッグしてウィンドウを動かすために、WM_NCHITTEST で、 return DefWindowProc() == HTCLOSE ? HTCLOSE : HTCAPTION; ってやってるウィンドウで、ドラッグし終わったときを捉えたいのだけどどのイベントが飛んでくるのか判りません。 WM_LBUTTONUP と WM_NCLBUTTONUP かなーとか思って捕捉のためのイベントハンドラを作ったのだけど、 捕捉できず、Spy++ で何が飛んでくるのか確かめようと思ったらシステム全体が落ちてしまいます。 どなたか教えてください。 開発環境は VC2008EE + SDK + ATL/WTL で、VS2005proの include ディレクトリも include しています。
- 528 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:59:37 ]
- >>527
WM_MOVEじゃダメ?
- 529 名前:デフォルトの名無しさん [2008/02/17(日) 18:06:57 ]
- CoCreateInstance関数がちゃんと動いてくれません><
どうしてか理由が分からないです。 error C2115: 'function' : 互換性のない型が含まれています。 warning C4024: 'CoCreateInstance' : の型が 1 の仮引数および実引数と異なります。 error C2115: 'function' : 互換性のない型が含まれています。 warning C4024: 'CoCreateInstance' : の型が 4 の仮引数および実引数と異なります。 となります。 #include <windows.h> #include <mstask.h> HRESULT hr ITaskScheduler *pITS; hr = CoCreateInstance(CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskScheduler, (void **) &pITS); どこかおかしいところがありますか?
- 530 名前:デフォルトの名無しさん [2008/02/17(日) 18:07:36 ]
- CoCreateInstanceの前に
CoInitialize(NULL); があります。忘れました><
- 531 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:08:13 ]
- WM_EXITSIZEMOVEとか?
- 532 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:08:50 ]
- >>529
CとC++の違い
- 533 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:12:48 ]
- >>529
まずは、REFCLSIDとREFIIDの定義確認。
- 534 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:19:00 ]
- >>529
CTaskScheuler 用のヘッダファイルインクルードして無いじゃん。
- 535 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:28:46 ]
- >>527
Spy++使わなくても自分のWndProcなんだから、どんなイベントが飛んでくるか分かるっしょ。 DebugConsoleに吐きまくれ。
- 536 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:59:34 ]
- 拡張子をcppに変えればいいだけなのにね
- 537 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 20:51:08 ]
- ここは敢えて ->lpVtbl->
- 538 名前:527 [2008/02/17(日) 21:49:19 ]
- WM_EXITSIZEMOVE でいけましたー。ありがとうございました。
ところで、UINT uMsg の値から WM_〜 とかに変換してくれるライブラリとかありませんか? 変換がしんどかったのでw
- 539 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:59:55 ]
- 変換も何もそのまんまだろ
- 540 名前:デフォルトの名無しさん [2008/02/17(日) 22:03:55 ]
- あ、欲しいのは文字列です
- 541 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:05:53 ]
- WM_ のあるヘッダからテーブルを生成するプログラムを書いた気がする。
- 542 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:13:08 ]
- 文字列にしたいってことでしょ
- 543 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:15:16 ]
- だから文字列テーブルを作るんだよ
- 544 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:37:50 ]
- ラップされて、電子レンジに入れられてしまった子猫の事かと思ってたんだが違ったのか・・・。
- 545 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:40:28 ]
- >>544
まだその話してたんかいw
|

|