■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API 質問箱 Build5
751 名前:デフォルトの名無しさん :02/09/11 15:40
>>748-749
いや SMTP等をもってくるのが めんどくて

752 名前:デフォルトの名無しさん :02/09/11 16:40
smtpを持ってくるってなんだ?

あと、数〜十数は言い過ぎ。
確かに、送信部分だけならそうなるけど、
q-printとかbase64エンコードも事実上必須だし。

753 名前:デフォルトの名無しさん :02/09/11 16:48
>>752
送信だけならbase64だけでいい
あと必要なのはShift-JISからJISの処理だね
しかしbase64もShift-JIS->JISもSMTPとは関係ない
MIMEとSMTPをごっちゃにしないほうがいいよ

754 名前:デフォルトの名無しさん :02/09/11 17:13
>事実上必須

読めないのか?

755 名前:デフォルトの名無しさん :02/09/11 17:18
nkf使えばいいじゃん

756 名前:デフォルトの名無しさん :02/09/11 17:25
ShellExecute(0,0,"mailto:nobody@example.com?subject=test&body=aborn_me",0,0,SW_SHOWNORMAL);
送信ボタンは手で押せ。

757 名前:デフォルトの名無しさん :02/09/11 20:32
>>746
敢えて言えば、バイトオーダーや型のサイズの違い(time_t が 32bit か 64bit か)
に気をつけよう、ってとこかね。

758 名前:デフォルトの名無しさん :02/09/11 21:47
スレッドを使うLIBをDLLから間接的に呼び出しているのですが、
クライアントが終了すると、LIBのスレッドがクリーンナップを
経ずに強制終了してしまいます。

クライアント ==> DLL ==> LIB
DLL in
LIB in
クライアント in
クライアント out <<-- ここでLIBのスレッドが強制終了
LIB out
DLL out

スレッドを使っているLIBを安全にDLLから呼び出す方法はありますか?

もう一つ、クライアントでMFCを使っていると、LIBで確保しているメモリの
誤リーク検出をして、非常に鬱陶しいので、こっちもお願いします。

759 名前:デフォルトの名無しさん :02/09/11 21:56
>>753
送信だけならMIME/base64自体不要だと思うが

760 名前:デフォルトの名無しさん :02/09/11 22:29
dllmainのPROCESS_DETACHでLIBのスレッド終了を
待てばいいのでわ?

761 名前:750 :02/09/11 22:30
まじでおせーてください。

762 名前:デフォルトの名無しさん :02/09/11 22:31
>>759
添付ファイルはど〜やんの?

763 名前:デフォルトの名無しさん :02/09/11 22:34
送信だけ派:
 送信前にすべてのデータは整っている

mimeも必要派:
 >一番楽なのはどれですか?
 こんな事を言っている奴が下準備を済ませているとは考えられない

764 名前:デフォルトの名無しさん :02/09/11 22:37
>>753>>759
SJIS垂れ流しだけはやめてほしい。

765 名前:デフォルトの名無しさん :02/09/11 22:56
ピリオドのエスケープを忘れて、
メールが切れるとサーバー設置した会社に苦情をつけるな、たぶん。

766 名前:デフォルトの名無しさん :02/09/11 23:16
ESMTPでSJIS直接送るのと、
SMTPでUTF-7で送るのはどちらが
罪深い行為でしょうか?笑い、

767 名前:758 :02/09/11 23:17
>>760
PROCESS_DETACHの前にLIB内のスレッドが閉じられてしまうんです。
スレッドのメッセージキューにも、何の通知もないし、お手上げ状態です。

768 名前:デフォルトの名無しさん :02/09/12 00:43
>>766
添付ファイルでSJIS生のテキストどころかバイナリファイルまで平気で
送られまくってるのにメール本文になるととたんに叩かれるのが
不思議でなりません。どちらもmultipartの一員なのに。

769 名前:デフォルトの名無しさん :02/09/12 00:51
そんなの聞いた事ねー

770 名前:デフォルトの名無しさん :02/09/12 05:06
バイナリだろうがテキストだろうが、
添付ファイルはエンコードして送ってると思うが・・・

771 名前:デフォルトの名無しさん :02/09/12 10:56
起動側の acccept で取得したSOCKET にて
データの頭の方だけ recv して、その内容に応じた別プロセスを生成します。
別プロセスに、起動側の SOCKET を渡したいので、以下のようにしてみました。

sock を以下のように引数にしてプロセスを起動します。
 AnsiString SockName = AnsiString((unsigned int)sock);
 AnsiString Cmd = "HogeChildProc.exe" + " " + SockName;
 CreateProcess(NULL, Cmd.c_str(), NULL, NULL, true, NORMAL_PRIORITY_CLASS, NULL, NULL, &SupInf, &ProInfo);

HogeChildProc側で、
以下のように引数から SOCKET socket を作成します。
 unsigned int ui = (unsigned int)ParamStr(1).ToInt();
 SOCKET socket = (SOCKET)ui;

その後、
この socket にて recv を試みるんですが、うまくいきません。
もしかして、
呼び出し側で、一度 recv しているといまく行かないのでしょうか?


772 名前:デフォルトの名無しさん :02/09/12 11:02
ソケットはプロセスセーフじゃないよ
あと一度recvしたら受信バッファからデータは消える
消したくないならrecvの引数にMSG_PEEKを指定しる

773 名前: :02/09/12 11:17
>>771
引数に親のプロセスIDを追加して、子プロセスでDuplicateHandleしれ。
また、もしOSが9x系なら、親が明示的にハンドルを継承可能としてやる
必要がある。

774 名前: :02/09/12 11:18
>>772
プロセスセーフってどういう意味?

775 名前:デフォルトの名無しさん :02/09/12 11:57
>>774
プロセスチーズってどういう意味?

776 名前: :02/09/12 12:29
>>775
数種類のナチュラルチーズを加熱溶解し、乳化剤を加えて乳化させ、
それを型に入れて作ったものがプロセスチーズです。

777 名前:デフォルトの名無しさん :02/09/12 13:08
>>776
ありがとうございます。正常動作するようになりました。

