Win32API質問箱 Build18
■ このスレッドは過去ログ倉庫に格納されています
0001 ◆Manna2uCLg
NGNGやさしいオジサマ達が、熱く暑く答えてくれよう。
でも最低限、最新スレくらいは質問する前に検索を。
過去スレ・参考は>>2-5くらいを参照するッス!
0446デフォルトの名無しさん
NGNGだから自分でちまちま既存のコントロール組み合わせて作れっていわれてんだろ。
0447デフォルトの名無しさん
NGNGてかここのアマグラマは使えないな
0448デフォルトの名無しさん
NGNGCOM ATL ActiveX
あたりでググってみな。
多分途中でやる気が萎えると思うが。
0449デフォルトの名無しさん
NGNG> WC_LISTVIEWを指定しろ
それはCreateWindow()を使えってことだろうが
0450デフォルトの名無しさん
NGNG質問に対する解決になってないな
0451デフォルトの名無しさん
NGNGなに言ってんのあんた?
あんた445?
CreateWindowでググれなんて誰も言ってないぞ。
キーワードは COM ATL ActiveX だ。
とってもややこしい話だからここでかいつまんで説明するって訳にはいかないんだよ。
だからググれといってるの。
上のキーワードの意味が理解できなてなきゃVBのコントロールは作れない。
CreateWindow以前の問題なんだよ。
0452デフォルトの名無しさん
NGNG0453413
NGNGそれが解からないんですよね。
自分のPCにWin98用のriched32.dllが無くても、
行間が詰まって表示されているソフトがあったので疑問に思っていました。
そういうのはどうなんでしょうね?組み込みなのか、独自にラップしたものか...
ググってみて、OSによってdllが異なる動作をするのは解かりました。
(当方Win2000)
0454デフォルトの名無しさん
NGNGそれって、取得だけじゃなくて設定もできるんですか?
0455デフォルトの名無しさん
NGNGなので8bit以下のオフスクリーンビットマップを使って、
パレットアニメーションをしようと思うんですが、やり方がまずいのか
失敗してしまいます。
いろんなサイト見て回ったんですが、
画面のシステムパレットをアニメートする方法しか、
見つけられませんでした。
オフスクリーンのビットマップのパレットを使って
GDI関数だけでパレットアニメーションさせる事は、
そもそも可能なのでしょうか? 漏れ、不可能な事やってます?
0456デフォルトの名無しさん
NGNG可能です。
0457デフォルトの名無しさん
NGNGって事は漏れのやり方が悪いんですね。
いろいろ試してみます。
どうもありがとう。
0458455
NGNGSelectObject した HDC では
SetPaletteEntries&RealizePaletteを使った
パレットの変更は出来ないみたいなんですが、
他のやり方など、有りますか?
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNGボタンが押されたら、新しいウィンドウを表示させたいのですが、
どのようにしたらよいのでしょう。
0461デフォルトの名無しさん
NGNG8ビットDIB/DIBSectionならカラーテーブルを書き換えるだけ。
システムのパレットは関係ないよw
0462デフォルトの名無しさん
NGNGWM_KEYDOWNとかWM_LBUTTONDOWNとかでCreateWindow
0464デフォルトの名無しさん
NGNGこのメンバーが BITMAPV4HEADER や BITMAPV5HEADER になることはある
んでしょうか。
BITMAPV[45]HEADER を渡して CreateDIBSection() しても、できあがった
DIBSECTION 内では BITMAPINFOHEADER ?
0465デフォルトの名無しさん
NGNG>作るときで
>どんなやってつくれば
日本語を勉強しましょう。
0466デフォルトの名無しさん
NGNGWNDCLASS作んなくていいから、
とりあえず、"EDIT"とかで作ってみろ。
それで出来たら、今度はクリックとか考えずに
オリジナルのWNDCLASSを持つウインドウを作ってみる。
今度はそれの応用だ、簡単だろ?
0467460
NGNGコントロールを作るのではなく、ウィンドウを作ろうと思っています。
ウィンドウごとに別のプロシージャを使いたいので、
WNDCLASSを新しく作るしかないと思ったんですが、ほかに方法があったりするのでしょうか?
0468デフォルトの名無しさん
NGNG知ってるよ。
コントロールを作るのは練習だ、練習。
エディットコントロールは、EDITという名で
WNDCLASSが登録されてるの。
0469460
NGNGなんとなくで新しく作るWNDCLASSのhInstanceに
メインのウィンドウのインスタンスと同じものをいれたら普通に通りました
ご迷惑をおかけしてすみませんでした^^
0470デフォルトの名無しさん
NGNG0471404
NGNGとっても簡単・確実。
0472デフォルトの名無しさん
NGNG作ったアプリケーションを表示させないようにするにはどのWSを
消せばいいの?
0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNG春だからね。
0478デフォルトの名無しさん
NGNGGWだからだと思う。
0479デフォルトの名無しさん
NGNGサービスにしてsvchostあたりから動かせば可能かもしれないが方法によってはそれでも見れる。
0480デフォルトの名無しさん
NGNG「アプリケーション」タブに非表示 == タスクバーに非表示
「プロセス」タブじゃない。
0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNG俺も、初GWはプログラミングの勉強に費やした。
0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNG典型的にはタスクトレイ常駐型アプリだろ。
ついでに非表示ウィンドウを親にするという手もある。
0487デフォルトの名無しさん
NGNG0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNGそれとも叩いてるほうも学生なのか?
0491デフォルトの名無しさん
NGNGそれはお前だけ
0492デフォルトの名無しさん
NGNGいやそれはここじゃないって
0493デフォルトの名無しさん
NGNG>>240
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNG出る奴と出ない奴があるけど、あれは何が違うん?
0497496
NGNG0498デフォルトの名無しさん
NGNGそういう情報は横展開しましょう。
0499デフォルトの名無しさん
NGNG下のようなコードを書いたのですが、クリップボードにコピーされた画像がズレてしまい、
しかもコピーした後でアプリが終了させられてしまいます。
修正方法を教えてください。
hMem = GlobalAlloc(GHND, sizeof(BITMAPINFO) + Bi.biSizeImage);
hGlobal = (LPBYTE)GlobalLock(hMem);
lpBitmapInfo = (LPBITMAPINFO) hGlobal;
lpBitmapInfo ->bmiHeader = Bi;
lpBitmapInfo ->bmiColors->rgbBlue= 0;
lpBitmapInfo ->bmiColors->rgbGreen= 0;
lpBitmapInfo ->bmiColors->rgbRed= 0;
lpBitmapInfo ->bmiColors->rgbReserved= 0;
memcpy(lpBitmapInfo + sizeof(BITMAPINFO), image, Bi.biSizeImage);
GlobalUnlock(hMem);
OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_DIB, hMem);
CloseClipboard();
0500デフォルトの名無しさん
NGNG↓
lpBitmapInfo + 1 もしくは hGlobal + sizeof(BITMAPINFO)
0501499
NGNGありがとうございました。そんなところだったとは。
で、今度は色がおかしくなったんですが、
lpBitmapInfo ->bmiColors->rgbBlue= 0;
lpBitmapInfo ->bmiColors->rgbGreen= 0;
lpBitmapInfo ->bmiColors->rgbRed= 0;
lpBitmapInfo ->bmiColors->rgbReserved= 0;
は、あってますか?
0502デフォルトの名無しさん
NGNGパレットを使わないのなら、BITMAPINFOじゃなくてBITMAPINFOHEADERを使え。
0503デフォルトの名無しさん
NGNG俺も知りたい。教えてください>>496
0504499
NGNGBITMAPINFOHEADER でうまくいきました。
ありがとうございます。
ところで、msdn には、
クリップボードの中身として、 CF_DIB を指定するときは
BITMAPINFO + ビットマップを中身にしろと書いてありますが、
いいんでしょうか?
0505デフォルトの名無しさん
NGNG本来はBITMAPINFOのbmiColorsは[0]なんだけど、
C89の仕様によってサイズ0の配列が作れないから[1]となってるだけ。
パレットを使う場合は、必要に応じて動的確保でサイズを拡張するの。
0506デフォルトの名無しさん
NGNG関数名で検索して出てくるページにあるやつを
コピペするだけでその関数使えますか?
いまいち。何とかの値とか言われてもどうやって入れたり。。その関数呼び出したりするかわからない・・・
0507デフォルトの名無しさん
NGNG一つ言っておくことがある。
分らない物を使うな
0508デフォルトの名無しさん
NGNGウチの新入社員だったら笑えないけど。
0510デフォルトの名無しさん
NGNGhttp://msdn.microsoft.com/library/読むか
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/を入れて同梱のドキュメント嫁
0511デフォルトの名無しさん
NGNGで、保存するファイル名を取得して、
CopyFile()
で一時ファイルを保存したいのですが、
GetSaveFileName()
でディレクトリを移動させると、ファイルが保存されなくなります。
なぜでしょう。
0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNG何故って言われても普通はありえないので、動作しないコードをあげるべし。
0514511
NGNGmemset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = TEXT("Jpeg image [*.JPG, *.JPEG]\0*.jpg;*.jpeg\0\0");
ofn.nFilterIndex = 1;
ofn.lpstrFile = fn;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_HIDEREADONLY;
if(GetSaveFileName(&ofn)) {
id = CopyFile("tmp.jpg", fn, TRUE);
}
0515デフォルトの名無しさん
NGNGCopyFileの"tmp.jpg"という指定がカレントディレクトリのファイルを指すからだ。
0516511
NGNGコピー元、コピー先の両方が絶対パス ---- ○
コピー元は絶対パス、コピー先は相対パス ---- ×
コピー元は相対パス、コピー先は絶対パス ---- ×
ということですか?
0517デフォルトの名無しさん
NGNG仮に、C:\TESTがカレントディレクトリだとして、"tmp.jpg"と書けば、
C:\TEST\tmp\jpgを指すが、GetSaveFileNameによってカレントディレクトリが
変更され、C:\DOCとなった場合、"tmp.jpg"と書くと
C:\DOC\tmp.jpgを指すからだ。
最も簡単で確実な解決法は、すべて絶対パスで表すことだけどな。
0518デフォルトの名無しさん
NGNGC:\TEST\tmp.jpg
0519511
NGNG「カレントディレクトリ」ではなく、プログラムファイルが置いてあるディレクトリ
を取得する方法はありますか?
0520デフォルトの名無しさん
NGNGargv[0]
0521デフォルトの名無しさん
NGNGGetModuleFileName(NULL, &lpString, MAX_PATH);
argv[0]ってパス入ってないOSが無かったっけ。
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNG少なくともUnixは起動したとおりに入っている。
パスはないかもしれないし、そもそも実行モジュール名と違う別名(alias)かもしれん。
0524デフォルトの名無しさん
NGNG> 少なくともUnixは起動したとおりに入っている。
ダウト。
0525デフォルトの名無しさん
NGNG0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNGそれでも同名のDLLを同ディレクトリに置いておくとDLLオーバーライドによって勝手にそっちが読まれませんか?
0529528
NGNGdirectory as app.exe, then all dll's will be loaded from the app's load
directory -- even if its delay loaded with an absolute path that points
elsewhere. the .local. may also override the 'current directory' part of the
search order listed above, but I'm not sure.
というやつです。
0530デフォルトの名無しさん
NGNGlocalファイルをユーザーに消させればいいだろ
0531デフォルトの名無しさん
NGNG役に立たない質問箱だな
0533デフォルトの名無しさん
NGNG別にそれに逆らう必要も無かろう。
ユーザーがローカルに同名のDLLを置いたんなら
それなりの理由があるんだろうさ。
0534デフォルトの名無しさん
NGNGExcelのような多機能List操作APIって無いですかね?
ListControlでは貧弱すぎて、使い物になりません。
0535530
NGNGどーしてもいやならlocalがあるときは起動できないようにすれば?
localを消して新しく起動するっていうのも状況によっては可能なんじゃない
↓
typedef int (WINAPI *GET)();
int main() {
char buf[1000];
::WIN32_FIND_DATA fd;
HANDLE h = ::FindFirstFile("load.exe.local", &fd);
if ( h != INVALID_HANDLE_VALUE) {
::CloseHandle(h);
::BOOL r = ::DeleteFile(".\\load.exe.local");
if (r) {
::MessageBox(0, "deleted exe.local", "", 0);
::ShellExecute(0, "", "./load.exe", "", "", SW_SHOW);
} else {
::MessageBox(0, "could not delete exe.local", "", 0);
}
} else {
HMODULE h = ::LoadLibrary("C:\\absolute\\dll.dll");
GET get = ::GetProcAddress(h, "get");
sprintf(buf, "%d\n", get ? get() : -1);
::MessageBox(0, buf, "", 0);
}
return 0;
}
0536デフォルトの名無しさん
NGNG自分でファイルを読んでメモリ上に展開すれば良い
ハンドルの扱いなどの都合で関連APIをフックする必要があるかもしれない
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNGメモリDCに赤色でFillしたんですが、
その後、ウィンドウDCにBitBltで描画したんですが、
ウィンドウDCになぜか描画されません。
何かしらの間違いをしているはずですが、わかりますかね?
hdc = BeginPaint(hWnd, &ps);
RECT r;
HDC hmdc;
GetClientRect(hWnd,&r);
hmdc = CreateCompatibleDC(hdc);
FillRect(hmdc , &r , CreateSolidBrush(RGB(0xFF , 0 , 0)));
BitBlt(hdc, 0, 0, 300, 300, hmdc, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);//描画の終了
0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNGDCはただの製図道具。紙を用意しなきゃ何も描けん。
メモリDCの場合はビッマップをセットしてやれ。
0542539
NGNG失礼しました。
ただ、ウィンドウのコンテキストに直接描画すると、再描画のたびにフリッカーが発生するので、
オフスクリーンを用意して、初めにそちらに描画し終えてから、BitBltでウィンドウコンテキストに描画したいのです。
そのオフスクリーンがメモリDCだと思ってました。
オフスクリーンを使った描画方法って無いのですか?
0543デフォルトの名無しさん
NGNGだからコンパチなビットマップを作れって。
0544539
NGNGWin32はこれまた回りくどいやり方ですね。
どうもでした。
0545デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています