|
過去のログで検索したら、ともさんという方が投稿されたコードがあるのですが、コードを見ても理解ができません。上下に指定IDのウィンドウを並べる方法ありますでしょうか?
Dim nCount = Random(4) + 2; Dim id[nCount-1]; Dim i; For i = 0 To nCount-1 id[i] = Exec("notepad.exe"); Next
MsgBox("重ねて表示"); AdjustWindows(CascadeWindows, id); MsgBox("上下に並べて表示"); AdjustWindows(TileHorizontally, id); MsgBox("左右に並べて表示"); AdjustWindows(TileVertically, id);
Procedure AdjustWindows(nType, var wndID[]) DEF_DLL VirtualAlloc(LONG, DWORD, DWORD, DWORD):LONG:KERNEL32.DLL DEF_DLL VirtualFree(LONG, DWORD, DWORD):BOOL:KERNEL32.DLL DEF_DLL RtlMoveMemory(LONG, var LONG, DWORD)::KERNEL32.DLL DEF_DLL TileWindows(HWND, UINT, LONG, UINT, LONG):WORD:USER32.DLL DEF_DLL CascadeWindows(HWND, UINT, LONG, UINT, LONG):WORD:USER32.DLL
const MEM_COMMIT = $1000; const PAGE_READWRITE = $0004; const MEM_RELEASE = $8000; const MDITILE_VERTICAL = $0000; const MDITILE_HORIZONTAL = $0001;
const CascadeWindows = 0; const MinimizeAll = 1; const TileHorizontally = 2; const TileVertically = 3; const UndoMinimizeALL = 4;
Dim nLen = Length(wndID); Dim dwSize = nLen * 4; Dim pMem = VirtualAlloc(0, dwSize, MEM_COMMIT, PAGE_READWRITE); Dim i; For i = 0 To nLen-1 RtlMoveMemory(pMem + (i*4), IdToHnd(wndID[i]), 4); Next
Select (nType) case CascadeWindows; CascadeWindows(0, 0, 0, nLen, pMem); case TileHorizontally; TileWindows(0, MDITILE_HORIZONTAL, 0, nLen, pMem); case TileVertically; TileWindows(0, MDITILE_VERTICAL, 0, nLen, pMem); SelEnd VirtualFree(pMem, 0, MEM_RELEASE); FEnd
|
No.2839 2016/09/04(Sun) 22:12:53
|
☆ Re: 上下に指定のIDウィンドウを並べる方法について / stuncloud |
|
|
AdjustWindows(やらせたい動作, idが入った配列)
上下だったらTileHorizontallyですね
id1 = exec("notepad") id2 = exec("notepad") dim ids[] = id1, id2 // 配列に入れる AdjustWindows(TileHorizontally, ids) //上下に並べる
acwを使うという手もありますよ
h = G_SCREEN_H / 2 acw(id1, 0, 0, G_SCREEN_W, h) acw(id2, 0, h, G_SCREEN_W, h)
|
No.2843 2016/09/05(Mon) 10:08:47
|
|
☆ Re: 上下に指定のIDウィンドウを並べる方法について / シスイ |
|
|
stuncloud様、いつもありがとうございます。acwをやり方思う通りの処理ができました。本当に、いつも助けて頂きありがとうございます。
|
No.2844 2016/09/05(Mon) 12:46:59
|
|