终于搞定windows timer控件了,哈哈
完成了基本的功能,哪位大虾要是有更好的代码或者可以改进的希望贴出来大家一起进步。呵呵
module WindowsTime;
import dwt.DWT;
import dwt.internal.win32.OS;
import dwt.widgets.Composite;
import dwt.widgets.Control;
public interface TWinTimeEvent{
public void wmTimer(int wParam, int lParam);
};
class TWinTime : Control{
alias Control.computeSize computeSize;
alias Control.windowProc windowProc;
static const int TIMER_ID = 100;
private static /+const+/ WNDPROC WinTimeProc;
static const TCHAR[] WinTimeClass = OS.PROGRESS_CLASS;
TWinTimeEvent wte;
private static bool static_this_completed = false;
private static void static_this() {
if( static_this_completed ){
return;
}
synchronized {
if( static_this_completed ){
return;
}
WNDCLASS lpWndClass;
OS.GetClassInfo (null, WinTimeClass.ptr, &lpWndClass);
WinTimeProc = lpWndClass.lpfnWndProc;
auto hInstance = OS.GetModuleHandle (null);
auto hHeap = OS.GetProcessHeap ();
lpWndClass.hInstance = hInstance;
lpWndClass.style &= ~OS.CS_GLOBALCLASS;
lpWndClass.style |= OS.CS_DBLCLKS;
int byteCount = (WinTimeClass.length+1) * TCHAR.sizeof;
TCHAR* lpszClassName = cast(TCHAR*) OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
OS.MoveMemory (lpszClassName, WinTimeClass.ptr, byteCount);
lpWndClass.lpszClassName = lpszClassName;
OS.RegisterClass (&lpWndClass);
OS.HeapFree (hHeap, 0, lpszClassName);
static_this_completed = true;
}
}
public this (Composite parent, int style) {
static_this();
super (parent,style);
setBounds(0,0,0,0);
setVisible(false);
}
override int callWindowProc (HWND hwnd, int msg, int wParam, int lParam) {
if (handle is null) return 0;
return OS.CallWindowProc (WinTimeProc, hwnd, msg, wParam, lParam);
}
override void releaseWidget () {
super.releaseWidget ();
}
override char[] windowClass () {
return TCHARsToStr( WinTimeClass );
}
override int windowProc () {
return cast(int) WinTimeProc;
}
override LRESULT WM_TIMER (int wParam, int lParam) {
LRESULT result = super.WM_TIMER (wParam, lParam);
if (result !is null) return result;
if (wte !is null){
wte.wmTimer(wParam,lParam);
}
return result;
}
public void startTimer(int TimeLong,TWinTimeEvent lwte){
if (lwte is null) return ;
wte=lwte;
OS.SetTimer(handle,TIMER_ID,TimeLong,null);
}
public void stopTimer(){
OS.KillTimer(handle,TIMER_ID);
}
};