Пример #1
0
WCECOMPAT_API int __cdecl
wceWasMenuGesture(HWND hwnd, int x, int y, int button, int down, UINT flags)
{
#ifdef POCKETPC_MENUS

    SHRGINFO shrginfo;
    int result;
    static int doit = 0 ;

    shrginfo.cbSize = sizeof(SHRGINFO);
    shrginfo.hwndClient = hwnd;
    shrginfo.ptDown.x = x;
    shrginfo.ptDown.y = y;
    shrginfo.dwFlags = SHRG_RETURNCMD;
    NKDbgPrintfW(TEXT("entering recognize\n"));
    if (doit) {
	result = SHRecognizeGesture(&shrginfo);
    }
    NKDbgPrintfW(TEXT("got %d\n"), result);
    return (result);// SHRecognizeGesture(&shrginfo));
#else

    return 0; /* handled elsewhere, for now */

#endif

}
Пример #2
0
void CDrawCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
#ifdef _WIN32_WCE
	if(SHRecognizeGesture(point))
	{
		OnRButtonUp(nFlags, point);
	}
#endif

	CClientDC dc(this);
	dc.DPtoLP(&point);

	m_pDraw = new CDesenho();
	
	m_pDraw->m_pointArray.Add(point);
	
	SetCapture();
	m_ptPrev = point;

	//CStatic::OnLButtonDown(nFlags, point);
}
Пример #3
0
static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)

{
    static int is_running = 0;


    HDC hdc;

    PAINTSTRUCT ps;

#ifndef __MINGW32__
    SHRGINFO rg;
#endif

    int x, y;

    int i;



    switch(msg)

    {

    case WM_CREATE:

        if(hToolTip == NULL) {

            hToolTip = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG_TOOLTIP), NULL, ToolTipProc);

        }

        break;



    case WM_DESTROY:

        DestroyWindow(hToolTip);

        hToolTip = NULL;



        // FileListCnt = 0;

        return 0;



    case WM_TODAYCUSTOM_CLEARCACHE:

        break;



    case WM_TODAYCUSTOM_QUERYREFRESHCACHE:

        if(Refresh) {

            Refresh = FALSE;



            // compute screen extents

            for(x = WinLeftMargin, y = WinTopMargin, i = 0; i < FileListCnt; i++) {

                if((x + IconSizeX + (HMargin * 2)) > GetSystemMetrics(SM_CXSCREEN) - WinRightMargin) {

                    x = WinLeftMargin;

                    y += IconSizeY + (VMargin * 2);

                }

                x += IconSizeX + (HMargin * 2);

            }

            y += IconSizeY + (VMargin * 2) + WinBottomMargin;

            ((TODAYLISTITEM *)(wParam))->cyp = y;



            SetTimer(hWnd, ID_ICON_TIMER, ShowIconSec * 1000, NULL);

            return TRUE;

        }

        return FALSE;



    case WM_LBUTTONDOWN:

        SelItem = Point2Item(LOWORD(lParam), HIWORD(lParam));

        InvalidateRect(hWnd, NULL, FALSE);

        UpdateWindow(hWnd);


#ifndef __MINGW32__
        rg.cbSize = sizeof(SHRGINFO);

        rg.hwndClient = hWnd;

        rg.ptDown.x = LOWORD(lParam);

        rg.ptDown.y = HIWORD(lParam);

#ifdef _WCE_PPC2002

        rg.dwFlags = SHRG_RETURNCMD | SHRG_NOANIMATION;

#else

        rg.dwFlags = SHRG_RETURNCMD;

#endif

        if(SelItem != -1 && SHRecognizeGesture(&rg) == GN_CONTEXTMENU) {

            RECT rect;

            RECT tip_rect;



            SendMessage(hToolTip, WM_SETTEXT, 0, (LPARAM)(FileList + SelItem)->Description);

            GetWindowRect(hWnd, &rect);

            GetWindowRect(hToolTip, &tip_rect);

            tip_rect.left = rect.left + LOWORD(lParam) - (tip_rect.right - tip_rect.left) - 10;

            if(tip_rect.left < 0) tip_rect.left = 0;

            tip_rect.top = rect.top + HIWORD(lParam) - (tip_rect.bottom - tip_rect.top) - 10;

            if(tip_rect.top < 0) tip_rect.top = 0;



            SetWindowPos(hToolTip, HWND_TOPMOST,

                         tip_rect.left, tip_rect.top,

                         0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_SHOWWINDOW);

        }
