OSDN Git Service

69c83c974a29305480206d1f16d378a9c42b8bbd
[nlite/nlite.git] / nlite / nlite_commentWrite.cpp
1 #include "stdafx.h"
2 #include "nlite_include.h"
3
4 namespace nlite{
5
6
7 const static SIZE commentColorBoxSize = {35,0};
8
9 const static LPCTSTR ANONYMOUS_MAILCOMMAND = TEXT("184");
10 const static LPCTSTR ANONYMOUS_BOTTONSTRING = ANONYMOUS_MAILCOMMAND;
11
12 const static LPCTSTR WRITE_BOTTONSTRING = TEXT("\8f\91\82«\8d\9e\82Ý");
13 const static LPCTSTR CHECKBUTTON_HIDDENSTRING = TEXT(" ");
14
15 const static RECT COMMENTWRITEWINDOW_SEPARATEFSIZE = {0,5,0,5};
16 const static UINT_PTR COMMENTWRITEWINDOW_SIDESEPARATESIZE = 5;
17 const static UINT_PTR INIT_COMMENTWRITE_MAXLENGTH = 60;
18 const static UINT_PTR CHECKBUTTON_SUBSCRIPT_HEIGHT = 10;
19 const static LPCTSTR DEFAULT_COMMENTCOLOR = TEXT("white");
20 const static LPCTSTR DEFAULT_COMMENTSIZE = TEXT("medium");
21 const static LPCTSTR DEFAULT_COMMENTPOS = TEXT("naka");
22 const static COLORREF MAX_COLOR = 0xFFFFFF;
23
24
25
26 namespace generalUser{
27         const CommentColorInfo COMMENT_COLORLIST[] = {
28                 {DEFAULT_COMMENTCOLOR,PALETTERGB(0xFF,0xFF,0xFF)},      //\94\92
29                 {TEXT("red"),PALETTERGB(0xFF,0x00,0x00)},                       //\90Ô
30                 {TEXT("pink"),PALETTERGB(0xFF,0x80,0x80)},                      //\83s\83\93\83N
31                 {TEXT("orange"),PALETTERGB(0xFF,0xC0,0x00)},            //\83I\83\8c\83\93\83W
32                 {TEXT("yellow"),PALETTERGB(0xFF,0xFF,0x00)},            //\89©\90F
33                 {TEXT("green"),PALETTERGB(0x00,0xFF,0x00)},                     //\97Î
34                 {TEXT("cyan"),PALETTERGB(0x00,0xFF,0xFF)},                      //\8a¦\90F
35                 {TEXT("blue"),PALETTERGB(0x00,0x00,0xFF)},                      //\90Â
36                 {TEXT("purple"),PALETTERGB(0xC0,0x00,0xFF)},            //\8e\87
37         
38         };
39
40         const CommentSizeInfo COMMENT_SIZELIST[] = {
41                 {TEXT("\95\81\92Ê\81@"),DEFAULT_COMMENTSIZE},                           //\95\81\92Ê\83T\83C\83Y
42                 {TEXT("\8f¬\81@"),TEXT("small")}                                            //\8f¬\83T\83C\83Y
43         };
44
45
46         const CommentPosInfo COMMENT_POSLIST[] = {
47                 {TEXT("\92Ê\8fí\81@"),DEFAULT_COMMENTPOS}                                     //\92Ê\8fí\95\\8e¦
48         };
49 }
50
51 namespace premiumUser{
52
53         const CommentColorInfo COMMENT_COLORLIST[] = {
54                 {TEXT("black"),PALETTERGB(0x00,0x00,0x00)},                     //\8d\95
55                 {TEXT("white2"),PALETTERGB(0xCC,0xCC,0x99)},            //\94\92\82»\82Ì\82Q
56                 {TEXT("red2"),PALETTERGB(0xCC,0x00,0x33)},                      //\90Ô\82»\82Ì\82Q
57                 {TEXT("pink2"),PALETTERGB(0xFF,0x33,0xCC)},                     //\83s\83\93\83N\82»\82Ì\82Q
58                 {TEXT("orange2"),PALETTERGB(0xFF,0x66,0x00)},           //\83I\83\8c\83\93\83W\82»\82Ì\82Q
59                 {TEXT("yellow2"),PALETTERGB(0x99,0x99,0x00)},           //\89©\90F\82»\82Ì\82Q
60                 {TEXT("green2"),PALETTERGB(0x00,0xCC,0x66)},            //\97Î\82»\82Ì\82Q
61                 {TEXT("cyan2"),PALETTERGB(0x00,0xCC,0xCC)},                     //\8a¦\90F\82»\82Ì\82Q
62                 {TEXT("blue2"),PALETTERGB(0x33,0x99,0xFF)},                     //\90Â\82»\82Ì\82Q
63                 {TEXT("purple2"),PALETTERGB(0x66,0x33,0xCC)}            //\8e\87\82»\82Ì\82Q
64         //      {TEXT("black2"),PALETTERGB(0x66,0x66,0x66)}                     //\8d\95\82»\82Ì\82Q\82Í\82È\82¢\81H
65         };
66
67         const CommentSizeInfo COMMENT_SIZELIST[] = {
68                 {TEXT("\91å\81@"),TEXT("big")}                                                      //\91å\83T\83C\83Y
69         };
70
71
72
73         const CommentPosInfo COMMENT_POSLIST[] = {
74                 {TEXT("\89º\81@"),TEXT("shita")},                                           //\89º\82É\95\\8e¦
75                 {TEXT("\8fã\81@"),TEXT("ue")}                                                       //\8fã\82É\95\\8e¦
76         };
77 }
78
79
80
81
82
83 template<typename T>
84 static VOID addItemList(CComboBox &combo,T * colorList,UINT_PTR length){
85
86         UINT_PTR startItemcount = combo.GetCount();
87         length+= startItemcount;
88         for(UINT_PTR index = startItemcount; index < length;index++){
89
90                 combo.AddString(colorList[index - startItemcount].name);
91                 combo.SetItemDataPtr(index,(LPVOID)&colorList[index - startItemcount]);
92
93         }
94
95         return;
96 }
97
98
99
100 template<typename T>
101 static UINT_PTR CalcComboBoxWidth(CComboBox &combo){
102
103         CPaintDC pdc(combo);
104         SIZE size;
105         UINT_PTR rslt = 0;
106         UINT_PTR itemCount = combo.GetCount();
107         LPCTSTR name;
108         for(UINT_PTR index = 0;index < itemCount;index++){
109                 name = ((T*)combo.GetItemDataPtr(index))->name;
110                 ::GetTextExtentPoint32(pdc,name,_tcslen(name),&size);
111                 rslt = rslt < (UINT_PTR)size.cx ? size.cx : rslt;
112         }
113
114         return rslt;
115 }
116
117 CCommentWriteWindow::CCommentWriteWindow(CNicoLiveStream &in_nicoLiveStream):
118 commentWriteHeight(0),
119 commentWriteInternalHeight(0),
120 commentWriteMaxLength(INIT_COMMENTWRITE_MAXLENGTH),
121 nicoLiveStream(in_nicoLiveStream),
122 commentSubEdit(*this),
123 streamTime(0)
124 {}
125
126
127 UINT_PTR CCommentWriteWindow::GetHeight(){
128
129         return commentWriteHeight + infoDispHeight - COMMENTWRITEWINDOW_SEPARATEFSIZE.top;
130 }
131
132
133 LRESULT CCommentWriteWindow::OnCreate(LPCREATESTRUCT lpReateStruct){
134
135         //\83E\83B\83\93\83h\83E\8dì\90¬\8f\88\97\9d
136
137         commentPosBox.Create(m_hWnd,0,WC_COMBOBOX,WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST ,0,COMMENTPOS_BOX);
138         commentSizeBox.Create(m_hWnd,0,WC_COMBOBOX,WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,0,COMMENTSIZE_BOX);
139         commentColorBox.Create(m_hWnd,0,WC_COMBOBOX,WS_CHILD | WS_VISIBLE  | CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED        ,0,COMMENTCOLOR_BOX);
140         anonymousButton.Create(m_hWnd,0,WC_BUTTON,WS_CHILD | WS_VISIBLE | BS_CHECKBOX | BS_AUTOCHECKBOX ,0,ANONYMOUS_BUTTON);
141         commentSubEdit.Create(m_hWnd,0,WC_EDIT,WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,0,COMMENT_EDIT);
142         
143         commentWriteButton.Create(m_hWnd,0,WC_BUTTON,WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,0,COMMENTWRITE_BOTTON);
144         commentPosBox.SetFont(AtlGetDefaultGuiFont());
145         commentSizeBox.SetFont(AtlGetDefaultGuiFont());
146         commentColorBox.SetFont(AtlGetDefaultGuiFont());
147
148         
149         anonymousButton.SetWindowTextW(CHECKBUTTON_HIDDENSTRING);
150         anonymousButton.SetFont(AtlGetDefaultGuiFont());
151         commentSubEdit.SetFont(AtlGetDefaultGuiFont());
152         commentSubEdit.SetLimitText(commentWriteMaxLength);
153         commentWriteButton.SetWindowTextW(WRITE_BOTTONSTRING);
154         commentWriteButton.SetFont(AtlGetDefaultGuiFont());
155         commentSubEdit.SetWindowTextW(TEXT(""));
156         
157         addItemList(commentColorBox,generalUser::COMMENT_COLORLIST,ARRAY_LENGTH(generalUser::COMMENT_COLORLIST));
158         addItemList(commentSizeBox,generalUser::COMMENT_SIZELIST,ARRAY_LENGTH(generalUser::COMMENT_SIZELIST));
159         addItemList(commentPosBox,generalUser::COMMENT_POSLIST,ARRAY_LENGTH(generalUser::COMMENT_POSLIST));
160         commentColorBox.SetCurSel(0);
161         commentSizeBox.SetCurSel(0);
162         commentPosBox.SetCurSel(0);
163         CFont font;
164         font = AtlGetDefaultGuiFont();
165         CPaintDC pdc(*this);
166         SIZE thisSize;
167         LPCTSTR sample = TEXT(" ");
168
169         GetTextExtentPoint32(pdc,sample,_tcslen(sample),&thisSize);
170         commentWriteHeight = thisSize.cy + (CHECKBUTTON_SUBSCRIPT_HEIGHT / 2) + COMMENTWRITEWINDOW_SEPARATEFSIZE.top + COMMENTWRITEWINDOW_SEPARATEFSIZE.bottom;
171         infoDispHeight = commentWriteHeight;
172         commentWriteInternalHeight = commentWriteHeight - (COMMENTWRITEWINDOW_SEPARATEFSIZE.top + COMMENTWRITEWINDOW_SEPARATEFSIZE.bottom);
173
174         LOGFONT anonymousLogFont = {0};
175         anonymousLogFont.lfHeight = CHECKBUTTON_SUBSCRIPT_HEIGHT;
176         anonymousLogFont.lfCharSet = SHIFTJIS_CHARSET;
177
178         anonymousFont.CreateFontIndirect(&anonymousLogFont);
179
180         CFontHandle f = AtlGetDefaultGuiFont();
181         LOGFONT timeLogFont;
182         f.GetLogFont(timeLogFont);
183         
184         timeLogFont.lfWeight = FW_BOLD;
185         
186         timeFont.CreateFontIndirectW(&timeLogFont);
187
188
189         return 0;
190 }
191
192 VOID CCommentWriteWindow::OnDestroy(){
193         commentPosBox.DestroyWindow();
194         commentSizeBox.DestroyWindow();
195         commentColorBox.DestroyWindow();
196         anonymousButton.DestroyWindow();
197         commentSubEdit.DestroyWindow();
198         commentWriteButton.DestroyWindow();
199
200 }
201
202
203
204 LRESULT CCommentWriteWindow::OnSize(UINT wParam,SIZE lParam){
205         ChangeSize(lParam);
206         return 0;
207 }
208 VOID CCommentWriteWindow::OnPaint(HDC hdc){
209
210         CPaintDC pdc(*this);
211         RECT clientRect;
212         this->GetClientRect(&clientRect);
213
214         pdc.FillRect(&clientRect,COLOR_BTNFACE);
215
216         
217         
218
219         pdc.SetBkColor(GetSysColor(COLOR_BTNFACE));
220         if(streamTime != 0){
221
222                 RECT timeStringRect;
223                 
224                 TCHAR timeString[LENGTH_256];
225                 _tcscpy(timeString,TEXT("\8co\89ß\8e\9e\8aÔ:"));
226                 LPTSTR timePtr = timeString + _tcslen(timeString);
227                 time_t dispTime = static_cast<time_t>(difftime(streamTime,nicoLiveStream.GetStartTime()));
228                 LPTSTR timeFormat;
229                 BOOL yetStartFlag = FALSE;
230                 if(dispTime < 0){
231                         yetStartFlag = TRUE;
232                         dispTime = abs(dispTime);
233                 }
234
235                 tm dispTimeStruct = *gmtime(&dispTime);
236
237                 if(dispTimeStruct.tm_hour > 0 && yetStartFlag == TRUE){
238
239                         timeFormat = TEXT("-%H:%M:%S");
240
241                 } else if(dispTimeStruct.tm_hour <= 0 && yetStartFlag == TRUE){
242
243                         timeFormat = TEXT("   -%M:%S");
244
245                 } else if(dispTimeStruct.tm_hour > 0){
246
247                         timeFormat = TEXT(" %H:%M:%S");
248
249                 }else {
250                 
251                         timeFormat = TEXT("    %M:%S");
252
253                 }
254
255                 _tcsftime(timePtr,ARRAY_LENGTH(timeString) - _tcslen(timeString),timeFormat,&dispTimeStruct);
256
257                 INT_PTR len = _tcslen(timeString);
258                 pdc.SelectFont(timeFont);
259
260                 
261                 timeStringRect.top = COMMENTWRITEWINDOW_SEPARATEFSIZE.top;
262                 timeStringRect.left = COMMENTWRITEWINDOW_SIDESEPARATESIZE;
263                 timeStringRect.bottom =timeStringRect.top;
264                 timeStringRect.right = timeStringRect.bottom;
265                 pdc.DrawTextW(timeString,len,&timeStringRect,DT_CALCRECT);
266                 pdc.DrawTextW(timeString,len,&timeStringRect,0);
267         }
268
269
270         RECT anonymousRect;
271         SIZE anonymousStringSize;
272
273         anonymousButton.GetWindowRect(&anonymousRect);
274         CPoint anonymousPoint(anonymousRect.left,anonymousRect.top);
275         ::ScreenToClient(*this,&anonymousPoint);
276         anonymousRect.right -= anonymousRect.left;
277         anonymousRect.bottom -= anonymousRect.top;
278         anonymousRect.left = anonymousPoint.x;
279         anonymousRect.top = anonymousPoint.y + anonymousRect.bottom;
280
281
282         ::GetTextExtentPoint32(pdc,ANONYMOUS_BOTTONSTRING,_tcslen(ANONYMOUS_BOTTONSTRING),&anonymousStringSize);
283         anonymousRect.right = anonymousRect.left + anonymousStringSize.cx;
284         anonymousRect.bottom = anonymousRect.top + anonymousStringSize.cy;
285
286         
287         pdc.SelectFont(anonymousFont);
288         
289         pdc.DrawText(ANONYMOUS_BOTTONSTRING,_tcslen(ANONYMOUS_BOTTONSTRING),&anonymousRect,0);
290         
291         return;
292 }
293
294 static VOID EnterChatBox(LPVOID userData){
295
296         
297         ((CSubChatEdit*)userData)->SetReadOnly(TRUE);
298         Sleep(3000);
299         ((CSubChatEdit*)userData)->AgreeEnter();
300
301         _endthread();
302         return;
303 }
304
305 BOOL CCommentWriteWindow::SendChat(){
306
307         _beginthread(EnterChatBox,0,this);
308         
309         CCommentMaker commentMaker;
310         std::vector<TCHAR> chat(commentSubEdit.GetWindowTextLengthW() + 1);
311
312
313         commentSubEdit.GetWindowTextW(&chat[0],chat.size());
314         commentMaker.SetChatString(&chat[0]);
315         if(this->anonymousButton.GetCheck() == BST_CHECKED){
316
317                 commentMaker.AddMail(ANONYMOUS_MAILCOMMAND);
318         }
319         INT_PTR sizeIndex = commentSizeBox.GetCurSel();
320         if(sizeIndex == CB_ERR)sizeIndex = 0;
321         auto &rCommentSizeInfo = *(CommentSizeInfo*)commentSizeBox.GetItemDataPtr(sizeIndex);
322
323         if(_tcscmp(rCommentSizeInfo.userData,DEFAULT_COMMENTSIZE) != 0){
324
325                 commentMaker.AddMail(rCommentSizeInfo.userData);
326
327         }
328         INT_PTR posIndex = commentPosBox.GetCurSel();
329         if(posIndex == CB_ERR)posIndex = 0;
330         auto &rCommentPosInfo = *(CommentPosInfo*)commentPosBox.GetItemDataPtr(posIndex);
331
332         if(_tcscmp(rCommentPosInfo.userData,DEFAULT_COMMENTPOS) != 0){
333
334                 commentMaker.AddMail(rCommentPosInfo.userData);
335         }
336
337         INT_PTR colorIndex = commentColorBox.GetCurSel();
338         if(colorIndex == CB_ERR)colorIndex = 0;
339         auto &rCommentColorInfo = *(CommentColorInfo*)commentColorBox.GetItemDataPtr(colorIndex);
340
341         if(_tcscmp(rCommentColorInfo.name,DEFAULT_COMMENTCOLOR) != 0){
342
343                 commentMaker.AddMail(rCommentColorInfo.name);
344         }
345
346
347         BOOL rslt = FALSE;
348         NLIB_RESULT code = nicoLiveStream.SendChat(commentMaker);
349
350         switch(code){
351
352         case NLIB_ERR_OK:
353
354                 rslt = TRUE;
355                 this->commentSubEdit.SetWindowText(TEXT(""));
356                 goto end;
357
358         case NLIB_ERR_NOT_LIVECONNECT:
359                 
360                 ::MessageBox(*this,NLIB_GetErrorMessage(code),TEXT("\83R\83\81\83\93\83g\8f\91\82«\8d\9e\82Ý\83G\83\89\81["),MB_ICONERROR | MB_OK);
361                 commentSubEdit.AgreeEnter();
362                 break;
363
364         default:
365                 UnexpectedErrorMessageShow(TEXT("\83R\83\81\83\93\83g\8f\91\82«\8d\9e\82Ý\92\86\82É"),NLIB_GetErrorMessage(code),__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
366                 commentSubEdit.AgreeEnter();
367                 break;
368
369         }
370
371
372         rslt = FALSE;
373
374         
375 end:
376
377
378         return rslt;
379 }
380
381 VOID CCommentWriteWindow::OnChatReceveStart(CNicoLiveStream &nicoLiveStream,NicoLiveThreadComment_P threadComment){
382         
383         this->ShowWindow(SW_HIDE);
384         this->commentColorBox.ResetContent();
385         this->commentPosBox.ResetContent();
386         this->commentSizeBox.ResetContent();
387
388         addItemList(commentColorBox,generalUser::COMMENT_COLORLIST,ARRAY_LENGTH(generalUser::COMMENT_COLORLIST));
389         addItemList(commentSizeBox,generalUser::COMMENT_SIZELIST,ARRAY_LENGTH(generalUser::COMMENT_SIZELIST));
390         addItemList(commentPosBox,generalUser::COMMENT_POSLIST,ARRAY_LENGTH(generalUser::COMMENT_POSLIST));
391
392
393         if(nicoLiveStream.IsPremium() == TRUE){
394
395                 addItemList(commentColorBox,premiumUser::COMMENT_COLORLIST,ARRAY_LENGTH(premiumUser::COMMENT_COLORLIST));
396                 addItemList(commentSizeBox,premiumUser::COMMENT_SIZELIST,ARRAY_LENGTH(premiumUser::COMMENT_SIZELIST));
397                 addItemList(commentPosBox,premiumUser::COMMENT_POSLIST,ARRAY_LENGTH(premiumUser::COMMENT_POSLIST));
398
399         }
400         this->commentColorBox.SetCurSel(0);
401         this->commentPosBox.SetCurSel(0);
402         this->commentSizeBox.SetCurSel(0);
403
404         
405
406         this->ShowWindow(SW_SHOW);
407         this->streamTime = threadComment->server_time;
408         this->SetTimer(TIMER_ID,1000,NULL);
409         
410
411
412         return;
413 }
414
415 VOID CCommentWriteWindow::ChangeSize(SIZE &size){
416
417         SIZE commentAnonymousButtonSize;
418         SIZE commentWriteButtonSize;
419         commentWriteButton.GetIdealSize(&commentWriteButtonSize);
420         anonymousButton.GetIdealSize(&commentAnonymousButtonSize);
421
422         RECT commentPosBoxRect;
423         RECT commentSizeBoxRect;
424         RECT commentColorBoxRect;
425         RECT anonymousButtonRect;
426         RECT commentEditRect;
427         RECT commentWriteButtonRect;
428
429         RECT thisWindowRect;
430
431         UINT_PTR writeSpaceHeight = COMMENTWRITEWINDOW_SEPARATEFSIZE.top * 2 + commentWriteInternalHeight;
432         this->GetWindowRect(&thisWindowRect);
433
434         commentPosBoxRect.left = COMMENTWRITEWINDOW_SIDESEPARATESIZE;
435         this->commentPosBoxCS.Lock();
436         commentPosBoxRect.right = commentPosBoxRect.left + CalcComboBoxWidth<CommentPosInfo>(commentPosBox);
437         this->commentPosBoxCS.Unlock();
438
439         commentSizeBoxRect.left = commentPosBoxRect.right + COMMENTWRITEWINDOW_SIDESEPARATESIZE;
440         this->commentSizeBoxCS.Lock();
441         commentSizeBoxRect.right = commentSizeBoxRect.left + CalcComboBoxWidth<CommentSizeInfo>(commentSizeBox);
442         this->commentSizeBoxCS.Unlock();
443
444         commentColorBoxRect.left = commentSizeBoxRect.right + COMMENTWRITEWINDOW_SIDESEPARATESIZE;
445         commentColorBoxRect.right = commentColorBoxRect.left + commentColorBoxSize.cx;
446
447         CDC cdc(anonymousButton.GetDC());
448         SIZE anonymousStringSize;
449         ::GetTextExtentPoint32(cdc,CHECKBUTTON_HIDDENSTRING,_tcslen(CHECKBUTTON_HIDDENSTRING),&anonymousStringSize);
450         
451         anonymousButtonRect.left = commentColorBoxRect.right + COMMENTWRITEWINDOW_SIDESEPARATESIZE;
452         anonymousButtonRect.right = anonymousButtonRect.left + commentAnonymousButtonSize.cx - anonymousStringSize.cx;
453
454         commentEditRect.left = anonymousButtonRect.right + COMMENTWRITEWINDOW_SIDESEPARATESIZE;
455         
456         commentWriteButtonRect.right = size.cx - COMMENTWRITEWINDOW_SIDESEPARATESIZE;
457         commentWriteButtonRect.left = commentWriteButtonRect.right - commentWriteButtonSize.cx;
458
459         commentEditRect.right = commentWriteButtonRect.left - COMMENTWRITEWINDOW_SIDESEPARATESIZE;
460
461         
462
463         //\88Ú\93®\8f\88\97\9d
464         HDWP hDwp = BeginDeferWindowPos(6);
465         
466         commentPosBox.DeferWindowPos(hDwp,*this,
467                 commentPosBoxRect.left,writeSpaceHeight,commentPosBoxRect.right - commentPosBoxRect.left,commentWriteInternalHeight,
468                 SWP_NOZORDER);
469
470         commentSizeBox.DeferWindowPos(hDwp,*this,
471                 commentSizeBoxRect.left,writeSpaceHeight,commentSizeBoxRect.right - commentSizeBoxRect.left,commentWriteInternalHeight,
472                 SWP_NOZORDER);
473
474         commentColorBox.DeferWindowPos(hDwp,*this,
475                 commentColorBoxRect.left,writeSpaceHeight,commentColorBoxRect.right - commentColorBoxRect.left,commentWriteInternalHeight,
476                 SWP_NOZORDER);
477
478         anonymousButton.DeferWindowPos(hDwp,*this,
479                 anonymousButtonRect.left,writeSpaceHeight,anonymousButtonRect.right - anonymousButtonRect.left,commentWriteInternalHeight - CHECKBUTTON_SUBSCRIPT_HEIGHT,
480                 SWP_NOZORDER);
481
482         commentSubEdit.DeferWindowPos(hDwp,*this,
483                 commentEditRect.left,writeSpaceHeight,commentEditRect.right - commentEditRect.left,commentWriteInternalHeight,
484                 SWP_NOZORDER);
485
486         commentWriteButton.DeferWindowPos(hDwp,*this,
487                 commentWriteButtonRect.left,writeSpaceHeight,commentWriteButtonRect.right - commentWriteButtonRect.left,commentWriteInternalHeight,
488                 SWP_NOZORDER);
489
490         EndDeferWindowPos(hDwp);
491
492         return;
493 }
494
495 VOID CCommentWriteWindow::OnDrawItem(UINT wParam,LPDRAWITEMSTRUCT lParam){
496         
497         
498
499         if(lParam->hwndItem == commentColorBox.m_hWnd && commentColorBox.GetCount() > 0){
500                 
501                 
502
503                 RECT drawRect = lParam->rcItem;
504                 UINT_PTR itemNo = 0;
505                 INT_PTR curselNo = commentColorBox.GetCurSel();
506                 CDCHandle dcHandle = lParam->hDC;
507                 CBrush bkBrush;
508                 const UINT_PTR width = 1;
509                 drawRect.left += width;
510                 drawRect.top += width;
511                 drawRect.right -= width;
512                 drawRect.bottom -= width;
513
514                 if(lParam->itemID == ((UINT)-1)){
515                         itemNo = curselNo == CB_ERR ? 0 : curselNo;
516                 } else {
517                         itemNo = lParam->itemID;
518                 }
519                 
520                 CommentInfo<COLORREF> &commentColor = *(CommentInfo<COLORREF> *)commentColorBox.GetItemDataPtr(itemNo);
521                 
522                 
523                 if(lParam->itemState & (ODS_FOCUS | ODS_COMBOBOXEDIT)){
524                         
525                         
526                         
527                         bkBrush.CreateSolidBrush(PALETTERGB(160,160,160));
528                                 
529                 } else {
530
531                         bkBrush.CreateSolidBrush(PALETTERGB(255,255,255));
532
533                 }
534
535
536                 
537                 
538                 CBrush brush;
539                 CPen cpen;
540
541                 brush.CreateSolidBrush(commentColor.userData);
542                 dcHandle.SelectBrush(brush);
543                 dcHandle.FillRect(&lParam->rcItem,bkBrush);
544                 dcHandle.SelectBrush(brush);
545                 dcHandle.SelectPen((HPEN)::GetStockObject(BLACK_PEN));
546                 dcHandle.Rectangle(&drawRect);
547                 
548         }
549
550         return;
551 }
552
553 LRESULT CCommentWriteWindow::OnEraseBkGnd(HDC wParam){
554
555         return TRUE;
556 }
557
558
559 LRESULT CCommentWriteWindow::OnButton(UINT hiWparam,INT_PTR loWparam,HWND lParam){
560
561         if(lParam == commentWriteButton){
562                 
563                 this->SendChat();
564
565         }
566
567         return TRUE;
568 }
569
570 VOID CCommentWriteWindow::OnTimer(UINT id){
571         streamTime++;
572         this->Invalidate();
573
574         return;
575 }
576
577 VOID CCommentWriteWindow::OnMeasureItem(UINT wParam,LPMEASUREITEMSTRUCT lParam){
578
579         switch(lParam->CtlID){
580
581         case COMMENTCOLOR_BOX:
582                 {
583                         SIZE itemSize;
584                         CPaintDC pdc(*this);
585                         pdc.SelectFont(AtlGetDefaultGuiFont());
586                         LPCTSTR sample = TEXT(" ");
587                         ::GetTextExtentPoint32(pdc,sample,_tcslen(sample),&itemSize);
588                         lParam->itemHeight = itemSize.cy;
589
590                 }
591                 break;
592
593         }
594
595         
596
597         return;
598 }
599
600
601
602
603 VOID CCommentWriteWindow::OnSendChatResult(){
604
605         commentSubEdit.AgreeEnter();
606         return;
607 }
608
609
610
611 VOID CCommentWriteWindow::OnHeartBeat(NicoLiveHeartBeat_P heartBeat){
612
613         if(heartBeat->status == NLIB_ERR_OK){
614                 streamTime = heartBeat->time;
615
616         }
617
618         return;
619 }
620
621 VOID CCommentWriteWindow::OnDisConnect(){
622
623         this->KillTimer(TIMER_ID);
624
625         return;
626 }
627
628
629 //
630 //CSubChatEdit\83N\83\89\83X
631 //////////////////////////////////////////////////////////////////////////////////////
632
633 void CSubChatEdit::OnKeyDown(TCHAR wParam, UINT upLParam,UINT loLParam){
634         if(wParam == VK_RETURN){
635                                         
636                 cs.Lock();
637                                         
638                 if(untilConnectingFlag == FALSE){
639                         untilConnectingFlag = TRUE;
640                         
641
642                         self.SendChat();
643                 }
644                                         
645                 cs.Unlock();
646                                         
647                                         
648         }
649         return;
650 }
651
652
653 VOID CSubChatEdit::AgreeEnter(){
654         cs.Lock();
655         this->SetReadOnly(FALSE);
656         untilConnectingFlag = FALSE;
657         cs.Unlock();
658 }
659
660 }