HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0608
いののてタスクバーのライブサムネイルにMDI子ウィンドウを表示する方法を教えてください1未解決


いののて

リンク

2017/6/8(Thu) 02:42:26|NO.80151

MDI子ウィンドウをタスクバーのサムネイルに登録して追加することはできましたが、
ライブサムネイルにMDI子ウィンドウの状態が描画されず透明のままです。
どのようにすれば描画されるようになるのか教えてください。

//hscallbk.dll 必要 #include "user32.as" #include "hscallbk.as" #include "shell32.as" #define GWL_WNDPROC -4 #define GWL_USERDATA -21 #define GW_CHILD 5 #define CW_USEDEFAULT 0x80000000 #define IDI_APPLICATION 32512 #define IDC_ARROW 32512 #define WS_CHILD 0x40000000 #define WS_VISIBLE 0x10000000 #define WS_CLIPCHILDREN 0x02000000 #define WM_SIZE 0x0005 #define WM_CLOSE 0x0010 #define WM_SETTEXT 0x000C #define WM_GETTEXT 0x000D #define WM_WINDOWPOSCHANGING 0x0046 #define WM_COMMAND 0x0111 #define WM_MDIDESTROY 0x0221 #define WM_MDITILE 0x0226 #define WM_MDICASCADE 0x0227 #define WM_MDIICONARRANGE 0x0228 #define WM_MDIGETACTIVE 0x0229 #define WM_MDISETMENU 0x0230 #define MDITILE_VERTICAL 0x0000 #define MDITILE_HORIZONTAL 0x0001 #define MDITILE_SKIPDISABLED 0x0002 #define MDITILE_ZORDER 0x0004 #define MF_INSERT 0x00000000 #define MF_POPUP 0x00000010 #define MF_SEPARATOR 0x00000800 #define CLSID_TaskbarList "{56FDF344-FD6D-11d0-958A-006097C9A090}" #define IID_ITaskbarList3 "{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}" #usecom ITaskbarList3 IID_ITaskbarList3 CLSID_TaskbarList #comfunc ITaskbarList3_SetProgressValue 9 int,double,double #comfunc ITaskbarList3_SetProgressState 10 int,int #comfunc ITaskbarList3_RegisterTab 11 int,int//hwndTab, hwndMDI #comfunc ITaskbarList3_UnregisterTab 12 int//hwndTab #comfunc ITaskbarList3_SetTabOrder 13 int,int//hwndTab, hwndInsertBefore #comfunc ITaskbarList3_SetTabActive 14 int,int//hwndTab, hwndMDI #comfunc ITaskbarList3_ThumbBarAddButtons 15 int,int,int #comfunc ITaskbarList3_ThumbBarUpdateButtons 16 int,int,int #comfunc ITaskbarList3_ThumbBarSetImageList 17 int,int,int #comfunc ITaskbarList3_SetOverlayIcon 18 int,int,wstr #comfunc ITaskbarList3_SetThumbnailTooltip 19 int,int #comfunc ITaskbarList3_SetThumbnailClip 20 int,int newcom iTask3, ITaskbarList3 #uselib "" #func _MDIWndProc "" int,int,int,int setcallbk MDIWndProc,_MDIWndProc,*MyMDIWndProc screen 0,ginfo(20),ginfo(21),0,,,640,480:hMainWindow=hwnd title "MDIのテキストエディタ" SetWindowLong hMainWindow,-16,0x16CF0000 SetWindowPos hMainWindow,0,0,0,0,0,0x27//再描画 SetWindowLong hMainWindow,GWL_WNDPROC,varptr(MDIWndProc) OldHSPWndProc=stat SHFILEINFO=0 SHGetFileInfo ".txt",0x80,varptr(SHFILEINFO),0x160,0x111//テキストファイルアイコン取得 hIcon=SHFILEINFO.0 LoadCursor 0,IDC_ARROW //標準矢印カーソル hCursor=stat //MDI子ウィンドウクラス登録 dim WNDCLASSEX, 12 MDIClass = "MDIChildWindowClass" WNDCLASSEX = 48,0,varptr(MDIWndProc),0,0,hInstance,hIcon,hCursor,13,0,varptr(MDIClass),0 RegisterClassEx varptr(WNDCLASSEX) #enum IDM_NEWWND = 100 #enum IDM_OPEN #enum IDM_SAVE #enum IDM_CLOSEWND #enum IDM_CASCADE #enum IDM_TILE_H #enum IDM_TILE_V #enum IDM_ICONARRANGE CreatePopupMenu hMenu.2 = stat AppendMenu hMenu.2,MF_INSERT,IDM_NEWWND,"新しいウィンドウ(&N)" AppendMenu hMenu.2,MF_INSERT,IDM_CLOSEWND,"ウィンドウを閉じる(&D)" AppendMenu hMenu.2,MF_SEPARATOR,0,0 AppendMenu hMenu.2,MF_INSERT,IDM_CASCADE,"重ねて表示(&C)" AppendMenu hMenu.2,MF_INSERT,IDM_TILE_H,"上下に並べて表示(&H)" AppendMenu hMenu.2,MF_INSERT,IDM_TILE_V,"左右に並べて表示(&V)" AppendMenu hMenu.2,MF_INSERT,IDM_ICONARRANGE,"アイコンの整列(&A)" CreatePopupMenu hMenu.1 = stat AppendMenu hMenu.1,MF_INSERT,IDM_NEWWND,"新規作成(&N)" AppendMenu hMenu.1,MF_INSERT,IDM_OPEN,"開く(&O)" AppendMenu hMenu.1,MF_INSERT,IDM_SAVE,"保存(&S)" CreateMenu hMenu.0 = stat AppendMenu hMenu.0,MF_POPUP,hMenu.1,"ファイル(&F)" AppendMenu hMenu.0,MF_POPUP,hMenu.2,"ウィンドウ(&W)" SetMenu hMainWindow, hMenu.0 DrawMenuBar hMainWindow //MDIクライアントウィンドウ作成 CLIENTCREATESTRUCT=hMenu.1,0 CreateWindowEx 0x200,"MDICLIENT", "",WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,0,0,ginfo(12),ginfo(13),hMainWindow,hMenu.0,hinstance,varptr(CLIENTCREATESTRUCT) hMDIClient=stat MaxMDIChild=0 gosub *New stop *MyMDIWndProc _hwnd=callbkarg(0) msg=callbkarg(1) wp=callbkarg(2) lp=callbkarg(3) if _hwnd=hMainWindow{//メインウィンドウからのメッセージ switch msg case WM_CLOSE DestroyIcon hIcon//アイコンハンドル削除 PostQuitMessage hMainWindow//終了 swbreak case WM_SIZE nWidth = lp&0xFFFF nHeight = (lp>>16)&0xFFFF MoveWindow hMDIClient,0,0,nWidth,nHeight,1 swbreak case WM_COMMAND wID=wp&0xFFFF if wID<100{ DefFrameProc hMainWindow,hMDIClient,msg,wp,lp }else:if wID=IDM_NEWWND{//新しいウィンドウ gosub *New return }else:if wID=IDM_CLOSEWND{//ウィンドウを閉じる sendmsg hMDIClient,WM_MDIGETACTIVE if stat{ sendmsg hMDIClient,WM_MDIDESTROY,stat } return }else:if wID=IDM_ALLCLOSEWND{//全てのウィンドウを閉じる sendmsg hMDIClient,WM_MDIDESTROY,-1 return }else:if wID=IDM_CASCADE{//重ねて表示 sendmsg hMDIClient,WM_MDICASCADE,0 return }else:if wID=IDM_TILE_H{//上下に並べる sendmsg hMDIClient,WM_MDITILE,MDITILE_HORIZONTAL return }else:if wID=IDM_TILE_V{//左右に並べる sendmsg hMDIClient,WM_MDITILE,MDITILE_VERTICAL return }else:if wID=IDM_ICONARRANGE{//アイコンの整列 sendmsg hMDIClient,WM_MDITILE,WM_MDIICONARRANGE return }else:if wID=IDM_SAVE{//保存 dialog "txt",17,"テキストファイル" if stat=0:return fname=refstr if getpath(fname,2)="":fname+=".txt"//拡張子が無かったら拡張子追加 sendmsg hMDIClient,WM_MDIGETACTIVE//MDIアクティブウィンドウハンドル取得 _hMDIChild=stat if _hMDIChild{ GetWindow _hMDIChild,GW_CHILD:hEdit=stat sdim buf,65535 sendmsg hEdit,WM_GETTEXT,65535,varptr(buf)//エディットボックスの内容取得 sendmsg _hMDIChild,WM_SETTEXT,0,varptr(fname)//MDI子ウィンドウタイトル設定 notesel buf notesave fname } }else:if wID=IDM_OPEN{//開く dialog "txt",16,"テキストファイル" if stat=0:return fname=refstr sendmsg hMDIClient,WM_MDIGETACTIVE//MDIアクティブウィンドウハンドル取得 _hMDIChild=stat if _hMDIChild=0{//MDI子ウィンドウが無かったら作成 gosub *New:_hMDIChild=stat//※ ラベル *New の返り値は、作成したMDI子ウィンドウのハンドルとなる。 } if _hMDIChild{ GetWindow _hMDIChild,GW_CHILD:hEdit=stat sdim buf,65535 notesel buf noteload fname sendmsg hEdit,WM_SETTEXT,0,varptr(buf)//エディットボックスの内容設定 sendmsg _hMDIChild,WM_SETTEXT,0,varptr(fname)//MDI子ウィンドウタイトル設定 } } swend DefFrameProc hMainWindow,hMDIClient,msg,wp,lp//デフォルトウィンドウメッセージ return stat }else{//MDI子ウィンドウからのメッセージ if msg=WM_CLOSE{ dialog "閉じますか?",3 if stat=7:return sendmsg hMDIClient,WM_MDIDESTROY,_hwnd//閉じる ITaskbarList3_UnregisterTab iTask3,_hwnd//サムネイル削除 return 0 } DefMDIChildProc _hwnd,msg,wp,lp//デフォルトMDI子ウィンドウメッセージ if msg=WM_SIZE | msg=WM_WINDOWPOSCHANGING{ GetWindow _hwnd,GW_CHILD:hEdit=stat RECT=0,0,0,0 GetClientRect _hwnd,varptr(RECT) MoveWindow hEdit,RECT(0),RECT(1),RECT(2)-RECT(0),RECT(3)-RECT(1),1 } } return *New//新規作成 //MDI子ウィンドウを作る MaxMDIChild++ CreateMDIWindow MDIClass,"新しいドキュメント"+MaxMDIChild,0,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hMDIClient,hinstance,0 hMDIChild(MaxMDIChild-1)=stat RECT=0,0,0,0 GetClientRect hMDIChild(MaxMDIChild-1),varptr(RECT) CreateWindowEx 0x200,"Edit","",WS_CHILD | WS_VISIBLE | 0x300004,RECT(0),RECT(1),RECT(2)-RECT(0),RECT(3)-RECT(1),hMDIChild(MaxMDIChild-1),0,hinstance,0 hMDIEdit(MaxMDIChild-1)=stat ITaskbarList3_RegisterTab iTask3,hMDIChild(MaxMDIChild-1),hMainWindow//サムネイル登録 ITaskbarList3_SetTabOrder iTask3,hMDIChild(MaxMDIChild-1)//末尾に追加 return hMDIChild(MaxMDIChild-1)



この記事に返信する


MillkeySoftw

リンク

2017/6/8(Thu) 09:24:37|NO.80152




ONION software Copyright 1997-2023(c) All rights reserved.