778 名前:771 :02/09/12 13:28
れすthxです(^^ゞ

>>772
サイズ 10 のうち、4 だけ読み込んでも受信バッファから消えてしまうのですか?

>>773
CreateProcess の fInheritHandle を true にしてますが、
これだけではダメで、DuplicateHandleも必要ということですか?



779 名前:デフォルトの名無しさん :02/09/12 13:37
>>778
10bytes中4bytes読んだのなら受信バッファには6bytes残る

780 名前:771 :02/09/12 15:21
お世話になっております(^^ゞ

>>773
http://support.microsoft.com/default.aspx?scid=kb;ja;JP150523
ここを見てみると、
NTでは、特に DuplicateHandle は要らなそうだと思ったんですがどうなんでしょうねぇ?

>>779
ですかぁ
ちゃんと、SOCKETを継承できれば
親で先っちょだけ読んで、子で残りを読めるということですね


781 名前:デフォルトの名無しさん :02/09/12 17:16
シェルのアイコン(「お気に入り」など)を取得するにはどうしたら良いですか?

一応、フォルダパスを取得 → SHGetFileInfo で実現できてるんですが、
もっとストレートに取得できないかな...と。

782 名前:781 :02/09/12 17:18
というか、フォルダパスを取得 → SHGetFileInfo の方法では、例えば
お気に入りのフォルダのアイコンを、ユーザが変えていると破綻するので...

783 名前:デフォルトの名無しさん :02/09/12 18:53
API初心者です。CreateProcess関数でソースコードのわからない(自作じゃないアプリ)を制御することは
できますでしょうか?

784 名前:デフォルトの名無しさん :02/09/12 19:02
CreateProcessでソースコードの分からない(自作じゃないアプリ)を起動することはできますが?

785 名前:デフォルトの名無しさん :02/09/12 19:40
CreateProcessを使ってソースコードの分からない(自作じゃないアプリ)を
起動して、そのソースコードの分からない(自作じゃないアプリ)を
強制終了することもできますが?

786 名前:デフォルトの名無しさん :02/09/12 19:46
>>783
制御って具体的にはどんなふうに?

787 名前:デフォルトの名無しさん :02/09/12 19:53
>>782
何で破綻するのかわからん。
変えていればその変えているアイコンを取得できると思うが。

788 名前:781 :02/09/12 20:18
>>787
書き方悪かった。desktop.iniを削除(滅多に無いかもしれないけど)していたり
すると、普通のフォルダのアイコンが取得されてしまう。

789 名前:787 :02/09/12 20:37
>>788
だからその場合、普通のフォルダアイコンが正しいんでないの?

790 名前:デフォルトの名無しさん :02/09/12 20:50
>>784,785,786
ありがとうございます。
ソフトを軌道した後にプログラムから操作(例えばファイルを開くなど)を加えることはできるんでしょうか?

791 名前:デフォルトの名無しさん :02/09/12 20:55
ファイルを開く・・・ねぇ。
コマンドライン引数を与えて起動させれば開くんじゃないの?

792 名前:デフォルトの名無しさん :02/09/12 21:07
MesseageBox と Ifをつかって

はい いいえのプログラヌを造りたいのですが
______
  ↑
之の名前がわかりません

793 名前:デフォルトの名無しさん :02/09/12 21:14
>>792
そうですか。

794 名前:デフォルトの名無しさん :02/09/12 21:19
>792
ガッカリだ!

795 名前:デフォルトの名無しさん :02/09/12 21:24
なんていったかな?

796 名前:デフォルトの名無しさん :02/09/12 21:41
フーン

797 名前:711 :02/09/12 21:43
続きです。

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

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

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

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

ではでは

798 名前:デフォルトの名無しさん :02/09/12 21:44
>>792
MB_YESNO

799 名前:771 :02/09/12 21:44
>>797
自己レス
訂正 711→771(汗

800 名前:デフォルトの名無しさん :02/09/12 22:52
>>790
べつにCreateProcessしなくても逝けるぞ
メニューの動作をエミュレート(WM_COMMAND送信)するとか、
手作業の段階をWM_KEYDOWNとかkeybd_eventとかで再現するとか。

801 名前:デフォルトの名無しさん :02/09/13 01:50
DDEやOLEオートメーションに対応してるならそれ使うとか

802 名前:デフォルトの名無しさん :02/09/13 02:30
>>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;
}

803 名前:デフォルトの名無しさん :02/09/13 10:20
仮想キーコードから、他のキーコードとは重ならない文字列を作ることはできますか?
 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 などもうまくかないようです。

804 名前:デフォルトの名無しさん :02/09/13 10:58
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);


805 名前:デフォルトの名無しさん :02/09/13 21:42
なるほど Extended-key flag は個別対応でガシガシですか。
どうもありがとうございます。

806 名前:デフォルトの名無しさん :02/09/14 00:34
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 が未解決です。
と言われてしまいます。
どうしてでしょうか?

807 名前:デフォルトの名無しさん :02/09/14 00:43
Windows NT/2000:Windows NT 4.0 以降
Windows 95/98:サポートされていません。
ヘッダー:winbase.h 内で宣言
インポートライブラリ:kernel32.lib を使用

NT系であることを明示しろ。
リンクエラーはextern "C"

808 名前:デフォルトの名無しさん :02/09/14 00:48
>>807
ありがとうございます。

#define _WIN32_WINNT 0x0500

で逝けました。

809 名前:質問 :02/09/14 12:12
質問
Win98SEでVc6sp5を利用して
画像の印刷プログラムを書いています。

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

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

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

なにか解決方法はあるのでしょうか?

810 名前:デフォルトの名無しさん :02/09/14 16:23
>>809
貼り付けようとしてるDIBは正しいか?
(ファイルに保存してペイントとかで開けるか?)

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

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

あと、JPEGとかPNGを書き込もうとしてるけど、
ドライバが対応してない(あるいはバグがある)とか?

811 名前:画像分割は避けたい。 :02/09/14 22:18
>>810
StretchDIBitsで画面表示も印刷も出来ます。
BltModeは無指定です。
データはBI_RGBのDIBで、Jpegではありません。

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

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

とあります。
多分今回の問題は転送するデータが巨大?だった為でしょう。
しかし これはあくまでプリンタードライバーを経由する
問題の為であり、印刷時に限って起こる問題と思います。
メタファイルを画面のDCから取得する場合は
その制限を受けないものと考えられますが、
実際は同じ症状になります。
うーん困った。
画像分割は処理がめんどくさすぎる。
第一成功するかどうかわからん。

812 名前:デフォルトの名無しさん :02/09/15 02:12
外してると思うが、
そのプリンタでは
GetDeviceCapsでRASTERCAPSを取ったとき、
RC_STRETCHDIBがないとか(w


813 名前:デフォルトの名無しさん :02/09/15 02:51
>>811
719,722辺りに書かれている症状と少し似てるね。

814 名前:デフォルトの名無しさん :02/09/15 05:52
ウインドウの上下関係をいじるにはどうすればいいでしょう?

815 名前:デフォルトの名無しさん :02/09/15 06:01
>>814
Zオーダーのこと?
それとも、単なる座標のこと?
まぁ、どちらにしてもSetWindowPosを使う

816 名前:  :02/09/15 10:09
>>813
症状は同じですね。
小さな画像は正常に動作し、大きな画像は真っ白になるが
APIは全て正常値を戻す。

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

現在画像分割処理で調査中・・あぁー面倒だぁ。
これで失敗したら手詰まりだぁ。


817 名前:デフォルトの名無しさん :02/09/15 12:56
>>816
>>816
症状の切り分けとして、
単に巨大な画像を送るとコケやすいのか
拡大して、巨大にするとコケやすいのか
を判別してみたら?
SetDIBitsToDeviceとかで、等倍でデカいのを送ってみるとか

818 名前:817 :02/09/15 13:13
何か1行余分だけど、
単なるミスです。他意はありません。

819 名前:デフォルトの名無しさん :02/09/15 17:17
他のアプリケーション内のエディットコントロールのテキストを取り出すにはどうすればいいですか?
WM_GETTEXTなどはいくらSendMessageしても届いてないようです(Spy++で確認)

よろ

820 名前:デフォルトの名無しさん :02/09/15 17:35
GetWindowText
は昔の時代にはそのまま通った気がする。
いまはNTの時代だからプロセス境界を真っ当に超える
フック+共有メモリ(FileMappingによる)あたりが妥当か。

821 名前:デフォルトの名無しさん :02/09/15 18:07
なぜ、COMを使わない? HRESULT GetEditText([out, retval]BSTR* pResult);

822 名前:819 :02/09/15 18:17
>820
ども。
共有メモリを作ってそこに吐き出させようとしているのですが
メッセージ自体が届きません。
フックとおっしゃってますから、メッセージでテキストを吐かせるというアプローチ自体がちがうと言うことかな?
フックって具体的に何をフックしますか?
いろいろ聞いてスマソ

>821
COMを全く理解してない物で・・

823 名前:デフォルトの名無しさん :02/09/15 18:25
ウインドウを間違えているという落ちではなかろうな。

824 名前:デフォルトの名無しさん :02/09/15 18:27
>821
それは、「他のアプリケーション」のコードに
手を出せることが条件では?
「他人のアプリケーション」でも有効なのか?

825 名前:821 :02/09/15 18:44
>>824
>「他人のアプリケーション」でも有効なのか?
しゅーん。すまそん。

826 名前:819 :02/09/15 18:46
>823
その可能性も疑ったのですがSpy++で確認したところ
ターゲットに送っているハズです。
ちなみに時プロセス内に用意したエディットには正しく処理されます。
ウインドを選んでメッセージを投げる部分はプログラムになっているので
手で打ち間違えたとかそう言う可能性はなさげです


827 名前:デフォルトの名無しさん :02/09/15 19:07
普通のエディットコントロールはCOMのインターフェイスもってないぞ

828 名前:821 :02/09/15 19:48
でたらめ言ったおわびに、リクターのナポレオン本(Advanced Windows)調べたよ。
結論から言うと、NT4では可能(Advanced Windowsのターゲット)。ならば、2000やXP
でも可能ではなかろうか?
ミソは、user32内で、WM_GETTEXTLENGTHを最初に呼び出し、共用メモリーにその長さ
を割り当て、次にWM_GETTEXTを実行する(アプリケーション側はWM_GETTEXTLENGTH
呼ぶ必要はない)。ということろを考えると、823の予測が正しいと思われ。
そもそも、自プロセス内のHWNDしか取れないAPIを呼び出して、それを利用している
という可能性は?

829 名前:デフォルトの名無しさん :02/09/15 19:49
>>819
> WM_GETTEXTなどはいくらSendMessageしても届いてないようです
WM_GETTEXTは他のプロセスでも取得できますが?

830 名前:デフォルトの名無しさん :02/09/15 21:13
ラジオボタンをアプリ起動時にチェックさせたいです。どうすればいい?
猫でもわかるプログラミングで紹介されてるけど、そのとおりにやってもうまくいきません。

あと、ラジオボタンのどの項目がチェックされてるかを調べるのにはどうすれば?

831 名前:819 :02/09/15 21:17
とりあえずいろいろ調べてみたところ時々メッセージは届くようです
10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます
でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。


832 名前::02/09/15 21:19
>830
もうちょっと詳しく書いたら?
うまくいかないならどう上手くいかないのかを
書くのが礼儀と思うんだが。

833 名前:画像印刷、分割失敗 :02/09/15 21:36
>>810
>>813
>>816
StretchDIBの処理を改良して
巨大Bitmapを100*100に分割して転送するように処理を修正しました。
結果
20枚?程転送すると急に何も転送しなくなり(APIはエラーを戻さない)
(つまり虫食いの画像が出来上がる。)
さらに転送するとhDCの他のデータも全て消えてしまいます。
(先に書き込んだ部分も含めて)
書き込み先のコンテキストはメタファイル、PrinterDC共に失敗でした。

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

お願い!!
もうメタファイルは諦めるしかないかも。
頼むーー誰かヒントをください


834 名前:デフォルトの名無しさん :02/09/15 21:42
>>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使ったらコンパイルはできるけど、起動したら使ってない時と変わらないです。

助けてください

835 名前:デフォルトの名無しさん :02/09/15 22:01
>>819
> でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
WM_GETTEXTは他のプロセスでも直接取得できますが?
ReadProcessMemoryは何のために?

836 名前:デフォルトの名無しさん :02/09/15 22:09
>>834
> Button_SetCheckとButton_GetCheck
#include <windowsx.h>

> SendMessage使ったらコンパイルはできるけど、
> 起動したら使ってない時と変わらないです。
目的のラジオボタンのウィンドウハンドルは
間違いなく取得できてるの?
実際にはSendMessageをどのようにソースに記述したの?

837 名前:819 :02/09/15 22:26
>835
ホントだ・・。どうもありがとうございます。
実はゴールはエディットではなくて試しにエディットを使ってただけなので
もうしばらくReadProcessMemoryなどの使い方をチェックしてみます。
(たぶんこの方法でもうまくいくはずだしこれで動かせないと困る……)


838 名前:デフォルトの名無しさん :02/09/15 22:27
>>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;
以下省略

839 名前:デフォルトの名無しさん :02/09/15 22:32
ダイアログベースのアプリケーション作ってるんだけど・・・
右上のバッテン押したら終了するようにするにはどうすればいいですか?

840 名前:836 :02/09/15 22:34
>>838
ダイアログウィンドウに送信してどうすんのよ?
というか上に書いた回答をもっとよく読め。

SendMessage(GetDlgItem(hDlg, コントロールID),
    BM_SETCHECK, BST_CHECKED, 0);
または
SendDlgItemMessage(hDlg, コントロールID,
    BM_SETCHECK, BST_CHECKED, 0);
または
CheckDlgButton(hDlg, コントロールID, BST_CHECKED);

841 名前:836 :02/09/15 22:40
補足。
ラジオボタンの場合、初期化時以外は
CheckRadioButtonをおすすめする。

842 名前:デフォルトの名無しさん :02/09/15 22:42
>>839
モーダルかモードレスかで答えが変わってくる。
つーか出来てないということはモードレスかな?

843 名前:デフォルトの名無しさん :02/09/15 22:54
>>842
教えてください

844 名前:デフォルトの名無しさん :02/09/15 22:56
>>843
だからモーダルとモードレスどっちなのよ?

845 名前:デフォルトの名無しさん :02/09/15 23:08
>>844
モードレスです

846 名前:デフォルトの名無しさん :02/09/15 23:27
>>845
WM_COMMANDで かつ LOWORD(wParam)がIDCANCELのメッセージか、
または WM_CLOSEメッセージを
捕まえて DestroyWindowすべし。
WM_COMMANDで処理したいなら、WM_CLOSEメッセージにはFALSEを返すべし。

847 名前:デフォルトの名無しさん :02/09/15 23:39
LOWORD(wParam)って何をしているのでせうか?
詳細キボンヌ

848 名前:デフォルトの名無しさん :02/09/15 23:50
>>847
それくらい、includeディレクトリの中見て自分で調べろよ。全部大文字ってことは
マクロだから、見りゃわかるだろ。

849 名前:847 :02/09/15 23:56
>>848
わかんねーよ。だからキーテンだろーが
何様だ、おまえ?

850 名前:デフォルトの名無しさん :02/09/16 00:15
>>847=>>849
逆切れかっこ悪い。それぐらい自分で調べられないなら、あきらめろ。

851 名前::02/09/16 00:42
>849
おまえこそ知らない人に
ものを教えてもらう立場にあるというのに
なんだその口の利き方は?

まぁいい。マジレスしてやる。
>847
>848と同じだがincludeディレクトリの中身見ればわかる。
というより右クリック定義うんたらで飛べるはず。
もし、即ヘッダ見るということを思いつかないなら
まだAPIは早い。
Cでもやってるべし。

852 名前:デフォルトの名無しさん :02/09/16 01:17
LOWORD() の関連質問なんですが、

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

LOWORDの define は c ですね。
で、何でわざわざ c のような変換をするのか分かりません。
bより c のような変換の方が安全(?)とかそういうのがあるんでしょか?

853 名前:デフォルトの名無しさん :02/09/16 01:34
外してたらスマソ。今、考えたとこで検証したわけじゃないんでね。
char ch = -1;
WORD c = LOWORD(ch);
とやった場合であっても、c = 0xff となって欲しい。
もし、WORD b = (WORD)ch; と展開すると、b = 0xffff となる。
からじゃないかな?
識者の突っ込みキボーン。

854 名前:デフォルトの名無しさん :02/09/16 01:40
>>852
WIN32環境ならばどちらでも変わらない(別に0xFFFFを付ける必要はない)
けど、仮にWORDが16ビットより大きいサイズの処理系が
あったとすれば、そこでは 0xFFFFが大きな意味を持つ。

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

>>853
どちらの場合も結果は 0xFFFFですが。

855 名前:853 :02/09/16 01:46
>>854
逝ってきます……
64bit Windows用の定義が追加されたってことなのかな?

856 名前:852 :02/09/16 02:23
>853-855
どうもです。
  >仮にWORDが16ビットより大きいサイズの処理系があったとすれば
ということで納得です。

857 名前:デフォルトの名無しさん :02/09/16 04:47
>10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます
4バイト……
……ポインタのサイズ?

858 名前:デフォルトの名無しさん :02/09/16 09:06
DWORDってDouble Word の略でしょ?
Wordってどういう意味がある変数型なの?
あと、Doubleが付くことで意味が違ってるの?

859 名前:デフォルトの名無しさん :02/09/16 09:40
WORD
 ASCII文字1文字分
  =1バイト=8bit

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

860 名前:デフォルトの名無しさん :02/09/16 09:43
ごめん間違えた

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

DWORD
 WORD2個分
  =4バイト=32bit


861 名前:デフォルトの名無しさん :02/09/16 09:49
>>859
それじゃ Character だよ。
WORD は、もともとはプロセサが普通に処理できるデータの大きさ。
C 言語言うところの int と同じ概念。
MS が使いだしたのが、8086〜80286 の頃だったので、16bit になって
今日に至る。DWORD はその倍のビット幅 (=32bit)

862 名前:デフォルトの名無しさん :02/09/16 10:03
>>861
プッ

863 名前:デフォルトの名無しさん :02/09/16 10:35
IA-32では
WORD =16bit(2byte)
DWORD=32bit(4byte)
QWORD=64bit(8byte)
が慣例だね。

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

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

ってここアセンブラのスレだったっけ?

864 名前:デフォルトの名無しさん :02/09/16 11:30
>>863
プッ、そんなんでアセンブラしてるつもりになってるよ

865 名前:デフォルトの名無しさん :02/09/16 11:31
>のようにCPUにより異なるから注意しよう!
正しくは、定義により異なる。

866 名前:デフォルトの名無しさん :02/09/16 11:33
> アセンブラしてる
ぷぷっ

867 名前:デフォルトの名無しさん :02/09/16 11:51
SPARCなんかだとWORDは4byteが慣例だったなあ
sagesage

868 名前:デフォルトの名無しさん :02/09/16 13:21
Window(DC)に描画途中の画面を表示させ無いようにする、
HSPでいうredraw 0とredraw 1のような感じのAPIってありませんか?

869 名前:デフォルトの名無しさん :02/09/16 13:27
CreateCompatibleDC
CreateCompatibleBitmap
etc...

870 名前:868 :02/09/16 13:32
やっぱし自分でバッファ確保しないと駄目ですか。
それならそれでオッケーでス。ありがとうさようなら。

もう会うことは余り無いでしょう。

871 名前:デフォルトの名無しさん :02/09/16 15:11
アセンブラとアセンブリの違いにこだわっているやつほど通常の会話に変な日本語を使っているやつが多い。

マーフィーの法則 第23条の18より

872 名前:デフォルトの名無しさん :02/09/16 15:27
(´-`).。oO(>>871は自分の文章が変なことに気づいているのだろうか…)

873 名前:デフォルトの名無しさん :02/09/16 15:44
どこもおかしくねーぞ(藁
むしろ>871のは文章じゃなくて文なわけだが

874 名前:871 :02/09/16 15:46
>>872
マーフィー本は俺のプログラマ生活にとって欠かせない、
いわばバイブル。条項もすべて暗記した。
が、アセンブリとアセンブラの意味については
未だよくわかっていない。

875 名前:デフォルトの名無しさん :02/09/16 16:08
>アセンブラしてるつもり
ウケタ

876 名前:デフォルトの名無しさん :02/09/16 16:32
>>873
「〜やつほど〜やつが多い」は明らかに変だが。

877 名前:デフォルトの名無しさん :02/09/16 17:42
アセンブラー:アセンブルするひと。
アセンブリ:アセンブリ言語。言語名。
アセンブル:アセンブリ言語を機械語コードに直すこと。
・・・と思う。

878 名前:デフォルトの名無しさん :02/09/16 18:14
>>877
> アセンブラー:アセンブルするひと。
ふつーは処理系の方を指す。nasm とか gas とか。

879 名前:デフォルトの名無しさん :02/09/16 18:25
.NETではアセンブリはまた違う意味が

880 名前:デフォルトの名無しさん :02/09/16 18:30
アセンブラって、
アセンブリ言語を機械語コードに直すソフトのことだよね?
昔、「ブリをブラでブルする」と覚えた気が・・・。

881 名前:デフォルトの名無しさん :02/09/16 18:33
おまえらスレ違いもいいとこなので移ってください。
http://pc3.2ch.net/test/read.cgi/tech/1016991911/l50

882 名前:デフォルトの名無しさん :02/09/16 18:34
ダイアログボックスにアイコン付けたいんだけど、どうしたらいいかな?

883 名前:デフォルトの名無しさん :02/09/16 18:38
WM_SETICON
SetClassLongでもまあできないこともない。

884 名前:デフォルトの名無しさん :02/09/16 19:05
Win32系で64bitの変数扱いたい場合どうしたら良いですか?
コンパイラはBCC5.5.1です

885 名前:デフォルトの名無しさん :02/09/16 19:31
LONGLONG

886 名前:デフォルトの名無しさん :02/09/16 20:57
int_64(コラ

887 名前:デフォルトの名無しさん :02/09/16 22:00
LONGSHORT

888 名前:デフォルトの名無しさん :02/09/16 22:07
どうやらBorlandC++は__int64という型のようでした

ところで追加質問になってしまうんですけど
printfとかで64bitの整数を文字列にする事ってできないんですか?
%dだとintサイズだし、色々調べてllとか付けて見てもNGでした

889 名前:デフォルトの名無しさん :02/09/16 22:14
>>888
> printfとかで64bitの整数を文字列にする事ってできないんですか?
使ってるライブラリによる。Borland は知らんが VC の MSVCRT.DLL だと
プリフィクス I64 だね。

890 名前:デフォルトの名無しさん :02/09/16 22:28
>>888
ヘルプによると "%Ld" らしい。

891 名前:デフォルトの名無しさん :02/09/17 04:37
GetOpenFileName でファイルの種類ごとにデフォルトの拡張子を指定するのにはどうすればよいのでしょう。
試しに
 lpstrDefExt = "txt\0htm\0ini\0doc\0";
みたいな感じでやってみましたが駄目でした。
フックを使って lpstrDefExt を変更するという手も考えたのですが、
フックを使うとプレースバーが表示されなくなってしまうようです。
どなたかおねがいします。


892 名前:デフォルトの名無しさん :02/09/17 07:45
>> フックを使うとプレースバーが表示されなくなってしまうようです。

古い 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

893 名前:デフォルトの名無しさん :02/09/17 10:57
>890
無事表示できました
ありがとう

894 名前:891 :02/09/17 23:59
>>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 );

895 名前:デフォルトの名無しさん :02/09/18 03:51
http://sakashita.strangeworld.org/source/up0768.jpg
これってどうやったら出来るんだろう?
SDKでやってるのかな?

896 名前:デフォルトの名無しさん :02/09/18 03:59
>>895
対象 URL
http://sakashita.strangeworld.org/source/up0768.jpg
--------------------------------------------------------------------------------

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

FDD アタック / concon クラッシャー等 [img タグ等]
IMG タグや JavaScript 等により file スキーマを参照します。
ブラウザの設定によってはフロッピーディスクドライブに不要なアクセスが続いたり, OS がクラッシュする可能性があります。


897 名前:デフォルトの名無しさん :02/09/18 04:16
>>895
ム板に、しかも今時こんなブラクラ貼るなんて(・∀・)イイセンスしてるな。

898 名前:デフォルトの名無しさん :02/09/18 06:24
やりかたを質問してるのでは?

899 名前:デフォルトの名無しさん :02/09/18 14:05
ウィンドウプロシージャ側でコマンドライン引数を利用したいのですが
グローバル変数とメッセージ、どちらで伝えるべきですか?

900 名前:900get!! :02/09/18 14:52
>>899
グローバル変数の方が楽だろうな
GetCommandLine()を使うのもありだろ

901 名前:デフォルトの名無しさん :02/09/18 15:08
>>899
CreateWindowの引数という手もあり

902 名前:デフォルトの名無しさん :02/09/18 15:31
GetCommandLine()ですか。
どうやらこれがよさそうですね、ありがとうございます。

903 名前:デフォルトの名無しさん :02/09/18 17:16
PSH_WIZARD なプロパティシートで「キャンセル」ボタンを非表示にしたいのですが、
そんなことってできるのでしょうか?

904 名前:デフォルトの名無しさん :02/09/18 17:26
>>903
GetDlgItem(IDCANCEL)でキャンセルボタンのCWnd*とれたかも

905 名前:904 :02/09/18 17:44
すくなくともVC5の時に普通の(ウィザードでない)プロパティシートではできた
CPropertySheetの派生クラスを作ってOnInitDialog()をオーバーライドして
CPropertySheet::OnInitDialog() ;
CWnd *pwndCancel = GetDlgItem(IDCANCEL) ;
pwndCancel->ShowWindow(SW_HIDE) ;
こんな感じか(あってるかどうかしらん)

906 名前:デフォルトの名無しさん :02/09/18 17:46
>>904,905
スレ違い。

907 名前:904 :02/09/18 17:48
Win32Apiスレだった
904,905はMFCの場合

908 名前:904 :02/09/18 17:55
>>906
イッテキマース

909 名前:906 :02/09/18 18:10
>>908
逝かなくてもいいよ。
十分ヒントになったはず。

910 名前:あえて言うと :02/09/18 19:45
>>903 キャンセルできないウィザードというのはいかがなものか。

911 名前:デフォルトの名無しさん :02/09/18 20:51
×ボタンを押して閉じれば良し。

912 名前:デフォルトの名無しさん :02/09/18 20:55
UIとしてあんまり、、ね。

913 名前:デフォルトの名無しさん :02/09/18 22:00
×ボタンってあったっけ?

914 名前:デフォルトの名無しさん :02/09/18 23:19
標準にすると右上にあると思う

915 名前:903 :02/09/18 23:23
盛り上げて下さってどうもありがとうございます。903でございます。

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

んで、やっぱり GetDlgItem() しないとダメなのですかね?
あんまり美しくねーなー…

916 名前:デフォルトの名無しさん :02/09/19 00:08
>「完了」があるなら「キャンセル」は要らないと思うのですけれども
凡人には理解できません。
どういう論理ですか?

917 名前:デフォルトの名無しさん :02/09/19 00:21
>>915
あなたの作るソフトは一生使わないと心に固く誓いますた。

918 名前:デフォルトの名無しさん :02/09/19 00:31
>>915は初心者板へ行ってアプリの使い方から勉強しる

919 名前:デフォルトの名無しさん :02/09/19 00:36
画面のハードコピー処理のプログラム(私がプログラミングしてものではありません)で、
殆どのPCでは印刷に成功するのですが、中には印刷出来ないPCがあります。

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

機種またはPCごとの設定で何か違いがあるのでしょうか?
私自身まだ詳しくないので、わかりづらい説明で申し訳ありません。

920 名前:デフォルトの名無しさん :02/09/19 00:42
完了だと、指定した内容で何らかの動作が実行されてしまったり、設定内容が保存されてしまったりするじゃないですか。実際は知らないけど、少なくともイメージ的には。
それに対して、つまりキャンセルしたいんですよ。何の動作も行わせたくなかったり、設定内容を保存したくなかったり。

921 名前:デフォルトの名無しさん :02/09/19 00:47
じゃあキャンセル封じんなよ
ネタか?

922 名前:デフォルトの名無しさん :02/09/19 00:51
支離滅裂だな。ネタ認定。

923 名前:デフォルトの名無しさん :02/09/19 01:08
>>921-922
ネタにしたいから焦ってるのか?
どうして、920が903=915と同一人物だと
思っているのか小一時間問い詰めたい

924 名前:デフォルトの名無しさん :02/09/19 01:14
今日の目標:誰宛のレスなのかを明確にしよう。

925 名前:デフォルトの名無しさん :02/09/19 01:29
結論:ウィザードに限らずダイアログにはキャンセルを実装しよう。

926 名前:デフォルトの名無しさん :02/09/19 01:51
目標:出来れば人生のキャンセル方法も議論してみよう

927 名前:903 :02/09/19 01:57
ごめん。漏れ勘違いしてたのかな。ウィザードって

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

  〜ここで実行〜

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

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

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

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

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

だったりする?






928 名前:デフォルトの名無しさん :02/09/19 01:59
>>923
アタマだいじょうぶ?ぼく

929 名前:デフォルトの名無しさん :02/09/19 02:03
どのウィザードをもって判断してるんだろう・・・

930 名前:デフォルトの名無しさん :02/09/19 02:03
>>927
実行した後で戻れるプログラムって、怖いけど見てみたい。

931 名前:デフォルトの名無しさん :02/09/19 02:08
ブラウザを比較しよう part 2
http://pc3.2ch.net/test/read.cgi/software/1032017120/

このスレから飛んできたのですが、教えて下さい。
IEの起動がMozillaよりも速いのは、MSが隠しAPIを使っているからだと
言っているのですが、そんなことってあり得るんですか?
勿論、隠しAPI使うことは否定しませんが、それで速度にものすごく差が出るんですか?

932 名前:903 :02/09/19 02:36
ごめん。間違えた。眠気が。。。
前者の@とDには「戻る」はないです。
そういうのってなかったっけ?

933 名前:デフォルトの名無しさん :02/09/19 02:59
>>932
それなら最初からそう説明しないと、ずっとキャンセルボタンが無いのかと思われるよ。
そういうウィザードはある。もしくはキャンセルボタンなどの使わないボタンを使用不可にするとか。

934 名前:デフォルトの名無しさん :02/09/19 05:52
ファイルの非同期読み書きは

どのようにすればよいのでしょうか?

935 名前:デフォルトの名無しさん :02/09/19 06:13
CreateFile で FILE_FLAG_OVERLAPPED 付けて、
ReadFileEx, WriteFileEx使えばええんでわ?

936 名前:デフォルトの名無しさん :02/09/19 08:40
>>931
単にIEがOSの一部だから、起動時にロードされてるんだろ
隠しAPIの10や20使ってるとは思うが・・・

937 名前:771 :02/09/19 11:08
>>802

亀レスでスマソ

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

ソケットは、プロセスセーフではない、だけでなく、
スレッドセーフではない、ということでしょうか?


938 名前:デフォルトの名無しさん :02/09/19 11:10
>>931
隠しAPIごときで差が出ることほとんど考えられないな。

939 名前:903 :02/09/19 11:49
>>933
言葉足らずでスマソン。
でも後者のスタイルが一般的なのならそっちにしようかと思います。

後学のために使わないボタンを使用不可にする方法も
一応知っておきたいのですが、やっぱ GetDlgItem() なんでしょうか。


940 名前:デフォルトの名無しさん :02/09/19 12:25
>>937
スレッドセーフの意味がわかっているのかと小一時間・・・(略

941 名前:デフォルトの名無しさん :02/09/19 13:19
>>919
とりあえずGetLastError()でも見てみたら

942 名前:デフォルトの名無しさん :02/09/19 13:36
>>939
PropSheet_SetWizButtons()とか。あと MFCの CPropertySheet あたりを参考に汁!
キャンセルボタンは、ずーと表示で、「次へ」を「完了」ボタンに変えるのが標準っぽいよ。


943 名前:903 :02/09/19 13:42
>>942
PropSheet_SetWizButtons() ではキャンセルは非表示または無効にできないですよね。
やはり>>927で言う後者が標準なんでしょうね。

944 名前:デフォルトの名無しさん :02/09/19 13:51
>>943
そんなに非表示にしたいなら、実際にやってみりゃいいのに。
 ::ShowWindow( ::GetDlgItem( hWizDlg , IDCANCEL ) , SW_HIDE );
でできたよ。

945 名前:デフォルトの名無しさん :02/09/19 14:29
ファイルハンドルから、ファイル名って逆引きできませんか?

946 名前:デフォルトの名無しさん :02/09/19 14:38
NT4.0でGetFileAttributes("NUL")を呼ぶと、FILE_ATTRIBUTE_DEVICE
ビットが立っていないのですが、これはXP/2000でも同様でしょうか?
NT4.0以降でファイルをオープンせずに、デバイスかどうかの判別をするには
どうしたらいいのでしょうか?


947 名前:デフォルトの名無しさん :02/09/19 15:16
>>945
CreateFileMapping -> MapViewOfFile -> GetMappedFileName
の3段攻撃で。

948 名前:945 :02/09/19 16:05
>>947
THX。E:\test.txt を試したら、"\Device\HarddiskVolume4\test.txt" と
返ってきて面食らいましたが。
//うーん、でも、GetMappedFileName が 9xでは使えないのか...

949 名前:919 :02/09/19 23:10
>>941
アドバイスありがとう。
仰る通りにエラー番号を取得してみますね。
では。

950 名前:デフォルトの名無しさん :02/09/19 23:27
age

951 名前:デフォルトの名無しさん :02/09/20 06:43
SDKでフレームを実現するにはどうすれば良いのでしょう?
因みにフレームとはウインドウを仕切るフレームのバーの事を指しています。

952 名前:デフォルトの名無しさん :02/09/20 06:48
初めて書き込ませてもらうんですが
APIでアルファブレンディングを実装するにはどうしたらいいのでしょうか?
ピクセル単位でブレンドしたい画像それぞれのRGBを取得して
計算を行えばいいのでしょうか?
計算の方程式は簡単に思いつくのですが、それでは恐ろしく遅いと思うので
一応ゲームに使う予定なので、もっと早い方法はないのか……と
思っているところです。

953 名前:デフォルトの名無しさん :02/09/20 06:57
>>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
);


954 名前:デフォルトの名無しさん :02/09/20 23:25
質問です。
構造体のリファレンスが載ってる本もしくはHPってしりませんか?

955 名前:デフォルトの名無しさん :02/09/20 23:43
>>954
お前は
今朝までに作った構造体の数をおぼえているのか?

956 名前:デフォルトの名無しさん :02/09/20 23:52
>>954
英語版のMSDNへ逝けよ。

957 名前::02/09/21 00:17
>955
お前は今まで食べたパ(以下略

958 名前:デフォルトの名無しさん :02/09/21 00:18
(以下略 =>ンツの数を覚えているのか?

959 名前:デフォルトの名無しさん :02/09/21 03:03
ある大きさ(単位pt)のフォントの高さの上限というものは決まっているのでしょうか?
例えばどんなフォントでも12ptならば高さ0〜X以内におさまる、と言えるのでしょうか?
言えるのならばXの値を取得する方法を教えてください。


960 名前:デフォルトの名無しさん :02/09/21 03:16
>>959
フォントサイズが12ptなら高さ上限は12ptだと思うが?

961 名前:デフォルトの名無しさん :02/09/21 03:18
何の単位で取得したいんだか。

>>950 次スレは?

962 名前:デフォルトの名無しさん :02/09/21 03:21
>>953
スプリッタと言うんですか。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_117.htm
こういうやつです。

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

どうやって実装するのかイメージが掴めません。
もうすこしヒントを頂けないでしょうか?

963 名前:デフォルトの名無しさん :02/09/21 03:22
指定された文字が全角か半角かを判別するAPIありませんか?

964 名前:デフォルトの名無しさん :02/09/21 03:25
>>962
楽をしたいのならスプリッタ専門のウインドウを作るといいよ
勿論、その分リソース消費することになるけど。
それがイヤなら実装でがんばるしかない。

965 名前:デフォルトの名無しさん :02/09/21 03:26
そもそもプロポーショナルフォントに全角も半角もないが。

966 名前:デフォルトの名無しさん :02/09/21 03:28
>>963
文字ってなんだよボケナス。
SJISの上位バイト判定ならIsDBCSLeadByteでも使っとけ。

967 名前:デフォルトの名無しさん :02/09/21 03:30
>>965
ネタで言ってんのかマジで言ってんのかわからん。

968 名前:964 :02/09/21 03:31
>>962
役に立たないかも知れないけど、
うぷろだ用意してきたら昔つくったソース上げるよ


969 名前:966 :02/09/21 03:34
>>964
いい人がいるもんだな。
超低レベルな煽りしか書けないアホ共に
爪の垢を煎じて飲ませてやってくれ。

970 名前:デフォルトの名無しさん :02/09/21 03:40
>>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化するとそうも行かず困ってます。


971 名前:デフォルトの名無しさん :02/09/21 03:53
>>936
例の和解で公開されたものから1つ例を挙げるとShowJavaConsoleか。
これのおかげで速くなってるとはまったくもって思えないけど

972 名前:959 :02/09/21 03:59
取得したいのは論理単位でです。
おなじ12ptでもフォントによってTEXTMETRICのtm.tmHeightは異なるので
上限があるのかなと思ったのですが…

973 名前:デフォルトの名無しさん :02/09/21 04:03
>>970
ふつーGetTextExtentPoint32()で一々数えると思うが。

974 名前:デフォルトの名無しさん :02/09/21 04:03
新スレ立てます。

975 名前:デフォルトの名無しさん :02/09/21 04:06
立てますた。
http://pc3.2ch.net/test/read.cgi/tech/1032548635/

976 名前:デフォルトの名無しさん :02/09/21 11:21
>>970
Unicodeか・・・ちなみにギリシア文字(アルファとかベータとか)は全角だと思いますか?半角だと思いますか?

977 名前:デフォルトの名無しさん :02/09/21 15:48
>>976
んなVB厨みたいなこと言うなよ。
全角に決まってるじゃん
固定ピッチフォントで確かめれば一発でわかるじゃん。
ちったー自分で試してみろよ

978 名前:デフォルトの名無しさん :02/09/21 16:21
>>977
ぎゃはは! マヌケなDel厨発見。

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

けっこう笑えたんで晒しとくね。

979 名前:デフォルトの名無しさん :02/09/21 16:23
>977
固定ピッチのCourier Newで試してみたところ、半角ですた。

980 名前:デフォルトの名無しさん :02/09/21 16:25
>>977
実は自分がVB厨?

( ´,_ゝ`) プッ

981 名前:デフォルトの名無しさん :02/09/21 16:33
仲良くな。

982 名前:デフォルトの名無しさん :02/09/21 17:01
> 全角に決まってるじゃん
> ちったー自分で試してみろよ

( ´,_ゝ`) プッ

983 名前:デフォルトの名無しさん :02/09/21 17:08
>>977
自分が限られた環境の中で生きていることを忘れているらしい…

984 名前:デフォルトの名無しさん :02/09/21 17:20
977のスキルを考慮して反論を予想してみると、
 V B 厨 必 死 だ な (藁
くらいが関の山だろな。

自業自得なんで同情はできんが。

985 名前:デフォルトの名無しさん :02/09/21 17:30
>>984
「俺がやったときはそうだった」とかな。

986 名前:デフォルトの名無しさん :02/09/21 17:36
CreateThreadについて質問です。
MSDNのヘルプに
> C ランタイムライブラリの関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、
> _beginthread 関数と _endthread 関数を使うようにしてください。
と書いてあったのですが、これは何故ですか?
言われたとおり_beginthread/_endthreadを使いましたが、気になったんで…

987 名前:デフォルトの名無しさん :02/09/21 17:45
FAQだ氏ね

988 名前:デフォルトの名無しさん :02/09/21 17:45
ランタイムの初期化処理や終了処理が必要になるから。
ただし、すべてのランタイム関数で必要なわけではない。

989 名前:デフォルトの名無しさん :02/09/21 17:46
>>986
ライブラリの内部変数排他処理絡みじゃないの?
_beginthreadで、排他処理用mutexの初期化とかやったりとか
考えられる。(合ってるかどうかわからないけど)

990 名前:デフォルトの名無しさん :02/09/21 17:49
なんでライブラリのソースみないの?

991 名前:デフォルトの名無しさん :02/09/21 17:55
例えば asctime のような関数をスレッドセーフに作るなら、スレッドごとに領域を確保しなきゃならんし、解放しなきゃならんでそ。実装の詳細は知らんけどたぶん。

992 名前:986 :02/09/21 18:00
>>988-991
レスありがとうございます。
>>991さんのレスで納得しました。

993 名前:デフォルトの名無しさん :02/09/21 22:52
つーか次スレできてるぞ

Win32API 質問箱 Build6
http://pc3.2ch.net/test/read.cgi/tech/1032548635/l50

994 名前:デフォルトの名無しさん :02/09/22 01:43
きょうび 1000getなんて流行りませんな

995 名前:デフォルトの名無しさん :02/09/22 01:44
きょうび 1000getなんて流行りませんな

996 名前:デフォルトの名無しさん :02/09/22 03:11
>>995
やればいいじゃん

997 名前:デフォルトの名無しさん :02/09/22 03:36
きょうび 1000getなんて流行りませんな

998 名前:デフォルトの名無しさん :02/09/22 03:40
やれば?

999 名前:デフォルトの名無しさん :02/09/22 03:40
逝け池

1000 名前:デフォルトの名無しさん :02/09/22 03:41
1000ゲト


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.