From 796c8683fa8516f83c104bd40c6f35a4584cc4ca Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 16 Jan 2012 17:30:21 +0900 Subject: [PATCH] 2012/01/16 17:30:20 --- nlite.suo | Bin 51200 -> 53248 bytes nlite/nlite_chatData.cpp | 4 +- nlite/nlite_chatData.h | 6 ++- nlite/nlite_commentview.cpp | 107 +++++++++++++++++++++++++++++--------------- nlite/nlite_commentview.h | 41 ++++++++--------- 5 files changed, 96 insertions(+), 62 deletions(-) diff --git a/nlite.suo b/nlite.suo index bfa9185eeb8cc9efe8647f7897a60cd84ce43aec..bd74c3e04f0323f14f0d4d9fbbfa9fbfd4efad41 100644 GIT binary patch delta 1948 zcma)+e@s(X6vy9veJ!t0x)w_bSSeKJ#2-+ZKy)a-3Obqc%J|W_O&Ef9iEKbRhK#YI zbq=Sl^cXfZQ*_Q~rcrybxWylJGM#ZzP?nMTV`MIKo72st$#j2|omZ-~f0*nhpWJ)D z_uO;Od-vR9cS`I%k|VV&$%i^NN0G-c%nT$Kfg`MtykV<4Z@)EKPc^P>HnU08itFT{zyoS^uqR(3F>yVYmL^#?K-&MWT z#jRE{cN=0-hQ1>b)V=edmAfEkQgA#C0eyQi7`X_rM|033ErtT+Z171NIME?kWhOER zhh*=?UPap_$Wo*P5s+VLUc?3o$K&v^8(*Zr#fgGfF%xW2Wnxc#Q34D7Sw^raOW-Vr z2Pg-4@fST6vQ;5&b0A`a*>(-psAjT+p?NV9mQO%YDK0#U*QO~Mi&ax1XQFZCnXuJZ zftRD82@$C;R*-NLLe)1`> zPd@>!NvA=j_kus|0v*sd5x2q46A!5Mov@%MmHK8xaxkbn1LuwDPz^(|V#H%@YDs-0fCKrKlu8gX>!CH1T?ZEj2hcfjMy_=n^xaDq}aK&d~%T%F%9nWQzTM zBpxxHhqNi}u1p&#hqp2>$(aZgCn4iMElc1HDCk2(SsG4;dHQcw8w<+0)9J|O8UkF* zJer;T0im@E=CO1j*T{mmD;GxGtKnv)0_`RGa&;v0O0 zs-)V|s5`woZY@39-Lr7k#q|9J-wNia+ucPU@#-&`zK41`rD(5|doFBS@e7dKwH)&2 z8^BfJrS>IW0;QE+m(b6P;Z6)Q7E0tqd=uFrDz%w6v5=diB@EoCj0crP1-WG%(6OWm zo-Nn0RtcEP(;(NPftsS3Bn5~g2MmrT5KbnrZ48h_t<Pkgc%0 zVzO)5SuydXW<2d6eYorxuRfTlSaa#zvCeC8J2#gm|2Q}m8mlJID=UVH+PdYzgB?>x zUuW)2xD{Xf&Ysl3(xtj)qPc<)$e-NzwGi`R$V>SpMzm) z;OE*zDDA6&Zif#3UcXbi0(WZRuww?iYg~*kO$)=b?~r`jpMIUt=eG`X)J}&8X%8No z9X);k7Ev%C`w;f_I>A|&0Ny?s>A@^{lO}IFD5br-?n&WLN_xQQpPweeh$oY5f&1$_ z6=HZ}S69Zs8NQSz9FLSx>w#esNXDb%kJp delta 2004 zcmY+F4NOy46vy9veJw52t}UfZ1u0k^&aXnSfEM{G$oMP_khq92FcOCbSV89)R{Q{w zK&5u+8CMr#KCUxG->wE4VwnvrJ+pf5OL--G2A+F#{3q>Isea zY7lY$!e!jv7HJR)^Ms<+CzlHp2-NLkVPRNo0IMQPMq<$Qg1`-Kg$sr`gPdPEpT!?+ z5N6X*jdB@F2#r^ZSScQKO2Ip3PGHq!P48ZVYtBK>OS8Ow7S9xoK%{Ozi^!wS7pP)> zZYR7oH%+<{Ew#W!-E$SJKhH144zOQSf?tkSyOcWE1@f`{8tXW8H z8BXHZ)2+SYI}sh7a=bdAzI!6m_fa>0=~Gh<%djUd+?FgEvlbk_Zn%|vWrx1-mT_yB%9n#Cyj&XQ}J#j-L~`1G%Zu>MGhOfggG`dUIl zfpncC4j?Ui;JXvO;My;R@cr$y@W=<`7Qg8{aQO_zFZ2zVSVQV9tLx zU!t>^?Mw=@nJH#U@wW;~^>(y!(JE$2m^ZM7relT9#M+p`n6ZHCm~wnB_V~AXLWobf znZ~bu!KGeZe%Yn!O<+3ose$9XZ|2>+&EJBj!CdJ=uxaIl0MYt`MXQIn^g_@|LtsTh z98@0Bz|;XRXf=poQ{WQ7azVZa(xkznbVGA~W)&vXIX1K41H-qDCO;Z_@FwS2Y@|j< zjaX2hZ~?9D*|Z-nwW9qZV(#Nh7&X3EDu!h3YR^VO)}_+afj$v+cE%AJH|mshcC*yh zl1oTEevoPyv#Uu9JUnp_obBHD1?r$EUk$o;E$CbAP|>Dia~T+v=Fs*&hX{K6?O^EN z2l``nu*)?V8e)k5{C%kEP6p+6_3_&U1VZ*U!u4)DShi~M&x^mM!| mail; //ƒ[ƒ‹ƒRƒ}ƒ“ƒh ULONG_PTR thread; //ƒXƒŒƒbƒh”ԍ† BOOL selectFlag; //‘I‘ðó‘Ô + UINT_PTR height; //•\Ž¦—̈æ‚̍‚‚³ public: CChatData(): @@ -211,7 +215,7 @@ namespace nlite{ VOID SetCurSel(INT_PTR cursel); - VOID OnChatReceve(NicoLiveChat_P chatData, UINT_PTR count); + VOID OnChatReceve(NicoLiveChat_P chatData, UINT_PTR count,CCommentListWindow &listWindow); reference GetChatAt(UINT_PTR no); diff --git a/nlite/nlite_commentview.cpp b/nlite/nlite_commentview.cpp index 404c670..f3a03c6 100644 --- a/nlite/nlite_commentview.cpp +++ b/nlite/nlite_commentview.cpp @@ -34,14 +34,6 @@ CCommentView::~CCommentView(){ -VOID CCommentView::Lock(){ - ccs.Lock(); -} - -VOID CCommentView::Unlock(){ - ccs.Unlock(); -} - VOID CCommentView::OnConnect(){ m_commentListWindow.SetRedraw(FALSE); @@ -51,7 +43,7 @@ VOID CCommentView::OnConnect(){ vScrollInfo.cbSize = sizeof(vScrollInfo); vScrollInfo.fMask = SIF_RANGE; this->SetScrollInfo(SB_VERT,&vScrollInfo,TRUE); - + viewStartHeight = 0; m_commentListWindow.SetRedraw(TRUE); @@ -131,7 +123,7 @@ LRESULT CCommentView::OnHeaderEndTrack(LPNMHDR lParam){ if(lParam->hwndFrom == m_header.m_hWnd){ - + m_commentListWindow.SetRedraw(FALSE); SCROLLINFO vScrollInfo = {0}; vScrollInfo.fMask = SIF_PAGE | SIF_POS | SIF_RANGE; this->GetScrollInfo(SB_VERT,&vScrollInfo); @@ -143,27 +135,44 @@ LRESULT CCommentView::OnHeaderEndTrack(LPNMHDR lParam){ LPNMHEADER lpNmHdr = (LPNMHEADER )lParam; m_header.SetItem(lpNmHdr->iItem,lpNmHdr->pitem); + + + + - m_commentListWindow.Invalidate(); if(scrollFlag == TRUE){ - this->SendMessageW(WM_VSCROLL,MAKEWORD(SB_BOTTOM,0),0); + this->SendMessageW(WM_VSCROLL,MAKELONG(SB_BOTTOM,0),0); } INT_PTR itemCount = m_header.GetItemCount(); RECT itemSizeRect; INT_PTR nMax = 0; - for(INT_PTR imtemIndex = 0;imtemIndex < itemCount;imtemIndex++){ - m_header.GetItemRect(imtemIndex,&itemSizeRect); + for(INT_PTR itemIndex = 0;itemIndex < itemCount;itemIndex++){ + m_header.GetItemRect(itemIndex,&itemSizeRect); nMax += itemSizeRect.right - itemSizeRect.left; } INT_PTR nMin = 0; this->SetScrollRange(SB_HORZ,nMin,nMax,TRUE); DecisionHorzSize(); + + + auto begin = commentlist.begin(); + + auto end = commentlist.end(); + + + for(;begin != end;++begin){ + + begin->height = m_commentListWindow.CalcItemHeight(*begin); + } + + m_commentListWindow.SetRedraw(TRUE); + m_commentListWindow.Invalidate(); } @@ -171,7 +180,7 @@ LRESULT CCommentView::OnHeaderEndTrack(LPNMHDR lParam){ } VOID CCommentView::OnChatReceve(NicoLiveChat_P chat,UINT_PTR commnetCountSum){ - commentlist.OnChatReceve(chat,commnetCountSum); + commentlist.OnChatReceve(chat,commnetCountSum,this->m_commentListWindow); return; } @@ -199,9 +208,9 @@ VOID CCommentView::OnChatReceveSettle(UINT_PTR chatNo,UINT_PTR commentCountSum){ vScrollInfo.nMax = commentCountSum; vScrollInfo.nPage = m_commentListWindow.CalcScrollPage(); + this->SetScrollInfo(SB_VERT,&vScrollInfo); - - this->GetScrollInfo(SB_VERT,&vScrollInfo); + if(scrollFlag == TRUE){ @@ -218,12 +227,7 @@ static UCHAR getrgb(){ return rgb; } -LRESULT CCommentView::OnListBoxDoubleClick(UINT uNotifyCode, int nID, CWindow wndCtl){ - - - return 0; -} @@ -371,6 +375,8 @@ VOID CCommentView::OnVScroll(INT_PTR loWParam,SHORT hiWParam,HWND lParam){ SCROLLINFO vScrollInfo = {0}; vScrollInfo.fMask = SIF_ALL; + + this->GetScrollInfo(SB_VERT,&vScrollInfo); switch(loWParam){ @@ -427,16 +433,19 @@ VOID CCommentView::OnVScroll(INT_PTR loWParam,SHORT hiWParam,HWND lParam){ } - dy = max(-1 * vScrollInfo.nPos, min(dy, vScrollInfo.nMax - vScrollInfo.nPos)); + dy = max(-1 * vScrollInfo.nPos, min(dy, vScrollInfo.nMax - (vScrollInfo.nPos + (INT_PTR)vScrollInfo.nPage))); if(dy != 0){ vScrollInfo.nPos += dy; + viewStartHeight = vScrollInfo.nPos; this->SetScrollInfo(SB_VERT,&vScrollInfo); + m_commentListWindow.Invalidate(); } + return; } @@ -498,13 +507,15 @@ VOID CCommentView::DecisionHorzSize(){ } + + // //ƒRƒƒ“ƒgƒrƒ…[ƒNƒ‰ƒX“à•”ƒŠƒXƒgƒNƒ‰ƒX //////////////////////////////////////////////////////////////////// -CCommentListWindow::CCommentListWindow(CCommentView &in_self):self(in_self){ - -} +CCommentListWindow::CCommentListWindow(CCommentView &in_self): + self(in_self) +{} CCommentListWindow::~CCommentListWindow(){ @@ -535,15 +546,13 @@ VOID CCommentListWindow::OnPaint(HDC hdc){ - - SCROLLINFO vScrollInfo = {0}; - vScrollInfo.fMask = SIF_ALL; - self.GetScrollInfo(SB_VERT,&vScrollInfo); - if(commentList.Size() > (UINT_PTR)vScrollInfo.nPos){ + + + if(commentList.Size() > (UINT_PTR)self.viewStartHeight){ CCommentList::iterator chatData = commentList.begin(); - std::advance(chatData,vScrollInfo.nPos); + std::advance(chatData,self.viewStartHeight); CBrush baseBkBrush; baseBkBrush.CreateSolidBrush(self.viewproperty.backColor); m_memoryDC.FillRect(&listRect,baseBkBrush); @@ -572,6 +581,8 @@ VOID CCommentListWindow::OnPaint(HDC hdc){ HDC selfDC = this->BeginPaint(&ps); ::BitBlt(selfDC,0,0,windowRect.right,windowRect.bottom,m_memoryDC,0,0,SRCCOPY); this->EndPaint(&ps); + + return; } @@ -587,7 +598,7 @@ VOID CCommentListWindow::OnSize(UINT wParam, _WTYPES_NS::CSize &windowSize){ self.SetScrollInfo(SB_VERT,&vScrollInfo); if(scrollFlag == TRUE){ - self.SendMessageW(WM_VSCROLL,MAKEWORD(SB_BOTTOM,0),0); + self.SendMessageW(WM_VSCROLL,MAKELONG(SB_BOTTOM,0),0); } return; } @@ -607,7 +618,7 @@ UINT_PTR CCommentListWindow::CalcScrollPage(){ CCommentList::reverse_iterator rend = self.commentlist.rend(); for(;rbegin != rend;++rbegin){ - height += CalcItemHeight(*rbegin); + height += rbegin->height; rslt++; if(height > clientRect.bottom)goto overclientrect; @@ -801,8 +812,17 @@ end: return lineNo; } + + VOID CCommentListWindow::OnLButtonDown(UINT wParam, _WTYPES_NS::CPoint &point){ + + + + + + this->SetFocus(); + if(self.commentlist.empty() == TRUE)return; auto curselItem = self.commentlist.GetCurSelItem(); if(curselItem != self.commentlist.end()){ curselItem->selectFlag = FALSE; @@ -819,7 +839,9 @@ VOID CCommentListWindow::OnLButtonDbClk(UINT wParam, _WTYPES_NS::CPoint &point){ - + this->SetFocus(); + if(self.commentlist.empty() == TRUE)return; + auto chatData = self.commentlist.GetChatAt(CalcClickLine(point.y)); COLORREF bkColor; if(chatData.listenerData->originBkFlag == FALSE){ @@ -853,9 +875,11 @@ VOID CCommentListWindow::OnLButtonDbClk(UINT wParam, _WTYPES_NS::CPoint &point){ chatData.listenerData->SetBkColor(bkColor); this->Invalidate(TRUE); + + + - return; } @@ -863,3 +887,14 @@ LRESULT CCommentListWindow::OnEraseBkGnd(HDC lparam){ return TRUE; } + +LRESULT CCommentListWindow::OnMouseWheel(UINT loWparam,SHORT hiWparam,CPoint &point){ + + + self.SendMessageW(WM_VSCROLL,MAKELONG(hiWparam < 0 ? SB_PAGEDOWN : SB_PAGEUP ,0),0); + + return 0; +} + + + diff --git a/nlite/nlite_commentview.h b/nlite/nlite_commentview.h index a4a4b11..8effa0b 100644 --- a/nlite/nlite_commentview.h +++ b/nlite/nlite_commentview.h @@ -27,8 +27,7 @@ namespace nlite{ CCommentView &self; CBitmap m_bitmap; CDC m_memoryDC; - - + struct ColorList{ enum type{ selectBack = RGB(255,240,240), @@ -51,6 +50,7 @@ namespace nlite{ MSG_WM_LBUTTONDOWN(OnLButtonDown) MSG_WM_CREATE(OnCreate) MSG_WM_ERASEBKGND(OnEraseBkGnd) + MSG_WM_MOUSEWHEEL(OnMouseWheel) MSG_WM_PAINT(OnPaint) MSG_WM_SIZE(OnSize) END_MSG_MAP() @@ -75,6 +75,12 @@ namespace nlite{ /// UINT_PTR CalcScrollPage(); + /// + ///s‚̍‚‚³‚ð–â‚¢‡‚킹 + /// + UINT_PTR CalcItemHeight(CChatData &chatData); + + //ƒvƒ‰ƒCƒx[ƒgŠÖ” private: @@ -84,10 +90,7 @@ namespace nlite{ VOID DrawItem(CDC &dc,RECT &rc,CChatData &chatData); - /// - ///s‚̍‚‚³‚ð–â‚¢‡‚킹 - /// - UINT_PTR CalcItemHeight(CChatData &chatData); + /// ///ƒNƒŠƒbƒN‚µ‚½s‚ðŒvŽZ @@ -127,6 +130,12 @@ namespace nlite{ ///”wŒi“h‚è‚‚Ԃµ /// LRESULT OnEraseBkGnd(HDC lparam); + + /// + ///ƒ}ƒEƒXƒzƒC[ƒ‹ + /// + LRESULT OnMouseWheel(UINT loWparam,SHORT hiWparam,CPoint &point); + }; class CCommentView:public CWindowImpl{ @@ -153,11 +162,11 @@ namespace nlite{ CHeaderCtrl m_header; CCommentListWindow m_commentListWindow; - CComAutoCriticalSection ccs; + CComAutoCriticalSection vScrollCS; CStreamStatus streamStatus; CCommentList commentlist; CommentViewProperty viewproperty; - + INT_PTR viewStartHeight; HFONT hHeaderFontNew; @@ -203,7 +212,6 @@ namespace nlite{ MSG_WM_HSCROLL(OnHScroll) MSG_WM_VSCROLL(OnVScroll) MSG_WM_ERASEBKGND(OnEraseBkgnd) - COMMAND_CODE_HANDLER_EX(LBN_DBLCLK,OnListBoxDoubleClick) NOTIFY_CODE_HANDLER_EX(HDN_ENDTRACK ,OnHeaderEndTrack) NOTIFY_CODE_HANDLER_EX(HDN_ENDDRAG ,OnHeaderEndDrag) END_MSG_MAP() @@ -252,16 +260,6 @@ namespace nlite{ //ƒvƒ‰ƒCƒx[ƒgŠÖ” private: - - /// - ///ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“ƒƒbƒN - /// - VOID Lock(); - - /// - ///ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“ƒƒbƒN‰ðœ - /// - VOID Unlock(); /// @@ -313,10 +311,6 @@ namespace nlite{ /// LRESULT OnHeaderEndDrag(LPNMHDR lParam); - /// - ///ƒŠƒXƒgƒ{ƒbƒNƒXƒ_ƒuƒ‹ƒNƒŠƒbƒNŽž‚̏ˆ— - /// - LRESULT OnListBoxDoubleClick(UINT uNotifyCode, int nID, CWindow wndCtl); /// ///‰¡ƒXƒNƒ[ƒ‹Žž‚̏ˆ— @@ -336,6 +330,7 @@ namespace nlite{ + }; -- 2.11.0