#endif
        SetCapture(hWnd);

        break;



    case WM_LBUTTONUP:

        ShowWindow(hToolTip, SW_HIDE);

        ReleaseCapture();

        i = Point2Item(LOWORD(lParam), HIWORD(lParam));

        if(i != -1 && i == SelItem) {

            if (!is_running) {
                is_running = 1;
                ShellOpen((FileList + i)->FileName, (FileList + i)->CommandLine);
                Sleep(1000);
                is_running = 0;
            }

        }

        SelItem = -1;

        InvalidateRect(hWnd, NULL, FALSE);

        UpdateWindow(hWnd);

        break;



    case WM_PAINT:

        hdc = BeginPaint(hWnd, &ps);

        OnPaint(hWnd, hdc, &ps);

        EndPaint(hWnd, &ps);

        break;



    case WM_ERASEBKGND:

        return 1;



    case WM_TIMER:

        switch(wParam)

        {

        case ID_ICON_TIMER:



            // JMW maybe break here?



            KillTimer(hWnd, ID_ICON_TIMER);

            InvalidateRect(hWnd, NULL, FALSE);

            UpdateWindow(hWnd);

            break;

        }

        break;



    default:

        return DefWindowProc(hWnd, msg, wParam, lParam);

    }

    return 0;

}
Пример #4
0
LRESULT CALLBACK VirtualListView::WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {
    VirtualListView *p=(VirtualListView *) GetWindowLong(hWnd, GWL_USERDATA);
 int klav=0;
    switch (message) {
    case WM_CREATE:
        {
            p=(VirtualListView *) (((CREATESTRUCT *)lParam)->lpCreateParams);
            SetWindowLong(hWnd, GWL_USERDATA, (LONG) p );

            //p->listScrollHWND=CreateWindow(_T("SCROLLBAR"), NULL, 
            //    SBS_VERT | WS_VISIBLE | WS_CHILD,
            //    0, 0, CW_USEDEFAULT, CW_USEDEFAULT, 
            //    hWnd, NULL, g_hInst, NULL); 

            break;

        }

    case WM_PAINT:

        {
            PAINTSTRUCT ps;
            HDC hdc;
            HDC wnd;
            wnd = BeginPaint(hWnd, &ps);

            HBITMAP buf=CreateCompatibleBitmap(wnd, p->clientRect.right, p->clientRect.bottom);

            hdc=CreateCompatibleDC(NULL);
            SelectObject(hdc, buf);

            PatBlt(hdc, 0, 0, p->clientRect.right, p->clientRect.bottom, WHITENESS);
            // TODO: Add any drawing code here...

            SetBkMode(hdc, OPAQUE);

            int y=-p->winTop;
            int index=0;

            if (p->odrlist.get()) {
                ODRList::const_iterator i=p->odrlist->begin();
                while (i!=p->odrlist->end()) {
                    ODRRef odr=*i; i++; 
                    bool oddIndex=(index & 1) && p->colorInterleaving;
                    index++;

                    bool focused = (odr.get()==p->cursorPos.get());

                    RECT ritem={0, y, p->clientRect.right, y} ;
                    odr->measure(hdc, ritem);
                    //int iHeight=odr->getHeight();
                    //y+=iHeight;
                    y=ritem.bottom;
                    //index++;

                    if (ritem.bottom < 0) continue;
                    if (ritem.top > p->clientRect.bottom) continue;

                    int bkColor=COLORS[12];
                    if (focused) {
                        // focused item
                        SetTextColor(hdc, COLORS[8]);
                        bkColor=(GetFocus()==hWnd)?COLORS[9]:COLORS[10];
                        //DrawFocusRect(hdc, &ritem);
                    } else {
                        //usual item
                        SetTextColor(hdc, odr->getColor());
                        bkColor= (oddIndex)? COLORS[11] : COLORS[12];
                    }
                    HBRUSH bkBrush=CreateSolidBrush(bkColor);
                    SetBkColor(hdc, bkColor);
                    ritem.right=p->clientRect.right; //full window-wide cursor
                    FillRect(hdc, &ritem, bkBrush);
                    DeleteObject(bkBrush);
                    odr->draw(hdc, ritem);
                }
            }

            RECT rc = {0, 0, 100, 100};

            SCROLLINFO si;
            si.cbSize=sizeof(SCROLLINFO);
            si.fMask=SIF_PAGE |SIF_POS |SIF_RANGE;
            si.nPage=p->clientRect.bottom;
            si.nPos=p->winTop;
            si.nMin=0;
            si.nMax=y+p->winTop;

            SetScrollInfo(p->thisHWnd, SB_VERT, &si, TRUE);

            /*int titleBgnd=0x808080;
            HBRUSH tb=CreateSolidBrush(titleBgnd);
            SetBkColor(hdc, titleBgnd);
            SetTextColor(hdc, 0x000000);

            LPCTSTR t=p->title.c_str();
            DrwText(hdc, t, -1, &rc, DT_CALCRECT | DT_LEFT | DT_TOP);
            rc.right=p->clientRect.right;
            FillRect(hdc, &rc, tb);
            DrwText(hdc, t, -1, &rc, DT_LEFT | DT_TOP);
            DeleteObject(tb);*/

            BitBlt(wnd, 0,0,p->clientRect.right, p->clientRect.bottom, hdc, 0,0, SRCCOPY);
            DeleteDC(hdc);
            DeleteObject(buf);

            EndPaint(hWnd, &ps);
            break;
        }

    case WM_SIZE: 
        { 
            //HDWP hdwp; 

            int height=GET_Y_LPARAM(lParam);
            int width=GET_X_LPARAM(lParam);
            // Calculate the display rectangle, assuming the 
            // tab control is the size of the client area. 
            SetRect(&(p->clientRect), 0, 0, width, height ); 

            /*hdwp = BeginDeferWindowPos(1);

            DeferWindowPos(hdwp, p->listScrollHWND, HWND_TOP, width-SCROLLWIDTH, tabHeight, 
            SCROLLWIDTH, height-tabHeight, 
            SWP_NOZORDER 
            );
            EndDeferWindowPos(hdwp); */

            p->cursorFit();
            SCROLLINFO si;
            si.cbSize=sizeof(SCROLLINFO);
            si.fMask=SIF_PAGE |SIF_POS;
            si.nPage=height;
            si.nPos=p->winTop;

            SetScrollInfo(p->thisHWnd, SB_VERT, &si, TRUE);

            break; 
        } 

    case WM_LBUTTONDOWN:
        {
            SetFocus(hWnd);
            ODRRef focused=p->moveCursorTo(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
            if (!(focused)) break;
            InvalidateRect(p->getHWnd(), NULL, true);

            SHRGINFO    shrg;
            shrg.cbSize = sizeof(shrg);
            shrg.hwndClient = hWnd;
            shrg.ptDown.x = LOWORD(lParam);
            shrg.ptDown.y = HIWORD(lParam);
            shrg.dwFlags = SHRG_RETURNCMD /*| SHRG_NOANIMATION*/;

            if (SHRecognizeGesture(&shrg) == GN_CONTEXTMENU) {

                HMENU hmenu = p->getContextMenu();

                VirtualListElement *velement=dynamic_cast<VirtualListElement *>(focused.get());
                if (velement) hmenu=velement->getContextMenu(hmenu);

                if (hmenu==NULL) break;

                POINT pt={LOWORD(lParam), HIWORD(lParam) };
                ClientToScreen(hWnd, &pt);
                int cmdId=TrackPopupMenuEx(hmenu,
                    /*TPM_LEFTALIGN |*/ TPM_TOPALIGN | TPM_RETURNCMD, 
                    pt.x, pt.y,
                    hWnd,
                    NULL);

                bool cmdProcessed=false;
                if (velement) 
					cmdProcessed=velement->OnMenuCommand(cmdId, p->getHWnd(), p->hEditBox);

                if (!cmdProcessed)
                    p->OnCommand(cmdId, NULL);

                DestroyMenu(hmenu);
            }
            break;
        }
    case WM_LBUTTONDBLCLK:
        {
            ODRRef oldCursor=p->cursorPos;
            ODRRef focused=p->moveCursorTo(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
            if (!(focused)) break;
            InvalidateRect(p->getHWnd(), NULL, true);
            if (focused==oldCursor) p->eventOk();
            break;
        }

    case WM_SETFOCUS:
    case WM_KILLFOCUS:
        {
            InvalidateRect(p->getHWnd(), NULL, true);
            break;
        }
    case WM_KEYDOWN:
        {bool kl2=1;
          int vKey=(int)wParam;
            int lkeyData=lParam;
            if (lkeyData & 0x80000000) break; //keyRelease 
            switch (vKey) {
                        /* UFO START */
                        
                        case VK_RIGHT:
                                PostMessage(tabs->getHWnd(), WM_COMMAND, TabsCtrl::NEXTTAB, 0);
                                break;

						case VK_3:kl2=0;
                              //  MessageBox(hWnd, TEXT("Clicked 3"), TEXT("!"), 0);
                               SCROLLINFO si2;
            si2.cbSize=sizeof(SCROLLINFO);
            si2.fMask=SIF_ALL;

            GetScrollInfo(p->thisHWnd, SB_VERT, &si2);

            //TODO: flicker-free scrolling
          
           /* case SB_LINEDOWN: *///  si2.nPos+=tabHeight; break;
            //case SB_LINEUP:    
			si2.nPos-=tabHeight; 
            //case SB_ENDSCROLL:  break;
            /*//case SB_PAGEUP:    */// si2.nPos-=si2.nPage; 
            //case SB_PAGEDOWN:   si2.nPos+=si2.nPage;  break;
           
      


            if (si2.nPos<0) si2.nPos=0; 
            if (si2.nPos+(int)si2.nPage >= si2.nMax) si2.nPos=si2.nMax-si2.nPage; 

            p->winTop= si2.nPos;

            //TODO: flicker-free scrolling
            InvalidateRect(p->getHWnd(), NULL, true);

            si2.fMask=SIF_POS;
            SetScrollInfo(p->thisHWnd, SB_VERT, &si2, TRUE); 
							break;
								
						case VK_9:kl2=0;
                                SCROLLINFO si3;
            si3.cbSize=sizeof(SCROLLINFO);
            si3.fMask=SIF_ALL;

            GetScrollInfo(p->thisHWnd, SB_VERT, &si3);

            //TODO: flicker-free scrolling
          
           /* case SB_LINEDOWN: *///  
			si3.nPos+=tabHeight; 
            //case SB_LINEUP:    si2.nPos-=tabHeight; 
            //case SB_ENDSCROLL:  break;
            /*//case SB_PAGEUP:    */// si2.nPos-=si2.nPage; 
            //case SB_PAGEDOWN:   si2.nPos+=si2.nPage;  break;
           
      


            if (si3.nPos<0) si3.nPos=0; 
            if (si3.nPos+(int)si3.nPage >= si3.nMax) si3.nPos=si3.nMax-si3.nPage; 

            p->winTop= si3.nPos;

            //TODO: flicker-free scrolling
            InvalidateRect(p->getHWnd(), NULL, true);

            si3.fMask=SIF_POS;
            SetScrollInfo(p->thisHWnd, SB_VERT, &si3, TRUE); 
							break;
							// MessageBox(hWnd, TEXT("Clicked 3"), TEXT("!"), 0);
                               
                        case VK_LEFT:
                                PostMessage(tabs->getHWnd(), WM_COMMAND, TabsCtrl::PREVTAB, 0);
                                break;
                        /* UFO END */
                        case VK_UP:
                p->moveCursor(-1);
                break;
				case VK_DOWN: 
                p->moveCursor(1);
                break;

           


                        case VK_RETURN:
                if (lkeyData &0xc0000000) break;
                p->eventOk();
                                break;
			}
            if(kl2)p->cursorFit();
            InvalidateRect(p->getHWnd(), NULL, true);


            SCROLLINFO si;
            si.cbSize=sizeof(SCROLLINFO);
            si.nPos=p->winTop;
            si.fMask=SIF_POS;
            SetScrollInfo(p->thisHWnd, SB_VERT, &si, TRUE);


            break;
        }
    case WM_VSCROLL:
        {
            int scrollCode=(int)LOWORD(wParam);
            int nPos=(int)HIWORD(wParam);

            SCROLLINFO si;
            si.cbSize=sizeof(SCROLLINFO);
            si.fMask=SIF_ALL;

            GetScrollInfo(p->thisHWnd, SB_VERT, &si);

            //TODO: flicker-free scrolling
            switch (scrollCode) {
            case SB_LINEDOWN:   si.nPos+=tabHeight; break;
            case SB_LINEUP:     si.nPos-=tabHeight; break;
            case SB_ENDSCROLL:  break;
            case SB_PAGEUP:     si.nPos-=si.nPage;  break;
            case SB_PAGEDOWN:   si.nPos+=si.nPage;  break;
            case SB_THUMBTRACK:
            case SB_THUMBPOSITION: si.nPos=si.nTrackPos; break;
            //default:            si.nPos=si.nTrackPos; break;
            }


            if (si.nPos<0) si.nPos=0; 
            if (si.nPos+(int)si.nPage >= si.nMax) si.nPos=si.nMax-si.nPage; 

            p->winTop= si.nPos;

            //TODO: flicker-free scrolling
            InvalidateRect(p->getHWnd(), NULL, true);

            si.fMask=SIF_POS;
            SetScrollInfo(p->thisHWnd, SB_VERT, &si, TRUE);
            return true;

        }

    case WM_COMMAND: 
        {
            int cmdId=LOWORD(wParam);
            p->OnCommand(cmdId, lParam);
            break;
        }

    case WM_VIRTUALLIST_REPLACE:
        {
            //TODO: create interconnecting message object to avoid pointers
            ODRListRef r=ODRListRef((ODRList *)lParam);
            p->bindODRList(r); //юурсмц ╧5

            //p->bindODRList(ODRSet::ref((ODRSet *)lParam)); //юурсмц ╧3
            p->notifyListUpdate(true);
            break;
        }

    case WM_DESTROY:
        //TODO: Destroy all child data associated eith this window

        return 0;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Пример #5
0
LRESULT CALLBACK VirtualListView::WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {
    VirtualListView *p=(VirtualListView *) GetWindowLong(hWnd, GWL_USERDATA);
 int klav=0;
 lParamst=lParam;
//printf(" \nmess: 0x%06X  x:%d  y:%d",message,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam));
    switch (message) {
    case WM_CREATE:
        {
            p=(VirtualListView *) (((CREATESTRUCT *)lParam)->lpCreateParams);
            SetWindowLong(hWnd, GWL_USERDATA, (LONG) p );

            //p->listScrollHWND=CreateWindow(_T("SCROLLBAR"), NULL, 
            //    SBS_VERT | WS_VISIBLE | WS_CHILD,
            //    0, 0, CW_USEDEFAULT, CW_USEDEFAULT, 
            //    hWnd, NULL, g_hInst, NULL); 

            break;

        }

	case CLEARMESS:
		{/*int result=MessageBox(
				p->getHWnd(), 
				L"ќчистить окно от сообщений?", 
				L"ќчистить", 
				MB_YESNO | MB_ICONWARNING);*/
		PostMessage(p->parentHWnd, CLEARMESS, NULL, false);}

    case WM_PAINT:

        {
            PAINTSTRUCT ps;
            HDC hdc;
            HDC wnd;
            wnd = BeginPaint(hWnd, &ps);

            HBITMAP buf=CreateCompatibleBitmap(wnd, p->clientRect.right, p->clientRect.bottom);

            hdc=CreateCompatibleDC(NULL);
            SelectObject(hdc, buf);

            PatBlt(hdc, 0, 0, p->clientRect.right, p->clientRect.bottom, WHITENESS);
            // TODO: Add any drawing code here...

            SetBkMode(hdc, OPAQUE);

            int y=-p->winTop;
            int index=0;
		
            if (p->odrlist.get()) {
                ODRList::const_iterator i=p->odrlist->begin();
                while (i!=p->odrlist->end()) {
                    ODRRef odr=*i; i++; 
                    bool oddIndex=(index & 1) && p->colorInterleaving;
                    index++;

                    bool focused = (odr.get()==p->cursorPos.get());

                    RECT ritem={0, y, p->clientRect.right, y} ;
                    odr->measure(hdc, ritem);
                    //int iHeight=odr->getHeight();
                    //y+=iHeight;
                    y=ritem.bottom;
                    //index++;

                    if (ritem.bottom < 0) continue;
                    if (ritem.top > p->clientRect.bottom) continue;

                    int bkColor=COLORS[12];
                    if (focused) {
                        // focused item
                        SetTextColor(hdc, COLORS[8]);
                        bkColor=(GetFocus()==hWnd)?COLORS[9]:COLORS[10];
                        //DrawFocusRect(hdc, &ritem);
                    } else {
                        //usual item
                        SetTextColor(hdc, odr->getColor());
                        bkColor= (oddIndex)? COLORS[11] : COLORS[12];
                    }
                    HBRUSH bkBrush=CreateSolidBrush(bkColor);
                    SetBkColor(hdc, bkColor);
                    ritem.right=p->clientRect.right; //full window-wide cursor
                    FillRect(hdc, &ritem, bkBrush);
                    DeleteObject(bkBrush);
                    odr->draw(hdc, ritem,1);
                }
            }

            RECT rc = {0, 0, 100, 100};

            SCROLLINFO si;
            si.cbSize=sizeof(SCROLLINFO);
            si.fMask=SIF_PAGE |SIF_POS |SIF_RANGE;
            si.nPage=p->clientRect.bottom;
            si.nPos=p->winTop;
            si.nMin=0;
            si.nMax=y+p->winTop;

            SetScrollInfo(p->thisHWnd, SB_VERT, &si, TRUE);

            /*int titleBgnd=0x808080;
            HBRUSH tb=CreateSolidBrush(titleBgnd);
            SetBkColor(hdc, titleBgnd);
            SetTextColor(hdc, 0x000000);

            LPCTSTR t=p->title.c_str();
            DrwText(hdc, t, -1, &rc, DT_CALCRECT | DT_LEFT | DT_TOP);
            rc.right=p->clientRect.right;
            FillRect(hdc, &rc, tb);
            DrwText(hdc, t, -1, &rc, DT_LEFT | DT_TOP);
            DeleteObject(tb);*/

            BitBlt(wnd, 0,0,p->clientRect.right, p->clientRect.bottom, hdc, 0,0, SRCCOPY);
            DeleteDC(hdc);
            DeleteObject(buf);

            EndPaint(hWnd, &ps);
            break;
        }

    case WM_SIZE: 
        { 
            //HDWP hdwp; 

            int height=GET_Y_LPARAM(lParam);
            int width=GET_X_LPARAM(lParam);
            // Calculate the display rectangle, assuming the 
            // tab control is the size of the client area. 
            SetRect(&(p->clientRect), 0, 0, width, height ); 

            /*hdwp = BeginDeferWindowPos(1);

            DeferWindowPos(hdwp, p->listScrollHWND, HWND_TOP, width-SCROLLWIDTH, tabHeight, 
            SCROLLWIDTH, height-tabHeight, 
            SWP_NOZORDER 
            );
            EndDeferWindowPos(hdwp); */

            p->cursorFit();
            SCROLLINFO si;
            si.cbSize=sizeof(SCROLLINFO);
            si.fMask=SIF_PAGE |SIF_POS;
            si.nPage=height;
            si.nPos=p->winTop;

            SetScrollInfo(p->thisHWnd, SB_VERT, &si, TRUE);

            break; 
        } 

	case MSGListFocus:
		{
			SetFocus(hWnd);
			break;
		}


    case WM_LBUTTONDOWN:
		{	smile_aktiv=40;
			xmouse=GET_X_LPARAM(lParam);
			ymouse=GET_Y_LPARAM(lParam);
			movemode=0;//неопределили пока
			zaderzhka=0;
			xmouse_d=0;
			ymouse_d=0;
			taptrue=1;
			if(movetrue){break;}
			SetFocus(hWnd);
            ODRRef focused=p->moveCursorTo(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
            if (!(focused)) break;
            InvalidateRect(p->getHWnd(), NULL, true);
			
            SHRGINFO    shrg;
            shrg.cbSize = sizeof(shrg);
            shrg.hwndClient = hWnd;
            shrg.ptDown.x = LOWORD(lParam);
            shrg.ptDown.y = HIWORD(lParam);
            shrg.dwFlags = SHRG_RETURNCMD /*| SHRG_NOANIMATION*/;

			if (SHRecognizeGesture(&shrg) == GN_CONTEXTMENU) {

                HMENU hmenu = p->getContextMenu();

                VirtualListElement *velement=dynamic_cast<VirtualListElement *>(focused.get());
                if (velement) hmenu=velement->getContextMenu(hmenu);

                if (hmenu==NULL) break;

                POINT pt={LOWORD(lParam), HIWORD(lParam) };
                ClientToScreen(hWnd, &pt);
                int cmdId=TrackPopupMenuEx(hmenu,
                    /*TPM_LEFTALIGN |*/ TPM_TOPALIGN | TPM_RETURNCMD, 
                    pt.x, pt.y,
                    hWnd,
                    NULL);

                bool cmdProcessed=false;
                if (velement) 
					cmdProcessed=velement->OnMenuCommand(cmdId, p->getHWnd(), p->hEditBox);

                if (!cmdProcessed)
                    p->OnCommand(cmdId, NULL);

                DestroyMenu(hmenu);
			}else{
			//нажатие на иконки
				p->is_icon_klik(xmouse);
			}
			
            break;
        }
    case WM_LBUTTONDBLCLK:
        {  smile_aktiv=40 ;
            ODRRef oldCursor=p->cursorPos;
            ODRRef focused=p->moveCursorTo(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
            if (!(focused)) break;
            InvalidateRect(p->getHWnd(), NULL, true);
            if (focused==oldCursor) p->eventOk();
            break;
        }

    case WM_SETFOCUS:
    case WM_KILLFOCUS:
        {
            InvalidateRect(p->getHWnd(), NULL, true);
            break;
        }

	case WM_MOUSEMOVE:
		{//скролл тасканием 
			//movetrue=1;
			smile_aktiv=40 ;
			if(zaderzhka>0){
			printf("mode %d X: %d  Y: %d\n",movemode,xmouse_d,ymouse_d);
			
			if(movemode){
			//собственно само движение
				if(movemode==1){
				//верт
					if(ymouse_d<0){
					PostMessage(p->getHWnd(), WM_VSCROLL, SB_LINEDOWN, 0);
					//PostMessage(p->getHWnd(), WM_VSCROLL, SB_LINEDOWN, 0);
					}else{
					 PostMessage(p->getHWnd(), WM_VSCROLL, SB_LINEUP, 0);
					// PostMessage(p->getHWnd(), WM_VSCROLL, SB_LINEUP, 0);
					}
				}else{
				//гориз
					if (abs(xmouse_d)>50){
						if (xmouse_d<0){ PostMessage(tabs->getHWnd(), WM_COMMAND, TabsCtrl::NEXTTAB, 0);}
						else{PostMessage(tabs->getHWnd(), WM_COMMAND, TabsCtrl::PREVTAB, 0);}
						xmouse_d=0;
					}}
			
			
			}
			else     
			//определ¤ем movemode 1-вертик   2-гориз
			{int absx,absy;
			 absx=xmouse_d;absy=ymouse_d;
			 if(xmouse_d<0)absx=xmouse_d*(-1);
			 if(ymouse_d<0)absy=ymouse_d*(-1);
			 
				if(absx > absy){movemode=2;}else{movemode=1;}
				movetrue=1;taptrue=0;
				printf("mode %d ax: %d  ay: %d\n",movemode,absx,absy);
			}
		zaderzhka=0;ymouse_d=0;
			}else{zaderzhka++;
			xmouse_d=xmouse_d+GET_X_LPARAM(lParam)-xmouse;
			ymouse_d=ymouse_d+GET_Y_LPARAM(lParam)- ymouse;
			
			xmouse=GET_X_LPARAM(lParam);
			ymouse=GET_Y_LPARAM(lParam);
			}
		break;}
	case WM_LBUTTONUP:
		{if(movetrue==1 && taptrue==1){
			movetrue=0;
			PostMessage(p->getHWnd(), WM_LBUTTONDOWN, 0, lParamst);
		}
		break;
		}

    case WM_KEYDOWN:
        {bool kl2=1;
		smile_aktiv=40 ;
          int vKey=(int)wParam;
            int lkeyData=lParam;
            if (lkeyData & 0x80000000) break; //keyRelease 
            switch (vKey)
			{
				/* UFO START */
				case VK_5:
				{
					ODRRef focused=p->cursorPos;
					if (!(focused)) break;
					InvalidateRect(p->getHWnd(), NULL, true);
					HMENU hmenu = p->getContextMenu();
					VirtualListElement *velement=dynamic_cast<VirtualListElement *>(focused.get());
					if (velement) hmenu=velement->getContextMenu(hmenu);
					if (hmenu==NULL) break;
					POINT pt={LOWORD(lParam), HIWORD(lParam) };
					ClientToScreen(hWnd, &pt);
					int cmdId=TrackPopupMenuEx(hmenu,
						/*TPM_LEFTALIGN |*/ TPM_TOPALIGN | TPM_RETURNCMD, 
						pt.x, pt.y,
						hWnd,
						NULL);

					bool cmdProcessed=false;
					if (velement) 
						cmdProcessed=velement->OnMenuCommand(cmdId, p->getHWnd(), p->hEditBox);

					if (!cmdProcessed)
						p->OnCommand(cmdId, NULL);

					DestroyMenu(hmenu); break;
				}

                        case VK_RIGHT:
                                PostMessage(tabs->getHWnd(), WM_COMMAND, TabsCtrl::NEXTTAB, 0);
                                break;

						case VK_3:kl2=0;
                              //  MessageBox(hWnd, TEXT("Clicked 3"), TEXT("!"), 0);
                               SCROLLINFO si2;
            si2.cbSize=sizeof(SCROLLINFO);
            si2.fMask=SIF_ALL;

            GetScrollInfo(p->thisHWnd, SB_VERT, &si2);

            //TODO: flicker-free scrolling
          
           /* case SB_LINEDOWN: *///  si2.nPos+=tabHeight; break;
            //case SB_LINEUP:    
			si2.nPos-=tabHeight; 
            //case SB_ENDSCROLL:  break;
            /*//case SB_PAGEUP:    */// si2.nPos-=si2.nPage; 
            //case SB_PAGEDOWN:   si2.nPos+=si2.nPage;  break;
           
      


            if (si2.nPos<0) si2.nPos=0; 
            if (si2.nPos+(int)si2.nPage >= si2.nMax) si2.nPos=si2.nMax-si2.nPage; 

            p->winTop= si2.nPos;

            //TODO: flicker-free scrolling
            InvalidateRect(p->getHWnd(), NULL, true);

            si2.fMask=SIF_POS;
            SetScrollInfo(p->thisHWnd, SB_VERT, &si2, TRUE); 
							break;
								
						case VK_9:kl2=0;
                                SCROLLINFO si3;
            si3.cbSize=sizeof(SCROLLINFO);
            si3.fMask=SIF_ALL;

            GetScrollInfo(p->thisHWnd, SB_VERT, &si3);

            //TODO: flicker-free scrolling
          
           /* case SB_LINEDOWN: *///  
			si3.nPos+=tabHeight; 
            //case SB_LINEUP:    si2.nPos-=tabHeight; 
            //case SB_ENDSCROLL:  break;
            /*//case SB_PAGEUP:    */// si2.nPos-=si2.nPage; 
            //case SB_PAGEDOWN:   si2.nPos+=si2.nPage;  break;
           
      


            if (si3.nPos<0) si3.nPos=0; 
            if (si3.nPos+(int)si3.nPage >= si3.nMax) si3.nPos=si3.nMax-si3.nPage; 

            p->winTop= si3.nPos;

            //TODO: flicker-free scrolling
            InvalidateRect(p->getHWnd(), NULL, true);

            si3.fMask=SIF_POS;
            SetScrollInfo(p->thisHWnd, SB_VERT, &si3, TRUE); 
							break;
							// MessageBox(hWnd, TEXT("Clicked 3"), TEXT("!"), 0);
                               
                        case VK_LEFT:
                                PostMessage(tabs->getHWnd(), WM_COMMAND, TabsCtrl::PREVTAB, 0);
                                break;
                        /* UFO END */
                        case VK_UP:
                p->moveCursor(-1);
                break;
				case VK_DOWN: 
					/* UFO START */
					// переключаем фокус в поле ввода после второго нажати¤ кнопки вниз на последнем сообщении
					if (p->cursorAtEnd() && IsWindow(p->hEditBox) ) SetFocus(p->hEditBox);
					/* UFO END */
					p->moveCursor(1);
                break;

                case VK_RETURN:
					SHRGINFO    shrg;
					shrg.cbSize = sizeof(shrg);
					shrg.hwndClient = hWnd;
					shrg.ptDown.x = LOWORD(lParam);
					shrg.ptDown.y = HIWORD(lParam);
					shrg.dwFlags = SHRG_RETURNCMD | SHRG_NOANIMATION;

					if (SHRecognizeGesture(&shrg) == GN_CONTEXTMENU)
					{
						ODRRef focused=p->cursorPos;
						if (!(focused)) break;
						InvalidateRect(p->getHWnd(), NULL, true);
						HMENU hmenu = p->getContextMenu();
						VirtualListElement *velement=dynamic_cast<VirtualListElement *>(focused.get());
						if (velement) hmenu=velement->getContextMenu(hmenu);
						if (hmenu==NULL) break;
						POINT pt={LOWORD(lParam), HIWORD(lParam) };
						ClientToScreen(hWnd, &pt);
						int cmdId=TrackPopupMenuEx(hmenu,
							/*TPM_LEFTALIGN |*/ TPM_TOPALIGN | TPM_RETURNCMD, 
							pt.x, pt.y,
							hWnd,
							NULL);

						bool cmdProcessed=false;
						if (velement) 
							cmdProcessed=velement->OnMenuCommand(cmdId, p->getHWnd(), p->hEditBox);

						if (!cmdProcessed)
							p->OnCommand(cmdId, NULL);

						DestroyMenu(hmenu);
						break;
					}
					if (lkeyData &0xc0000000) break;
					p->eventOk();
				break;
			}
            if(kl2)p->cursorFit();
            InvalidateRect(p->getHWnd(), NULL, true);


            SCROLLINFO si;
            si.cbSize=sizeof(SCROLLINFO);
            si.nPos=p->winTop;
            si.fMask=SIF_POS;
            SetScrollInfo(p->thisHWnd, SB_VERT, &si, TRUE);


            break;
        }
    case WM_VSCROLL:
        {   smile_aktiv=40 ;
            int scrollCode=(int)LOWORD(wParam);
            int nPos=(int)HIWORD(wParam);

            SCROLLINFO si;
            si.cbSize=sizeof(SCROLLINFO);
            si.fMask=SIF_ALL;

            GetScrollInfo(p->thisHWnd, SB_VERT, &si);

            //TODO: flicker-free scrolling
            switch (scrollCode) {
            case SB_LINEDOWN:   si.nPos+=tabHeight; break;
            case SB_LINEUP:     si.nPos-=tabHeight; break;
            case SB_ENDSCROLL:  break;
            case SB_PAGEUP:     si.nPos-=si.nPage;  break;
            case SB_PAGEDOWN:   si.nPos+=si.nPage;  break;
            case SB_THUMBTRACK:
            case SB_THUMBPOSITION: si.nPos=si.nTrackPos; break;
            //default:            si.nPos=si.nTrackPos; break;
            }


            if (si.nPos<0) si.nPos=0; 
            if (si.nPos+(int)si.nPage >= si.nMax) si.nPos=si.nMax-si.nPage; 

            p->winTop= si.nPos;

            //TODO: flicker-free scrolling
            InvalidateRect(p->getHWnd(), NULL, true);

            si.fMask=SIF_POS;
            SetScrollInfo(p->thisHWnd, SB_VERT, &si, TRUE);
            return true;

        }

    case WM_COMMAND: 
        {
            int cmdId=LOWORD(wParam);
            p->OnCommand(cmdId, lParam);
            break;
        }

    case WM_VIRTUALLIST_REPLACE:
        {
            //TODO: create interconnecting message object to avoid pointers
            ODRListRef r=ODRListRef((ODRList *)lParam);
            p->bindODRList(r); //ј’“”Ќ√ є5

            //p->bindODRList(ODRSet::ref((ODRSet *)lParam)); //ј’“”Ќ√ є3
            p->notifyListUpdate(true);
            break;
        }

    case WM_DESTROY:
        //TODO: Destroy all child data associated eith this window

        return 0;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Пример #6
0
LRESULT CALLBACK ChessView::WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{int cvtp=1;int figura;RECT rc2;BOOL postv;BOOL postvput;
rc2.left=rc2.top=0;
rc2.bottom=rc2.right=8*RAZMER+2;
	PAINTSTRUCT ps;
   HDC hdc;
HDC  hdc2;
int xf,yf;//для постановки-куда предпологаем ставить
int z;int z2;

ChessView *p=(ChessView *) GetWindowLong(hWnd, GWL_USERDATA);
	switch (message)
	{case WM_CLOSE:
		case WM_DESTROY:
			
			DeleteObject(hBmp1);//Удалим
			DeleteDC(hMemDC1);
		
	case WM_CREATE:

		p=(ChessView *) (((CREATESTRUCT *)lParam)->lpCreateParams);
        SetWindowLong(hWnd, GWL_USERDATA, (LONG) p );
		
		break;
	case WM_PAINT:
		
		// тута рисовать
		cvtp=1;
		hdc=GetDC(hWnd);//Получим HDC
		//hdc = BeginPaint(hWnd, &ps);
		hMemDC1=CreateCompatibleDC(hdc);
		hBmp1=CreateCompatibleBitmap(hdc,rc2.bottom,rc2.bottom);
		SelectObject(hMemDC1,hBmp1);
		
		for(int x=1;x<=8;x++){
			for(int y=1;y<=8;y++){
		
			if(cvtp==1){ TransparentImage(hMemDC1,(x-1)*RAZMER,(y-1)*RAZMER,RAZMER,RAZMER, bmpc, 13*RAZMERSKIN, 0, RAZMERSKIN, RAZMERSKIN, transparentColorCH);}else{TransparentImage(hMemDC1,(x-1)*RAZMER,(y-1)*RAZMER,RAZMER,RAZMER, bmpc, 14*RAZMERSKIN, 0, RAZMERSKIN, RAZMERSKIN, transparentColorCH);}
			if(cvtp==2){cvtp=1;}else{cvtp=2;}//рисуем квадрат
			//рисуем фигуру
			if(p->Chesspole[y][x]>6){figura=p->Chesspole[y][x]-4;}else{figura=p->Chesspole[y][x];}
						 TransparentImage(hMemDC1,(x-1)*RAZMER,(y-1)*RAZMER,RAZMER,RAZMER, bmpc, figura*RAZMERSKIN, 0, RAZMERSKIN, RAZMERSKIN, transparentColorCH);
			if(p->flagaktiv==1 && p->fokus_x==x && p->fokus_y==y){TransparentImage(hMemDC1,(x-1)*RAZMER,(y-1)*RAZMER,RAZMER,RAZMER, bmpc, 15*RAZMERSKIN, 0, RAZMERSKIN, RAZMERSKIN, transparentColorCH);}
			
			}
			if(cvtp==2){cvtp=1;}else{cvtp=2;}
		}
	
		hdc2 = BeginPaint(hWnd, &ps);
		EndPaint(hWnd, &ps);
		
		BitBlt(hdc,0,0,rc2.bottom,rc2.bottom,hMemDC1,0,0,SRCCOPY);//Скопируем рисунок из памяти
	//	EndPaint(hWnd, &ps);
		
		break;

	case  IDC_WM_VYBOR:{
        
				
					p->fokus_x=(p->pt2.x)/RAZMER+1;
					p->fokus_y=(p->pt2.y)/RAZMER+1;
				p->fokus_f=p->Chesspole[p->fokus_y][p->fokus_x];
				p->flagaktiv=1;//нажали
				if(p->fokus_f==0)p->flagaktiv=0;
				InvalidateRect(hWnd,&rc2,1);
				PostMessage (hWnd, WM_PAINT, 0, 0);

					  // UpdateWindow(hWnd);
					   }
			
			
					   break;

	case IDC_WM_STAV:
		xf=(p->pt2.x)/RAZMER+1;
		yf=(p->pt2.y)/RAZMER+1;
				postvput=0;
				postv=0;
				if(p->fokus_f<7 && (p->Chesspole[yf][xf]>=7 || p->Chesspole[yf][xf]==0))postv=1;//на чужие или пусто
				if(p->fokus_f>6 && (p->Chesspole[yf][xf]<=6))postv=1;
               
				if(postv){//тут обрабатываем правильность хода в зависимости от фигуры
					if(p->fokus_f==1){postvput=0;//пешка
						if(p->fokus_y==7){//перепрыгнем на 2 вначале
							if(yf==5 && p->fokus_x==xf && p->Chesspole[6][xf]==0 && p->Chesspole[5][xf]==0){postvput=1;}else if(yf==6 && p->fokus_x==xf && p->Chesspole[6][xf]==0){postvput=1;}//
						
						}else{//на 1вперёд
						
							if(yf==p->fokus_y-1  && p->fokus_x==xf && p->Chesspole[yf][xf]==0){postvput=1;}//вперед на фигуру не идём
							if(yf==p->fokus_y-1  && (p->fokus_x==xf-1 || p->fokus_x==xf+1) && p->Chesspole[yf][xf]>6)postvput=1;//бьём на искось

						}


					//пешка-end
					}else if(p->fokus_f==11){postvput=0;//чёрнпешка
						
						if(p->fokus_y==2){//перепрыгнем на 2 вначале
							if(yf==4 && p->fokus_x==xf && p->Chesspole[3][xf]==0 && p->Chesspole[4][xf]==0){postvput=1;}else if(yf==3 && p->fokus_x==xf){postvput=1;}//
						
						}else{//на 1вперёд
						
							if(yf==p->fokus_y+1  && p->fokus_x==xf && p->Chesspole[yf][xf]==0){postvput=1;}//вперед на фигуру не идём
							if(yf==p->fokus_y+1  && (p->fokus_x==xf-1 || p->fokus_x==xf+1) && p->Chesspole[yf][xf]<7)postvput=1;//бьём на искось

							}

					//чёрнпешка-end
					}else if(p->fokus_f==2 || p->fokus_f==12){//тура
						if(yf==p->fokus_y){postvput=1;//горизонталь
						if(xf>p->fokus_x){//вправо
							for(z=p->fokus_x+1;z<xf;z++){if(p->Chesspole[yf][z]!=0)postvput=0;}}else if(xf<p->fokus_x){//ВЛЕВО
							for(z=p->fokus_x-1;z>xf;z--){if(p->Chesspole[yf][z]!=0)postvput=0;}}

						

						}else if(xf==p->fokus_x){postvput=1;//ВЕРТИКАЛЬ
						if(yf>p->fokus_y){//ВВЕРХ
							for(z=p->fokus_y+1;z<yf;z++){if(p->Chesspole[z][xf]!=0)postvput=0;}}else if(yf<p->fokus_y){//ВНИЗ
							for(z=p->fokus_y-1;z>yf;z--){if(p->Chesspole[z][xf]!=0)postvput=0;}}

						

						}


//тура-end
					}else if(p->fokus_f==3 || p->fokus_f==13){//конь

						if(xf==p->fokus_x-2 && yf==p->fokus_y-1)postvput=1;
						if(xf==p->fokus_x-1 && yf==p->fokus_y-2)postvput=1;
						if(xf==p->fokus_x+1 && yf==p->fokus_y-2)postvput=1;
						if(xf==p->fokus_x+2 && yf==p->fokus_y-1)postvput=1;
						if(xf==p->fokus_x+2 && yf==p->fokus_y+1)postvput=1;
						if(xf==p->fokus_x+1 && yf==p->fokus_y+2)postvput=1;
						if(xf==p->fokus_x-1 && yf==p->fokus_y+2)postvput=1;
						if(xf==p->fokus_x-2 && yf==p->fokus_y+1)postvput=1;

				
//конь-конец
					}else if(p->fokus_f==4 || p->fokus_f==14){//слон

						if(abs(p->fokus_x-xf)==abs(p->fokus_y-yf)){postvput=1;
						z2=0;
						if(p->fokus_x<xf){//право
							for(z=p->fokus_x+1;z<xf;z++){
								if(p->fokus_y<yf && p->Chesspole[p->fokus_y+1+z2][z]!=0){postvput=0;}
								else 
									if(p->fokus_y>yf && p->Chesspole[p->fokus_y-1-z2][z]!=0){postvput=0;}
							++z2;
							}
						}else 
							if(p->fokus_x>xf){
							for(z=p->fokus_x-1;z>xf;z--){
								if(p->fokus_y<yf && p->Chesspole[p->fokus_y+1+z2][z]!=0){postvput=0;}
								else 
									if(p->fokus_y>yf && p->Chesspole[p->fokus_y-1-z2][z]!=0){postvput=0;}
							++z2;
						}
						
							}}
						
						

//слон-конец
					}else if(p->fokus_f==5 || p->fokus_f==15){//ферзь

//как слон 
					if(abs(p->fokus_x-xf)==abs(p->fokus_y-yf)){postvput=1;
						z2=0;
						if(p->fokus_x<xf){//право
							for(z=p->fokus_x+1;z<xf;z++){
								if(p->fokus_y<yf && p->Chesspole[p->fokus_y+1+z2][z]!=0){postvput=0;}
								else 
									if(p->fokus_y>yf && p->Chesspole[p->fokus_y-1-z2][z]!=0){postvput=0;}
							++z2;
							}
						}else 
							if(p->fokus_x>xf){
							for(z=p->fokus_x-1;z>xf;z--){
								if(p->fokus_y<yf && p->Chesspole[p->fokus_y+1+z2][z]!=0){postvput=0;}
								else 
									if(p->fokus_y>yf && p->Chesspole[p->fokus_y-1-z2][z]!=0){postvput=0;}
							++z2;
						}
						
							}}else{
//или тура
						if(yf==p->fokus_y){postvput=1;//горизонталь
						if(xf>p->fokus_x){//вправо
							for(z=p->fokus_x+1;z<xf;z++){if(p->Chesspole[yf][z]!=0)postvput=0;}}else if(xf<p->fokus_x){//ВЛЕВО
							for(z=p->fokus_x-1;z>xf;z--){if(p->Chesspole[yf][z]!=0)postvput=0;}}

						

						}else if(xf==p->fokus_x){postvput=1;//ВЕРТИКАЛЬ
						if(yf>p->fokus_y){//ВВЕРХ
							for(z=p->fokus_y+1;z<yf;z++){if(p->Chesspole[z][xf]!=0)postvput=0;}}else if(yf<p->fokus_y){//ВНИЗ
							for(z=p->fokus_y-1;z>yf;z--){if(p->Chesspole[z][xf]!=0)postvput=0;}}

						

						}}


//конец ферз
					}else if(p->fokus_f==6 || p->fokus_f==16){postvput=0;//король

						if(abs(yf-p->fokus_y)==1  || abs(p->fokus_x-xf)==1){postvput=1;
						if(p->fokus_f==6)p->rocb=4;
						if(p->fokus_f==16)p->rokch=4;
						
						
						}//тут будет рокоровка else if()

//конец король
					}

				}
			
				//поставили
				if( postvput){
				p->Chesspole[p->fokus_y][p->fokus_x]=0;
				p->fokus_x=(p->pt2.x)/RAZMER+1;
				p->fokus_y=(p->pt2.y)/RAZMER+1;
				
				p->Chesspole[p->fokus_y][p->fokus_x]=p->fokus_f;

				}
				//UpdateWindow(hWnd);//
				InvalidateRect(hWnd,&rc2,1);
				PostMessage (hWnd, WM_PAINT,0 , 0);
					p->flagaktiv=0;
					 
					 break;

		case WM_LBUTTONDOWN:
			
		

			SetFocus(hWnd);
            SHRGINFO    shrg;
            shrg.cbSize = sizeof(shrg);
            shrg.hwndClient = hWnd;
            shrg.ptDown.x = LOWORD(lParam);
            shrg.ptDown.y = HIWORD(lParam);
            shrg.dwFlags = SHRG_RETURNCMD /*| SHRG_NOANIMATION*/;

			if (SHRecognizeGesture(&shrg) == GN_CONTEXTMENU) {

              
 
                HMENU hmenu = CreatePopupMenu();
                if (hmenu==NULL) break;

				
                
                if(p->flagaktiv==0)AppendMenu(hmenu, MF_STRING, WM_VYBOR, TEXT("Выбрать") );
				if(p->flagaktiv==1){AppendMenu(hmenu, MF_STRING, WM_STAV, TEXT("Поставить") );
				AppendMenu(hmenu, MF_STRING, WM_OTMENA_VYBOR, TEXT("Отмена выбора") );}
                AppendMenu(hmenu, MF_SEPARATOR, 0, NULL);
                AppendMenu(hmenu, MF_STRING, EM_UNDO, TEXT("Отмена") );
				AppendMenu(hmenu, MF_STRING, SB_, TEXT("Пригласить") );
				AppendMenu(hmenu, MF_STRING, SB_, TEXT("Сдаться") );
				AppendMenu(hmenu, MF_STRING, SB_, TEXT("Ничья") );
POINT pt;		 p->pt2.x=GET_X_LPARAM(lParam);
				p->pt2.y=GET_Y_LPARAM(lParam);
               pt.x=GET_X_LPARAM(lParam);
				pt.y=GET_Y_LPARAM(lParam);
                ClientToScreen(hWnd, &pt);

                int cmdId=TrackPopupMenuEx(hmenu,
                    TPM_BOTTOMALIGN | TPM_RETURNCMD,
                    pt.x, pt.y,
                    hWnd,
                    NULL);
                if (cmdId==WM_VYBOR)PostMessage(hWnd, IDC_WM_VYBOR,0 , 0);
                if (cmdId==WM_STAV)PostMessage(hWnd, IDC_WM_STAV,0 , 0);

                return 0;
			}

		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
Пример #7
0
long WINAPI ComboSubClassProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { 
    WNDPROC OldWndProc=(WNDPROC) GetWindowLong(hWnd, GWL_USERDATA);
    switch(msg) { 
    case WM_LBUTTONDOWN:
        {

            SHRGINFO    shrg;
            shrg.cbSize = sizeof(shrg);
            shrg.hwndClient = hWnd;
            shrg.ptDown.x = LOWORD(lParam);
            shrg.ptDown.y = HIWORD(lParam);
            shrg.dwFlags = SHRG_RETURNCMD /*| SHRG_NOANIMATION*/;

            if (SHRecognizeGesture(&shrg) == GN_CONTEXTMENU) {

                DWORD sel=SendMessage(hWnd, EM_GETSEL, 0, 0);

                UINT paste = (IsClipboardFormatAvailable(CF_UNICODETEXT))?  MF_STRING : MF_STRING | MF_GRAYED;
                UINT cut = (LOWORD(sel)!=HIWORD(sel))? MF_STRING : MF_STRING | MF_GRAYED;
                UINT undo= (SendMessage(hWnd, EM_CANUNDO, 0, 0))? MF_STRING : MF_STRING | MF_GRAYED;;

                HMENU hmenu = CreatePopupMenu();
                if (hmenu==NULL) break;

                //AppendMenu(hmenu, (smileParser->hasSmiles())? MF_STRING : MF_STRING | MF_GRAYED, WM_USER, TEXT("Add Smile"));
                //AppendMenu(hmenu, MF_SEPARATOR, 0, NULL);
                AppendMenu(hmenu, cut, WM_CUT, TEXT("Cut") );
                AppendMenu(hmenu, cut, WM_COPY, TEXT("Copy") );
                AppendMenu(hmenu, paste, WM_PASTE, TEXT("Paste") );
                AppendMenu(hmenu, MF_SEPARATOR, 0, NULL);
                AppendMenu(hmenu, undo, EM_UNDO, TEXT("Undo") );

                POINT pt={LOWORD(lParam), HIWORD(lParam) };
                ClientToScreen(hWnd, &pt);

                int cmdId=TrackPopupMenuEx(hmenu,
                    TPM_BOTTOMALIGN | TPM_RETURNCMD,
                    pt.x, pt.y,
                    hWnd,
                    NULL);

                //if (cmdId==WM_USER) SmileBox::showSmileBox(hWnd, pt.x, pt.y, smileParser);

                DestroyMenu(hmenu);

                if (cmdId>0) PostMessage(hWnd, cmdId, 0, 0);

                return 0;
            }
            break;
        }

    /*case WM_KEYDOWN:
        if (wParam==VK_CONTROL) editbox::editBoxShifts=true;
        if (wParam==VK_SHIFT)   editbox::editBoxShifts=true;
        break; 
    case WM_KEYUP:
        editbox::editBoxShifts=false;
        break;
        */
    case WM_CHAR:
        if (wParam==VK_RETURN) {
            PostMessage(GetParent(GetParent(hWnd)), WM_COMMAND, IDOK, 0);
            return 0;
        }
        break;
    } 
    return CallWindowProc(OldWndProc,hWnd,msg,wParam,lParam); 
}
Пример #8
0
LRESULT CALLBACK TabsCtrl::WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {
    PAINTSTRUCT ps;
    HDC hdc;
    TabsCtrl *p=(TabsCtrl *) GetWindowLong(hWnd, GWL_USERDATA);

    switch (message) {
    case WM_CREATE:
        {
            p=(TabsCtrl *) (((CREATESTRUCT *)lParam)->lpCreateParams);
            SetWindowLong(hWnd, GWL_USERDATA, (LONG) p );

            p->tabScrollHWnd=CreateWindow(_T("SCROLLBAR"), NULL, 
                /*SBS_TOPALIGN |*/ SBS_HORZ | WS_VISIBLE | WS_CHILD, 
                0, 0, CW_USEDEFAULT, CW_USEDEFAULT, 
                hWnd, NULL, g_hInst, NULL); 
            //dropdownWnd=DoCreateComboControl(hWnd);
            //ShowWindow(p->getListBoxHWnd(), SW_SHOW);
            break;

        }
		case CLEARMESS:
		{int result=MessageBox(
				p->getHWnd(), 
				L"ќчистить лог?", 
				L"ќчистить", 
				MB_YESNO | MB_ICONWARNING);
		if (result==IDYES) Log::getInstance()->delet();
			//if (result==IDYES) {
			//	p->contact->messageList->clear();
			//	p->msgList->moveCursorEnd();
			}
			break;

    case WM_PAINT:

        {
            hdc = BeginPaint(hWnd, &ps);
            /*if (p->makeTabLayout) {
                p->tabDoLayout(hdc);
            }*/

            unsigned int activeTab=p->activeTab;

            for (unsigned int i=0; i < p->tabs.size(); i++) {
                if (i != activeTab) drawTab(hdc, p->xOffset, p->tabs[i], false);
            }

            int width=p->clientRect.right;

            HGDIOBJ old=SelectObject(hdc, GetStockObject(BLACK_PEN));
            MoveToEx(hdc, 0, tabHeight-1, NULL);
            LineTo(hdc, width, tabHeight-1);
            SelectObject(hdc, old);
            if (activeTab >= 0  &&  activeTab < p->tabs.size() )
                drawTab(hdc, p->xOffset, p->tabs[activeTab], true);

            RECT b={width-2*tabHeight, 0,  width-tabHeight, tabHeight};
            DrawFrameControl(hdc, &b, DFC_SCROLL, DFCS_SCROLLLEFT);
            b.left+=tabHeight; b.right+=tabHeight;
            DrawFrameControl(hdc, &b, DFC_SCROLL, DFCS_SCROLLRIGHT);

            EndPaint(hWnd, &ps);
        }

        break;
	case WM_KEYDOWN:
		smile_aktiv=40;
                if (wParam==VK_LEFT)    PostMessage(hWnd, WM_COMMAND, TabsCtrl::PREVTAB, 0);
                if (wParam==VK_RIGHT)   PostMessage(hWnd, WM_COMMAND, TabsCtrl::NEXTTAB, 0);
                break;
    case WM_LBUTTONDOWN:
        {	smile_aktiv=40;
            int mouseX=GET_X_LPARAM(lParam);
            int mouseY=GET_Y_LPARAM(lParam);

            int width=p->clientRect.right;

            if (mouseY >= tabHeight) break;

            if (mouseX > width - tabHeight) { 
                p->activeTab++; 
                if (p->activeTab == p->tabs.size()) p->activeTab--;
            } else if (mouseX > width - 2*tabHeight) {
                if (p->activeTab != 0) p->activeTab--;
            } else
            for (unsigned int i=0; i < p->tabs.size(); i++) {
                TabInfoRef tab=p->tabs[i];
                int tabX=p->xOffset+tab->tabXPos;
                if (mouseX < tabX) continue;
                if (mouseX > tabX+tab->tabWidth ) continue;
                p->activeTab=i;
                break;
            }
            InvalidateRect(p->getHWnd(), NULL, true);
            p->showActiveTab();

            SHRGINFO    shrg;
            shrg.cbSize = sizeof(shrg);
            shrg.hwndClient = hWnd;
            shrg.ptDown.x = LOWORD(lParam);
            shrg.ptDown.y = HIWORD(lParam);
            shrg.dwFlags = SHRG_RETURNCMD /*| SHRG_NOANIMATION*/;

            if (SHRecognizeGesture(&shrg) == GN_CONTEXTMENU) {
                p->processPopupMenu(false, LOWORD(lParam), HIWORD(lParam) );
            }
            break;
        }

    case WM_COMMAND:
        { int cmd=LOWORD(wParam);
            if (cmd==TabsCtrl::CLOSETAB) {
                //close current tab
                int nextTab=p->activeTab;
                int delTab=nextTab;

				
                p->activeTab++;
                if (p->activeTab>=(int)p->tabs.size()) {
                    nextTab--;
                    p->activeTab=nextTab;
                }
                p->showActiveTab(); //hide before delete
                p->tabs.erase(p->tabs.begin()+delTab);
                p->activeTab=nextTab;
                p->tabDoLayout();
                p->showActiveTab();
                InvalidateRect(p->getHWnd(), NULL, true);
                        }
            if (cmd==TabsCtrl::PREVTAB) {
                //go to prev tab
//                              SetScrollInfo(p->tabScrollHWnd,SB_LEFT,0,0);
                                if (p->activeTab > 0) {
                                        p->activeTab--;
                                        p->showActiveTab(); //hide before change
                                        p->tabDoLayout();
                                        p->showActiveTab();
                                        InvalidateRect(p->getHWnd(), NULL, true);
                                }


            }         
            if (cmd==TabsCtrl::NEXTTAB) {
                //go to next tab
//                              SetScrollInfo(p->tabScrollHWnd,SB_RIGHT,0,0);   
                                if ((p->activeTab+1) < (int)p->tabs.size()) {
                                        p->activeTab++; 
                                        p->showActiveTab(); //hide before change
                                        p->tabDoLayout();
                                        p->showActiveTab();
                                        InvalidateRect(p->getHWnd(), NULL, true);
                                }


                        }            
                        if (cmd==IDS_WINDOWS) {
                RECT rt;
                HWND parent=GetParent(p->getHWnd());
                GetWindowRect(parent, &rt);


                RECT rb;
                SendMessage(g_hWndMenuBar, TB_GETRECT, IDS_WINDOWS, (LPARAM)&rb);
                p->processPopupMenu(true, rb.left, rt.bottom);
            }
            return 0;
        }    
    case WM_MEASUREITEM:
        {
            LPMEASUREITEMSTRUCT mi=(LPMEASUREITEMSTRUCT)lParam;
            ODR * odr=(ODR *)(mi->itemData);
            mi->itemHeight=odr->getHeight();
            mi->itemWidth=odr->getWidth();
            return true;
        }
    case WM_DRAWITEM:
        {
            LPDRAWITEMSTRUCT di=(LPDRAWITEMSTRUCT) lParam;
            HBRUSH bgnd=CreateSolidBrush(GetBkColor(di->hDC));
            FillRect(di->hDC, &(di->rcItem), bgnd);
            DeleteObject(bgnd);
            ODR * odr=(ODR *)(di->itemData);
            odr->draw(di->hDC, di->rcItem,0);
            return TRUE;
        }

    case WM_SIZE: 
        { 
            int height=GET_Y_LPARAM(lParam);
            int width=GET_X_LPARAM(lParam);
            SetRect(&(p->clientRect), 0, 0, width, height);

            p->updateChildsLayout();

            break; 
        } 

        /*case WM_CTLCOLORSTATIC:
        case WM_CTLCOLORLISTBOX:
        case WM_CTLCOLOREDIT: 
        {
        //HGDIOBJ brush= GetStockObject(GRAY_BRUSH);
        //HGDIOBJ pen= GetStockObject(WHITE_PEN);
        SetBkColor(hdc, 0x808080);
        SetTextColor(hdc, 0xffffff);
        //SelectObject((HDC)wParam, brush);
        //SelectObject((HDC)wParam, pen);
        return (BOOL) GetStockObject(GRAY_BRUSH);
        break;
        }*/

    case WM_DESTROY:
        //TODO: Destroy all child data associated eith this window

        return 0;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}