トップページ⇒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
0792デフォルトの名無しさんNGNG
MesseageBox と Ifをつかって

はい いいえのプログラヌを造りたいのですが
______
  ↑
之の名前がわかりません
0793デフォルトの名無しさんNGNG
>>792
そうですか。
0794デフォルトの名無しさんNGNG
>792
ガッカリだ!
0795デフォルトの名無しさんNGNG
なんていったかな?
0796デフォルトの名無しさんNGNG
フーン
0797711NGNG
続きです。

子プロセスで recv しようとしたら
 10093 WSANOTINITIALISED WinSockシステムが初期化されていない。
って怒られたので、WSAStartup() を追加した。

すると今度は
 10038 WSAENOTSOCK 指定されたソケットが無効である。
って出るし・・・

訳わからんです(ToT)
結局、
ちゃんと SOCKET が継承されていないんだろうなぁ(´ヘ`;)ハァ

今日は帰って、頭冷やして明日やりますです。
レス下さった方、ありがとうございましたm(__)m

ではでは
0798デフォルトの名無しさんNGNG
>>792
MB_YESNO
0799771NGNG
>>797
自己レス
訂正 711→771(汗
0800デフォルトの名無しさんNGNG
>>790
べつにCreateProcessしなくても逝けるぞ
メニューの動作をエミュレート(WM_COMMAND送信)するとか、
手作業の段階をWM_KEYDOWNとかkeybd_eventとかで再現するとか。
0801デフォルトの名無しさんNGNG
DDEやOLEオートメーションに対応してるならそれ使うとか
0802デフォルトの名無しさんNGNG
>>797
普通に動くが。
 cl -DADDR=0 -DPORT=12345 a.c -Feserver.exe wsock32.lib
 cl -DADDR=0x7f000001 -DPORT=12345 a.c -Feclient.exe wsock32.lib
 cl a.c -Fechild.exe wsock32.lib
#include <winsock.h>
int main(int ac, char **av) {
 SOCKET s, c; char buf[128]; struct sockaddr_in sin;
 PROCESS_INFORMATION pi; STARTUPINFO si = {sizeof si};
 WSADATA data; WSAStartup(MAKEWORD(1, 1), &data);
#ifdef PORT
 s = socket(PF_INET, SOCK_STREAM, 0);
 sin.sin_family = AF_INET; sin.sin_port = PORT;
 sin.sin_addr.s_addr = htonl(ADDR);
#if !ADDR
 bind(s, (struct sockaddr *)&sin, sizeof sin);
 listen(s, 1);
 c = accept(s, NULL, NULL);
 recv(c, buf, 4, 0); printf("server: %.4s\n", buf);
 sprintf(buf, "child %d", c);
 CreateProcess(NULL, buf, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
 WaitForSingleObject(pi.hProcess, INFINITE);
#else /* ADDR */
 connect(s, (struct sockaddr *)&sin, sizeof sin);
 send(s, "0123456789", 10, 0);
#endif /* ADDR */
#else /* !PORT */
 recv((SOCKET)atoi(av[1]), buf, 6, 0); printf("child: %.6s\n", buf);
#endif /* !PORT */
 closesocket(s); return 0;
}
0803デフォルトの名無しさんNGNG
仮想キーコードから、他のキーコードとは重ならない文字列を作ることはできますか?
 UINT uScanCode = MapVirtualKey( VK_INSERT, 0 );
 GetKeyNameText( uScanCode << 16, keyname, sizeof(keyname)-1 );
とすると Ins ではなく Num 0 が得られ VK_NUMPAD0 との区別ができないのです。
他に VK_PRIOR, VK_NEXT, VK_END, VK_HOME, VK_LEFT,
VK_UP, VK_RIGHT, VK_DOWN, VK_DELETE などもうまくかないようです。
0804デフォルトの名無しさんNGNG
uScanCode = MapVirtualKey(vk, 0);

if(vk == VK_APPS ||
vk == VK_PRIOR || vk == VK_NEXT ||
vk == VK_END || vk == VK_HOME ||
vk == VK_LEFT || vk == VK_UP || vk == VK_RIGHT || vk == VK_DOWN ||
vk == VK_INSERT || vk == VK_DELETE ||
vk == VK_NUMLOCK) ext = 1 << 24;

GetKeyNameText((uScanCode << 16) | ext, keyname, sizeof(keyname)-1);
0805デフォルトの名無しさんNGNG
なるほど Extended-key flag は個別対応でガシガシですか。
どうもありがとうございます。
0806デフォルトの名無しさんNGNG
VC6sp5 をコマンドラインから使っています

TryEnterCriticalSection を使おうと思ったのですが、
そんな関数ないよって言われてしまいます。
MSDN を見ると winbase.h で宣言されていて kernel32.lib に入っているようなのですが、
windows.h をインクルードしていてもそんな関数ないと言われ、
シグネチャだけ書いてごまかしてコンパイルしても
リンク時にちゃんと kernel32.lib を引き渡していても
CCriticalSection.obj : error LNK2001: 外部シンボル ""int __cdecl TryEnterCriticalSe
ction(struct _RTL_CRITICAL_SECTION *)" (?TryEnterCriticalSection@@YAHPAU_RTL_CRI
TICAL_SECTION@@@Z)" は未解決です
math.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と言われてしまいます。
どうしてでしょうか?
0807デフォルトの名無しさんNGNG
Windows NT/2000:Windows NT 4.0 以降
Windows 95/98:サポートされていません。
ヘッダー:winbase.h 内で宣言
インポートライブラリ:kernel32.lib を使用

NT系であることを明示しろ。
リンクエラーはextern "C"
0808デフォルトの名無しさんNGNG
>>807
ありがとうございます。

#define _WIN32_WINNT 0x0500

で逝けました。
0809質問NGNG
質問
Win98SEでVc6sp5を利用して
画像の印刷プログラムを書いています。

プリンタを示すDCにStretchDIBitsで
300*400程度のイメージを書き込むことには成功するのですが。

色々問題が発生します。
1 デジカメで撮影した1600*1600くらいの画像を貼り付けると失敗して表示されない。
2 そこそこのサイズを2枚はると失敗して何も表示されない。
3 困ったことにエラーが帰ってこない。

そこでプリンタDCを使わないでスクリーンから生成したメタファイルを
使って同じようにDIBを貼り付けてみたところ。
同じ症状になりました。

なにか解決方法はあるのでしょうか?
0810デフォルトの名無しさんNGNG
>>809
貼り付けようとしてるDIBは正しいか?
(ファイルに保存してペイントとかで開けるか?)

StretchDIBitsでディプレイに表示することができるか?

SetStretchBltModeでHALFTONEとか指定してないか?

あと、JPEGとかPNGを書き込もうとしてるけど、
ドライバが対応してない(あるいはバグがある)とか?
0811画像分割は避けたい。NGNG
>>810
StretchDIBitsで画面表示も印刷も出来ます。
BltModeは無指定です。
データはBI_RGBのDIBで、Jpegではありません。

小さな画像なら印刷も画面表示も成功します。
ただ
300万画素程度のデジカメで撮影したデータをA4一杯に広げて印刷を
かけると失敗します。

自己レスみたいですが
画像印刷について方々を調べて廻ると、
1 印刷はStretchDIBitsを使わないと失敗する。
2 24bit無圧縮のDIBを使う事、DDBは印刷できない。
3 大きなBitmapは分割して転送する。

とあります。
多分今回の問題は転送するデータが巨大?だった為でしょう。
しかし これはあくまでプリンタードライバーを経由する
問題の為であり、印刷時に限って起こる問題と思います。
メタファイルを画面のDCから取得する場合は
その制限を受けないものと考えられますが、
実際は同じ症状になります。
うーん困った。
画像分割は処理がめんどくさすぎる。
第一成功するかどうかわからん。
0812デフォルトの名無しさんNGNG
外してると思うが、
そのプリンタでは
GetDeviceCapsでRASTERCAPSを取ったとき、
RC_STRETCHDIBがないとか(w
0813デフォルトの名無しさんNGNG
>>811
719,722辺りに書かれている症状と少し似てるね。
0814デフォルトの名無しさんNGNG
ウインドウの上下関係をいじるにはどうすればいいでしょう?
0815デフォルトの名無しさんNGNG
>>814
Zオーダーのこと?
それとも、単なる座標のこと?
まぁ、どちらにしてもSetWindowPosを使う
0816 NGNG
>>813
症状は同じですね。
小さな画像は正常に動作し、大きな画像は真っ白になるが
APIは全て正常値を戻す。

こちらも原因調査中です。
新たにわかったことは
1 1024*1024以上のBitmap?の転送は失敗しやすい。
2 16BitのAPIを通過する処理はリソース制限を非常に受けやすい

現在画像分割処理で調査中・・あぁー面倒だぁ。
これで失敗したら手詰まりだぁ。
0817デフォルトの名無しさんNGNG
>>816
>>816
症状の切り分けとして、
単に巨大な画像を送るとコケやすいのか
拡大して、巨大にするとコケやすいのか
を判別してみたら?
SetDIBitsToDeviceとかで、等倍でデカいのを送ってみるとか
0818817NGNG
何か1行余分だけど、
単なるミスです。他意はありません。
0819デフォルトの名無しさんNGNG
他のアプリケーション内のエディットコントロールのテキストを取り出すにはどうすればいいですか?
WM_GETTEXTなどはいくらSendMessageしても届いてないようです(Spy++で確認)

よろ
0820デフォルトの名無しさんNGNG
GetWindowText
は昔の時代にはそのまま通った気がする。
いまはNTの時代だからプロセス境界を真っ当に超える
フック+共有メモリ(FileMappingによる)あたりが妥当か。
0821デフォルトの名無しさんNGNG
なぜ、COMを使わない? HRESULT GetEditText([out, retval]BSTR* pResult);
0822819NGNG
>820
ども。
共有メモリを作ってそこに吐き出させようとしているのですが
メッセージ自体が届きません。
フックとおっしゃってますから、メッセージでテキストを吐かせるというアプローチ自体がちがうと言うことかな?
フックって具体的に何をフックしますか?
いろいろ聞いてスマソ

>821
COMを全く理解してない物で・・
0823デフォルトの名無しさんNGNG
ウインドウを間違えているという落ちではなかろうな。
0824デフォルトの名無しさんNGNG
>821
それは、「他のアプリケーション」のコードに
手を出せることが条件では?
「他人のアプリケーション」でも有効なのか?
0825821NGNG
>>824
>「他人のアプリケーション」でも有効なのか?
しゅーん。すまそん。
0826819NGNG
>823
その可能性も疑ったのですがSpy++で確認したところ
ターゲットに送っているハズです。
ちなみに時プロセス内に用意したエディットには正しく処理されます。
ウインドを選んでメッセージを投げる部分はプログラムになっているので
手で打ち間違えたとかそう言う可能性はなさげです
0827デフォルトの名無しさんNGNG
普通のエディットコントロールはCOMのインターフェイスもってないぞ
0828821NGNG
でたらめ言ったおわびに、リクターのナポレオン本(Advanced Windows)調べたよ。
結論から言うと、NT4では可能(Advanced Windowsのターゲット)。ならば、2000やXP
でも可能ではなかろうか?
ミソは、user32内で、WM_GETTEXTLENGTHを最初に呼び出し、共用メモリーにその長さ
を割り当て、次にWM_GETTEXTを実行する(アプリケーション側はWM_GETTEXTLENGTH
呼ぶ必要はない)。ということろを考えると、823の予測が正しいと思われ。
そもそも、自プロセス内のHWNDしか取れないAPIを呼び出して、それを利用している
という可能性は?
0829デフォルトの名無しさんNGNG
>>819
> WM_GETTEXTなどはいくらSendMessageしても届いてないようです
WM_GETTEXTは他のプロセスでも取得できますが?
0830デフォルトの名無しさんNGNG
ラジオボタンをアプリ起動時にチェックさせたいです。どうすればいい?
猫でもわかるプログラミングで紹介されてるけど、そのとおりにやってもうまくいきません。

あと、ラジオボタンのどの項目がチェックされてるかを調べるのにはどうすれば?
0831819NGNG
とりあえずいろいろ調べてみたところ時々メッセージは届くようです
10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます
でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
0832あNGNG
>830
もうちょっと詳しく書いたら?
うまくいかないならどう上手くいかないのかを
書くのが礼儀と思うんだが。
0833画像印刷、分割失敗NGNG
>>810
>>813
>>816
StretchDIBの処理を改良して
巨大Bitmapを100*100に分割して転送するように処理を修正しました。
結果
20枚?程転送すると急に何も転送しなくなり(APIはエラーを戻さない)
(つまり虫食いの画像が出来上がる。)
さらに転送するとhDCの他のデータも全て消えてしまいます。
(先に書き込んだ部分も含めて)
書き込み先のコンテキストはメタファイル、PrinterDC共に失敗でした。

考察
bitmapの転送はサイズが巨大でも、書き込む回数が多くてもダメと言うことです。

お願い!!
もうメタファイルは諦めるしかないかも。
頼むーー誰かヒントをください
0834デフォルトの名無しさんNGNG
>>832
http://www.kumei.ne.jp/c_lang/sdk/sdk_31.htm
↑ここの

Button_SetCheck(GetDlgItem(hWnd, IDC_RED), BST_CHECKED);
これで、IDC_REDがオンにセットされます。 関数では
((void)SendMessage((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L));
となります。(check)のところにBST_CHECKEDまたは、BST_UNCHECKEDがきます。 これに対して、ボタンの状態を取得するには、
Button_GetCheck(hwndCtl);
関数では、
((int)(DWORD)SendMessage((hwndCtl), BM_GETCHECK, 0L, 0L));

の部分を自分のプログラムに実装したんですが、
Button_SetCheckとButton_GetCheckは定義されてないとかコンパイラ言われるし、
SendMessage使ったらコンパイルはできるけど、起動したら使ってない時と変わらないです。

助けてください
0835デフォルトの名無しさんNGNG
>>819
> でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
WM_GETTEXTは他のプロセスでも直接取得できますが?
ReadProcessMemoryは何のために?
0836デフォルトの名無しさんNGNG
>>834
> Button_SetCheckとButton_GetCheck
#include <windowsx.h>

> SendMessage使ったらコンパイルはできるけど、
> 起動したら使ってない時と変わらないです。
目的のラジオボタンのウィンドウハンドルは
間違いなく取得できてるの?
実際にはSendMessageをどのようにソースに記述したの?
0837819NGNG
>835
ホントだ・・。どうもありがとうございます。
実はゴールはエディットではなくて試しにエディットを使ってただけなので
もうしばらくReadProcessMemoryなどの使い方をチェックしてみます。
(たぶんこの方法でもうまくいくはずだしこれで動かせないと困る……)
0838デフォルトの名無しさんNGNG
>>836
BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg) {
case WM_INITDIALOG:
((void)SendMessage(hDlg, BM_SETCHECK, (WPARAM)(int)BST_CHECKED, 0L));
break;
以下省略
0839デフォルトの名無しさんNGNG
ダイアログベースのアプリケーション作ってるんだけど・・・
右上のバッテン押したら終了するようにするにはどうすればいいですか?
0840836NGNG
>>838
ダイアログウィンドウに送信してどうすんのよ?
というか上に書いた回答をもっとよく読め。

SendMessage(GetDlgItem(hDlg, コントロールID),
    BM_SETCHECK, BST_CHECKED, 0);
または
SendDlgItemMessage(hDlg, コントロールID,
    BM_SETCHECK, BST_CHECKED, 0);
または
CheckDlgButton(hDlg, コントロールID, BST_CHECKED);
0841836NGNG
補足。
ラジオボタンの場合、初期化時以外は
CheckRadioButtonをおすすめする。
0842デフォルトの名無しさんNGNG
>>839
モーダルかモードレスかで答えが変わってくる。
つーか出来てないということはモードレスかな?
0843デフォルトの名無しさんNGNG
>>842
教えてください
0844デフォルトの名無しさんNGNG
>>843
だからモーダルとモードレスどっちなのよ?
0845デフォルトの名無しさんNGNG
>>844
モードレスです
0846デフォルトの名無しさんNGNG
>>845
WM_COMMANDで かつ LOWORD(wParam)がIDCANCELのメッセージか、
または WM_CLOSEメッセージを
捕まえて DestroyWindowすべし。
WM_COMMANDで処理したいなら、WM_CLOSEメッセージにはFALSEを返すべし。
0847デフォルトの名無しさんNGNG
LOWORD(wParam)って何をしているのでせうか?
詳細キボンヌ
0848デフォルトの名無しさんNGNG
>>847
それくらい、includeディレクトリの中見て自分で調べろよ。全部大文字ってことは
マクロだから、見りゃわかるだろ。
0849847NGNG
>>848
わかんねーよ。だからキーテンだろーが
何様だ、おまえ?
0850デフォルトの名無しさんNGNG
>>847=>>849
逆切れかっこ悪い。それぐらい自分で調べられないなら、あきらめろ。
0851あNGNG
>849
おまえこそ知らない人に
ものを教えてもらう立場にあるというのに
なんだその口の利き方は?

まぁいい。マジレスしてやる。
>847
>848と同じだがincludeディレクトリの中身見ればわかる。
というより右クリック定義うんたらで飛べるはず。
もし、即ヘッダ見るということを思いつかないなら
まだAPIは早い。
Cでもやってるべし。
0852デフォルトの名無しさんNGNG
LOWORD() の関連質問なんですが、

DWORD a;
WORD b = ( WORD ) a ;
WORD c = ( WORD )( a & 0xFFFF ) ;

LOWORDの define は c ですね。
で、何でわざわざ c のような変換をするのか分かりません。
bより c のような変換の方が安全(?)とかそういうのがあるんでしょか?
0853デフォルトの名無しさんNGNG
外してたらスマソ。今、考えたとこで検証したわけじゃないんでね。
char ch = -1;
WORD c = LOWORD(ch);
とやった場合であっても、c = 0xff となって欲しい。
もし、WORD b = (WORD)ch; と展開すると、b = 0xffff となる。
からじゃないかな?
識者の突っ込みキボーン。
0854デフォルトの名無しさんNGNG
>>852
WIN32環境ならばどちらでも変わらない(別に0xFFFFを付ける必要はない)
けど、仮にWORDが16ビットより大きいサイズの処理系が
あったとすれば、そこでは 0xFFFFが大きな意味を持つ。

ちなみに俺のVC++5.0はヘッダファイルが古いからか
#define LOWORD(l) ((WORD)(l))
と定義されてるよ。

>>853
どちらの場合も結果は 0xFFFFですが。
0855853NGNG
>>854
逝ってきます……
64bit Windows用の定義が追加されたってことなのかな?
0856852NGNG
>853-855
どうもです。
  >仮にWORDが16ビットより大きいサイズの処理系があったとすれば
ということで納得です。
0857デフォルトの名無しさんNGNG
>10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます
4バイト……
……ポインタのサイズ?
0858デフォルトの名無しさんNGNG
DWORDってDouble Word の略でしょ?
Wordってどういう意味がある変数型なの?
あと、Doubleが付くことで意味が違ってるの?
0859デフォルトの名無しさんNGNG
WORD
 ASCII文字1文字分
  =1バイト=8bit

DWORD
 ASCII文字2文字分
  =2バイト=16bit
0860デフォルトの名無しさんNGNG
ごめん間違えた

WORD
 ASCII文字2文字分
  =2バイト=16bit

DWORD
 WORD2個分
  =4バイト=32bit
0861デフォルトの名無しさんNGNG
>>859
それじゃ Character だよ。
WORD は、もともとはプロセサが普通に処理できるデータの大きさ。
C 言語言うところの int と同じ概念。
MS が使いだしたのが、8086〜80286 の頃だったので、16bit になって
今日に至る。DWORD はその倍のビット幅 (=32bit)
0862デフォルトの名無しさんNGNG
>>861
プッ
0863デフォルトの名無しさんNGNG
IA-32では
WORD =16bit(2byte)
DWORD=32bit(4byte)
QWORD=64bit(8byte)
が慣例だね。

> WORD は、もともとはプロセサが普通に処理できるデータの大きさ。

のようにCPUにより異なるから注意しよう!

ってここアセンブラのスレだったっけ?
0864デフォルトの名無しさんNGNG
>>863
プッ、そんなんでアセンブラしてるつもりになってるよ
0865デフォルトの名無しさんNGNG
>のようにCPUにより異なるから注意しよう!
正しくは、定義により異なる。
0866デフォルトの名無しさんNGNG
> アセンブラしてる
ぷぷっ
0867デフォルトの名無しさんNGNG
SPARCなんかだとWORDは4byteが慣例だったなあ
sagesage
0868デフォルトの名無しさんNGNG
Window(DC)に描画途中の画面を表示させ無いようにする、
HSPでいうredraw 0とredraw 1のような感じのAPIってありませんか?
0869デフォルトの名無しさんNGNG
CreateCompatibleDC
CreateCompatibleBitmap
etc...
0870868NGNG
やっぱし自分でバッファ確保しないと駄目ですか。
それならそれでオッケーでス。ありがとうさようなら。

もう会うことは余り無いでしょう。
0871デフォルトの名無しさんNGNG
アセンブラとアセンブリの違いにこだわっているやつほど通常の会話に変な日本語を使っているやつが多い。

マーフィーの法則 第23条の18より
0872デフォルトの名無しさんNGNG
(´-`).。oO(>>871は自分の文章が変なことに気づいているのだろうか…)
0873デフォルトの名無しさんNGNG
どこもおかしくねーぞ(藁
むしろ>871のは文章じゃなくて文なわけだが
0874871NGNG
>>872
マーフィー本は俺のプログラマ生活にとって欠かせない、
いわばバイブル。条項もすべて暗記した。
が、アセンブリとアセンブラの意味については
未だよくわかっていない。
0875デフォルトの名無しさんNGNG
>アセンブラしてるつもり
ウケタ
0876デフォルトの名無しさんNGNG
>>873
「〜やつほど〜やつが多い」は明らかに変だが。
0877デフォルトの名無しさんNGNG
アセンブラー:アセンブルするひと。
アセンブリ:アセンブリ言語。言語名。
アセンブル:アセンブリ言語を機械語コードに直すこと。
・・・と思う。
0878デフォルトの名無しさんNGNG
>>877
> アセンブラー:アセンブルするひと。
ふつーは処理系の方を指す。nasm とか gas とか。
0879デフォルトの名無しさんNGNG
.NETではアセンブリはまた違う意味が
0880デフォルトの名無しさんNGNG
アセンブラって、
アセンブリ言語を機械語コードに直すソフトのことだよね?
昔、「ブリをブラでブルする」と覚えた気が・・・。
0881デフォルトの名無しさんNGNG
おまえらスレ違いもいいとこなので移ってください。
http://pc3.2ch.net/test/read.cgi/tech/1016991911/l50
0882デフォルトの名無しさんNGNG
ダイアログボックスにアイコン付けたいんだけど、どうしたらいいかな?
0883デフォルトの名無しさんNGNG
WM_SETICON
SetClassLongでもまあできないこともない。
0884デフォルトの名無しさんNGNG
Win32系で64bitの変数扱いたい場合どうしたら良いですか?
コンパイラはBCC5.5.1です
0885デフォルトの名無しさんNGNG
LONGLONG
0886デフォルトの名無しさんNGNG
int_64(コラ
0887デフォルトの名無しさんNGNG
LONGSHORT
0888デフォルトの名無しさんNGNG
どうやらBorlandC++は__int64という型のようでした

ところで追加質問になってしまうんですけど
printfとかで64bitの整数を文字列にする事ってできないんですか?
%dだとintサイズだし、色々調べてllとか付けて見てもNGでした
0889デフォルトの名無しさんNGNG
>>888
> printfとかで64bitの整数を文字列にする事ってできないんですか?
使ってるライブラリによる。Borland は知らんが VC の MSVCRT.DLL だと
プリフィクス I64 だね。
0890デフォルトの名無しさんNGNG
>>888
ヘルプによると "%Ld" らしい。
0891デフォルトの名無しさんNGNG
GetOpenFileName でファイルの種類ごとにデフォルトの拡張子を指定するのにはどうすればよいのでしょう。
試しに
 lpstrDefExt = "txt\0htm\0ini\0doc\0";
みたいな感じでやってみましたが駄目でした。
フックを使って lpstrDefExt を変更するという手も考えたのですが、
フックを使うとプレースバーが表示されなくなってしまうようです。
どなたかおねがいします。
0892デフォルトの名無しさんNGNG
>> フックを使うとプレースバーが表示されなくなってしまうようです。

古い OPENFILENAME の代わりに、FlagsEx が追加された新しい OPENFILENAME を使えばいいんじゃないかな(推測)。 #if (_WIN32_WINNT >= 0x0500) で囲まれてるやつ。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxstructures/openfilename.asp
■ このスレッドは過去ログ倉庫に格納されています