#include #include #include #include #include #include #include #include char MainWindow::szClassName[]="ToolTip"; char MainWindow::szMenuName[]="TOOLTIP"; MainWindow::MainWindow(void) : mPaintHandler(this,&MainWindow::paintHandler), mDestroyHandler(this,&MainWindow::destroyHandler), mCommandHandler(this,&MainWindow::commandHandler), mKeyDownHandler(this,&MainWindow::keyDownHandler), mSizeHandler(this,&MainWindow::sizeHandler), mCreateHandler(this,&MainWindow::createHandler) { insertHandlers(); registerClass(); ::CreateWindow(szClassName,szClassName, WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,processInstance(),(LPSTR)this); show(SW_SHOW); update(); mControlWnd.createControl("BUTTON","",WS_CHILD|WS_VISIBLE|WS_BORDER|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,Rect(10,10,140,20),*this,115); // WS_EX_TRANSPARENT, mControlWnd.show(SW_SHOW); mControlWnd.update(); Rect clientRect; mControlWnd.clientRect(clientRect); // screenToClient(clientRect); mToolTipControl=new ToolTip(*this,ToolTip::AlwaysTip); mToolTipControl.disposition(PointerDisposition::Delete); PureToolInfo pureToolInfo; pureToolInfo.flags((UINT)PureToolInfo::IDIsHwnd|(UINT)PureToolInfo::SubClass); // |(UINT)PureToolInfo::CenterTip // pureToolInfo.flags((UINT)PureToolInfo::CenterTip); pureToolInfo.hwnd(mControlWnd); pureToolInfo.toolID((UINT)(HWND)mControlWnd); // pureToolInfo.hwnd(mControlWnd); // pureToolInfo.hwnd((HWND)mControlWnd); // pureToolInfo.toolID((UINT)(HWND)mControlWnd); // pureToolInfo.rect(Rect()); // pureToolInfo.rect(clientRect); // pureToolInfo.rect(Rect(10,10,140,20)); pureToolInfo.resInst(processInstance()); pureToolInfo.szText("This is an edit control."); mToolTipControl->addTool(pureToolInfo); } MainWindow::~MainWindow() { destroy(); } void MainWindow::insertHandlers(void) { Window::insertHandler(Window::DestroyHandler,&mDestroyHandler); Window::insertHandler(Window::PaintHandler,&mPaintHandler); Window::insertHandler(Window::CommandHandler,&mCommandHandler); Window::insertHandler(Window::SizeHandler,&mSizeHandler); Window::insertHandler(Window::KeyDownHandler,&mKeyDownHandler); Window::insertHandler(Window::CreateHandler,&mCreateHandler); } void MainWindow::removeHandlers(void) { Window::removeHandler(Window::DestroyHandler,&mDestroyHandler); Window::removeHandler(Window::PaintHandler,&mPaintHandler); Window::removeHandler(Window::CommandHandler,&mCommandHandler); Window::removeHandler(Window::SizeHandler,&mSizeHandler); Window::removeHandler(Window::KeyDownHandler,&mKeyDownHandler); Window::removeHandler(Window::CreateHandler,&mCreateHandler); } void MainWindow::registerClass(void)const { HINSTANCE hInstance(processInstance()); WNDCLASS wndClass; if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return; wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; wndClass.cbClsExtra =0; wndClass.cbWndExtra =sizeof(MainWindow*); wndClass.hInstance =hInstance; wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH); wndClass.lpszMenuName =szMenuName; wndClass.lpszClassName =szClassName; ::RegisterClass(&wndClass); assert(0!=::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass)); } CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) { removeHandlers(); ::PostQuitMessage(0); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wParam()) { default : break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)FALSE; } int MainWindow::hookProc(int code,WPARAM wParam,LPARAM lParam) { if(mToolTipControl.isOkay()) { WinMsg winMsg(*((MSG*)lParam)); switch(winMsg.message()) { case WM_LBUTTONDOWN : break; case WM_LBUTTONUP : break; case WM_MBUTTONDOWN : break; case WM_MBUTTONUP : break; case WM_MOUSEMOVE : // ::SendMessage(mToolTipControl->operator HWND(),WM_MOUSEMOVE,winMsg.wParam(),winMsg.lParam()); mToolTipControl->relayEvent(winMsg); break; case WM_RBUTTONDOWN : break; case WM_RBUTTONUP : break; } } return FALSE; }