XU32 XHTMLButton::Paint(DRAWCONTEXT *pDraw) { if(m_nWidth==0) return XFALSE; XRect rect(m_nPosX,m_nPosY,m_nPosX+m_nWidth,m_nPosY+m_nHeight); if(!rect.IsUnion(pDraw->paint)) return XFALSE; // rect.DeflateRect(1,1); XU32 bc=pDraw->pDraw->GetBackColor(); XU32 tc=pDraw->pDraw->GetColor(); XGraphics*p=pDraw->pDraw; XU8 s=XBS_BFRAME; rect.InflateRect(1,1); PaintSelect(rect,pDraw); rect.DeflateRect(1,1); int dx=1,dy=1; if(m_nStatus==0) {s|=XBS_THICK;dx=0;dy=0;} XColor cc(pDraw->DCBACK); if(pDraw->DCBACK==0) cc=XWindow::GetSysColor(XCW_BACK); cc.Dark(10); XRect rtt=rect; p->DrawButton(rect,cc,s);//pDraw->DCBUTTON,s); p->SetBackColor(cc);//pDraw->DCBUTTON); p->SetColor(tc); PaintBack(pDraw,rtt); XU32 s1=0; if(dx==0) s1=XDomNode::Handle(XDO_PAINT,(XU32)pDraw,0);//(dy<<8)|dx); else { int mx,my; p->GetOrigin(mx,my); mx+=dx; my+=dy; p->SetOrigin(mx,my); s1=XDomNode::Handle(XDO_PAINT,(XU32)pDraw,0);//(dy<<8)|dx); mx-=dx; my-=dy; p->SetOrigin(mx,my); } p->SetBackColor(bc); return s1; }
XBOOL XDomTD::Paint(DRAWCONTEXT *pDraw,XU32 nData) { if(m_nWidth<=0) return 0; XRect rect(m_nPosX+pDraw->SPACING,m_nPosY+pDraw->SPACING, m_nPosX+m_nWidth-1,m_nPosY+m_nHeight-1); if(pDraw->bCollapse) rect.InflateRect(2,2); if(rect.IsUnion(pDraw->paint)) { // pDraw->Save(); // XRect ra(m_nPosX,m_nPosY,m_nPosX if(pDraw->bCollapse) { rect.DeflateRect(1,1); /*rect.InflateRect(1,1); rect.top--; rect.left--; rect.right++; rect.bottom++;*/ } PaintBack(pDraw,rect); // rect.InflateRect(1,1); XDomNode::Handle(XDO_PAINT,(XU32)pDraw,0); if(pDraw->TABBORDER) { XColor color(pDraw->DCBACK); color.Dark(30); XU32 nColor=pDraw->pDraw->SetColor(color); pDraw->pDraw->FrameRectangle(rect); pDraw->pDraw->SetColor(nColor); } if(pDraw->bCollapse) { //rect.top--; rect.right++; //rect.bottom++; } PaintBorder(pDraw,rect); //if(bSet) // pDraw->Restore(); return XTRUE; } return XFALSE; }
XU32 XHTMLBody::Handle(XU32 nOpera, XU32 pData1, XU32 pData2) { XU32 i; switch(nOpera) { //case XDO_SET_START: // return StartEvent((DRAWCONTEXT*)pData1); /*case XDO_LAYEROUT_CELLS: { CELLDATA*p=(CELLDATA*)pData2; DRAWCONTEXT*pd=(DRAWCONTEXT*)pData1; XU32 ss=PreLayerout(pd,p); XDomCard::Handle(nOpera,pData1,pData2); EndLayerout(pd,p); }return 1;*/ case XDO_LAYEROUT_CELL: { CELLDATA data; LAYEROUTDATA margin; //data.Reset(pData->cur.x,pData->cur.y,XTRUE); CELLDATA*pData=&data;//(CELLDATA*)pData2; DRAWCONTEXT*pDraw=(DRAWCONTEXT*)pData1; pDraw->Init(); pData->Reset(pDraw->win.left,pDraw->win.top,XTRUE); PreLayerout(pDraw,pData,&margin); if(m_nWidth>0) { if(margin.nMargin[BORDERDATA::LEFT]>0&& margin.nMargin[BORDERDATA::LEFT]+m_nWidth>pDraw->view.Width()) { margin.nMargin[BORDERDATA::LEFT]=XMAX( (pDraw->view.Width()-m_nWidth)>>1,0); } if(m_nWidth>pDraw->win.Width()) pDraw->win.right=pDraw->win.left+m_nWidth; } //pData->Init(); InitMargin(pDraw,pData,&margin,m_nPosX,m_nPosY,m_nWidth,m_nHeight); XPoint pt=pData->cur; for(i=0;i<m_childs.GetSize();i++) m_childs[i]->LayeroutItem(pDraw,pData,XTRUE);//Handle(XDO_LAYEROUT_CELLS,(XU32)pDraw,(XU32)&data); pData->Reset(pt.x,pt.y,XFALSE); NewRow(0,pDraw,pData,pDraw->IND); pData->bEmpty=XTRUE; for(i=0;i<m_childs.GetSize();i++) m_childs[i]->LayeroutItem(pDraw,pData,XFALSE);//Handle(XDO_LAYEROUT_CELL,(XU32)pDraw,(XU32)&data); //data.max.cx-=pData->cur.x; //data.max.cy-=pData->cur.y; m_nWidth=pData->max.cx-pt.x; m_nHeight=pData->max.cy-pt.y; if(m_nWidth<pDraw->view.Width()) m_nWidth=pDraw->view.Width(); if(m_nHeight<pDraw->view.Height()) m_nHeight=pDraw->view.Height(); XSize size(m_nWidth,m_nHeight); SetMargin(&margin,m_nWidth,m_nHeight,size); //m_nWidth=data.max.cx-pData->cur.x; pData=(CELLDATA*)pData2; SetRowSize(pDraw,pData,size,m_nWidth,XFALSE); NewRow(0,pDraw,pData,pDraw->IND); /*CELLDATA*p=(CELLDATA*)pData2; DRAWCONTEXT*pd=(DRAWCONTEXT*)pData1; LAYEROUTDATA margin; XU32 ss=PreLayerout(pd,p,margin); // StartMargin(pd,p,XTRUE); //BeginMargin(pd,p); m_nPosX=p->cur.x; m_nPosY=p->cur.y; XDomCard::Handle(nOpera,pData1,pData2); EndLayerout(pd,p); m_nWidth=XMAX(p->max.cx-m_nPosX,pd->view.Width()-(m_nPosX<<1)-1); m_nHeight=XMAX(p->max.cy-m_nPosY,pd->view.Height()-(m_nPosY<<1)-1);*/ }return 1; case XDO_PAINT: { XRect rect(m_nPosX,m_nPosY,m_nPosX+m_nWidth,m_nPosY+m_nHeight); PaintBack((DRAWCONTEXT*)pData1,rect); XU32 s=XDomCard::Handle(nOpera,pData1,pData2); PaintBorder((DRAWCONTEXT*)pData1,rect); return s; }; case XDO_EVENT_ONTIMER: { XRect rect(0,0,m_nWidth,m_nHeight); return OnTimer((XEVENTDATA*)pData1,rect)| XDomCard::Handle(nOpera,pData1,pData2); }break; /* case XDO_SET_ATTR: case XDO_ADD_ATTR: SetBodyAttrib((XVar*)pData1); break; */ //return XTRUE; }
XU32 XDomTable::Paint(DRAWCONTEXT *pDraw) { //XString8 str=FindAttrib(XEAB::ID,""); //if(str=="last") // int a=0; if(m_nWidth<=0) return 0; if(m_nPosX>=pDraw->paint.right|| m_nPosX+m_nWidth<=pDraw->paint.left|| m_nPosY>=pDraw->paint.bottom|| m_nPosY+m_nHeight<=pDraw->paint.top) return 0; XU32 ss=PrePaint(pDraw); XRect rect(m_nPosX,m_nPosY,m_nPosX+m_nWidth,m_nPosY+m_nHeight); int bd=FindAttrib(XEAB::BORDER,0); XU8 nType=FindAttrib(XEAB::FRAME,XEnumFrame::BOX); XU8 bCollapse=pDraw->bCollapse; pDraw->bCollapse=FindAttrib(XEAB::BORDER_COLLAPSE,0); int nr=pDraw->SPACING; pDraw->SPACING=XMAX(FindAttrib(XEAB::CELLSPACING,1),0); XU8 d=pDraw->TABBORDER; pDraw->TABBORDER=bd; XRect ar=XRect(rect.left,rect.top,rect.right,rect.bottom); PaintBack(pDraw,ar,XTRUE); XU32 s=HandleChild(XDO_PAINT_TABLE,(XU32)pDraw,0); pDraw->bCollapse=bCollapse; pDraw->TABBORDER=d; if(nType==XEF::VOID_X) bd=0; if(bd>0) { XGraphics*pg=pDraw->pDraw; //pDraw->Save(); XColor cc(pDraw->DCBACK); XColor dc(cc); dc.Dark(60); cc.Dark(30); int bx=m_nPosX,by=m_nPosY; int ex=m_nPosX+m_nWidth-1,ey=m_nPosY+m_nHeight-1; for(int i=0;i<bd;i++) { pg->SetColor(cc); switch(nType) { case XEF::BOX: case XEF::ABOVE: case XEF::BORDER: case XEF::HSIDES: pg->DrawLine(bx,by,ex,by); break; } switch(nType) { case XEF::BORDER: case XEF::BOX: case XEF::VSIDES: case XEF::LHS: pg->DrawLine(bx,by,bx,ey); break; } pg->SetColor(dc); switch(nType) { case XEF::BORDER: case XEF::BOX: case XEF::VSIDES: case XEF::RHS: pg->DrawLine(ex,by,ex,ey); break; } switch(nType) { case XEF::BORDER: case XEF::BOX: case XEF::HSIDES: case XEF::BELOW: pg->DrawLine(bx,ey,ex,ey); break; } cc.Bright(3); dc.Bright(3); bx++; by++; ex--; ey--; } //cc.Dark(20); /*pDraw->pDraw->DrawFrame( XRect(m_nPosX,m_nPosY,m_nPosX+m_nWidth,m_nPosY+m_nHeight), cc,bd,XTRUE);*/ // pDraw->Restore(); } pDraw->SPACING=nr; PaintBorder(pDraw,ar); EndPaint(pDraw); //if(bSave) // pDraw->Restore(); return s; }
int WINAPI PaintConEmuBackground(struct PaintBackgroundArg* pBk) { DWORD nPanelBackIdx = CONBACKCOLOR(pBk->nFarColors[col_PanelText]); DWORD nEditorBackIdx = CONBACKCOLOR(pBk->nFarColors[col_EditorText]); DWORD nViewerBackIdx = CONBACKCOLOR(pBk->nFarColors[col_ViewerText]); if (pBk->dwLevel == 0) { if ((pBk->Place & pbp_Panels) && gbLinesColorPanel) { if (pBk->LeftPanel.bVisible) { PaintBack(pBk->hdc, (pBk->LeftPanel.bPlugin && gbHilightPlugins) ? gcrHilightPlugBack : pBk->crPalette[nPanelBackIdx], pBk->rcDcLeft); } if (pBk->RightPanel.bVisible) { PaintBack(pBk->hdc, (pBk->RightPanel.bPlugin && gbHilightPlugins) ? gcrHilightPlugBack : pBk->crPalette[nPanelBackIdx], pBk->rcDcRight); } } else if (((pBk->Place & pbp_Viewer) && gbLinesColorViewer) || ((pBk->Place & pbp_Editor) && gbLinesColorEditor) ) { int nCellHeight = pBk->dcSizeY / (pBk->rcConWorkspace.bottom - pBk->rcConWorkspace.top + 1); RECT rcWork = {0, nCellHeight, pBk->dcSizeX, pBk->dcSizeY - nCellHeight}; PaintBack(pBk->hdc, pBk->crPalette[(pBk->Place & pbp_Editor) ? nEditorBackIdx : nViewerBackIdx], rcWork); } } if ((pBk->Place & pbp_Panels) && gbLinesColorPanel && (pBk->LeftPanel.bVisible || pBk->RightPanel.bVisible)) { int nCellHeight = 12; if (pBk->LeftPanel.bVisible) nCellHeight = pBk->rcDcLeft.bottom / (pBk->LeftPanel.rcPanelRect.bottom - pBk->LeftPanel.rcPanelRect.top + 1); else nCellHeight = pBk->rcDcRight.bottom / (pBk->RightPanel.rcPanelRect.bottom - pBk->RightPanel.rcPanelRect.top + 1); int nY1 = (pBk->LeftPanel.bVisible) ? pBk->rcDcLeft.top : pBk->rcDcRight.top; int nY2 = (pBk->rcDcLeft.bottom >= pBk->rcDcRight.bottom) ? pBk->rcDcLeft.bottom : pBk->rcDcRight.bottom; int nX1 = (pBk->LeftPanel.bVisible) ? 0 : pBk->rcDcRight.left; int nX2 = (pBk->RightPanel.bVisible) ? pBk->rcDcRight.right : pBk->rcDcLeft.right; PaintLines(pBk->hdc, gcrLinesColorPanel, nCellHeight, nX1, nY1, nX2, nY2); } else if (((pBk->Place & pbp_Viewer) && gbLinesColorViewer) || ((pBk->Place & pbp_Editor) && gbLinesColorEditor) ) { int nCellHeight = pBk->dcSizeY / (pBk->rcConWorkspace.bottom - pBk->rcConWorkspace.top + 1); PaintLines(pBk->hdc, (pBk->Place & pbp_Editor) ? gcrLinesColorEditor : gcrLinesColorViewer, nCellHeight, 0, 0, pBk->dcSizeX, pBk->dcSizeY); } return TRUE; }
/************************************************************************ * dasm * * - dasm is the application main window. * * - everything the main window does is in this routine (for now) and * * where a response is quick it appears in one of its helper functions * * later in this file, otherwise it has been substantial enough to * * warrant its own file and routines........ * * - this is long * ************************************************************************/ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { HDC hdc; TEXTMETRIC tm; POINT point; lptr scrll; int killcount; g_hMainWnd=hwnd; RECT tmp_rect; switch(message) { case WM_COMMAND: switch(LOWORD(wParam)) { case file_exit: SendMessage(g_hMainWnd,WM_CLOSE,0,0); break; case file_save: savefile_text(hwnd,true,false); break; case get_comment: getcomment(); break; case jump_to: jumpto(); break; case change_oep: changeoep(); break; case save_database: savedb(); break; case load_database: loaddb(); break; case save_asm: savefile_text(hwnd,false,false); break; case block_saveasm: savefile_text(hwnd,false,true); break; case block_savetext: savefile_text(hwnd,true,true); break; case cm_decrypt: decrypterdialog(); break; case file_open: newfile(); break; case view_segment: segviewer(); break; case view_names: namesviewer(); break; case view_imports: importsviewer(); break; case view_exports: exportsviewer(); break; case view_xrefs: xrefsviewer(); break; case make_code: g_scheduler.addtask(user_makecode,priority_userrequest,nlptr,NULL); break; case make_dword: g_scheduler.addtask(user_makedword,priority_userrequest,nlptr,NULL); break; case float_single: g_scheduler.addtask(user_makesingle,priority_userrequest,nlptr,NULL); break; case float_double: g_scheduler.addtask(user_makedouble,priority_userrequest,nlptr,NULL); break; case float_longdouble: g_scheduler.addtask(user_makelongdouble,priority_userrequest,nlptr,NULL); break; case make_word: g_scheduler.addtask(user_makeword,priority_userrequest,nlptr,NULL); break; case make_string: g_scheduler.addtask(user_makestring,priority_userrequest,nlptr,NULL); break; case pascal_string: g_scheduler.addtask(user_pascalstring,priority_userrequest,nlptr,NULL); break; case uc_string: g_scheduler.addtask(user_ucstring,priority_userrequest,nlptr,NULL); break; case up_string: g_scheduler.addtask(user_upstring,priority_userrequest,nlptr,NULL); break; case dos_string: g_scheduler.addtask(user_dosstring,priority_userrequest,nlptr,NULL); break; case general_string: g_scheduler.addtask(user_generalstring,priority_userrequest,nlptr,NULL); break; case argover_dec: g_scheduler.addtask(user_argoverdec,priority_userrequest,nlptr,NULL); break; case arg_single: g_scheduler.addtask(user_argsingle,priority_userrequest,nlptr,NULL); break; case argover_hex: g_scheduler.addtask(user_argoverhex,priority_userrequest,nlptr,NULL); break; case argnegate: g_scheduler.addtask(user_argnegate,priority_userrequest,nlptr,NULL); break; case offset_dseg: g_scheduler.addtask(user_argoveroffsetdseg,priority_userrequest,nlptr,NULL); break; case argover_char: g_scheduler.addtask(user_argoverchar,priority_userrequest,nlptr,NULL); break; case undefine_line: g_scheduler.addtask(user_undefineline,priority_userrequest,nlptr,NULL); break; case undefine_lines: g_scheduler.addtask(user_undefinelines,priority_userrequest,nlptr,NULL); break; case undefine_lines_long: g_scheduler.addtask(user_undefinelines_long,priority_userrequest,nlptr,NULL); break; case block_undefine: g_scheduler.addtask(user_undefineblock,priority_userrequest,nlptr,NULL); break; case block_view: blockview(); break; case block_top: g_scheduler.addtask(user_marktopblock,priority_userrequest,nlptr,NULL); break; case block_bottom: g_scheduler.addtask(user_markbottomblock,priority_userrequest,nlptr,NULL); break; case line_jumpto: g_scheduler.addtask(user_jumpto,priority_userrequest,nlptr,NULL); break; case line_jumptoarg2: g_scheduler.addtask(user_jumptoarg2,priority_userrequest,nlptr,NULL); break; case Name_Location: namelocation(); break; case help_short: DialogBox(g_hInst,MAKEINTRESOURCE(help_shortcuts),hwnd,(DLGPROC)helpshortcuts); break; case help_about: DialogBox(g_hInst,MAKEINTRESOURCE(D_help_about),hwnd,(DLGPROC)habox); break; case Jump_Back: g_scheduler.addtask(user_jumpback,priority_userrequest,nlptr,NULL); break; case main_search: searchengine(); break; case search_again: searchmore(); break; case set_bg_color: g_options.bgcolor=choosecolour(g_options.bgcolor); GetClientRect(g_hMainWnd,&tmp_rect); InvalidateRect(g_hMainWnd,&tmp_rect,true); g_scheduler.addtask(windowupdate,priority_window,nlptr,NULL); break; case set_high_color: g_options.highcolor=choosecolour(g_options.highcolor); GetClientRect(g_hMainWnd,&tmp_rect); InvalidateRect(g_hMainWnd,&tmp_rect,true); g_scheduler.addtask(windowupdate,priority_window,nlptr,NULL); break; case set_text_color: g_options.textcolor=choosecolour(g_options.textcolor); GetClientRect(g_hMainWnd,&tmp_rect); InvalidateRect(g_hMainWnd,&tmp_rect,true); g_scheduler.addtask(windowupdate,priority_window,nlptr,NULL); break; case font_system: g_options.font=systemfont; setupfont(); break; case font_courier: g_options.font=courierfont; setupfont(); break; case font_courier10: g_options.font=courierfont10; setupfont(); break; case font_courier12: g_options.font=courierfont12; setupfont(); break; case font_ansi: g_options.font=ansifont; setupfont(); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } break; case WM_CHAR: if(charinputenabled) switch(wParam) { case 'c': g_scheduler.addtask(user_makecode,priority_userrequest,nlptr,NULL); break; case 'C': g_scheduler.addtask(user_argoverchar,priority_userrequest,nlptr,NULL); break; case 'd': g_scheduler.addtask(user_makedword,priority_userrequest,nlptr,NULL); break; case 'D': g_scheduler.addtask(user_argoverdec,priority_userrequest,nlptr,NULL); break; case 'H': g_scheduler.addtask(user_argoverhex,priority_userrequest,nlptr,NULL); break; case '-': g_scheduler.addtask(user_argnegate,priority_userrequest,nlptr,NULL); break; case 'n': namelocation(); break; case ';': getcomment(); break; case 'o': g_scheduler.addtask(user_argoveroffsetdseg,priority_userrequest,nlptr,NULL); break; case 'p': g_scheduler.addtask(user_pascalstring,priority_userrequest,nlptr,NULL); break; case 's': g_scheduler.addtask(user_makestring,priority_userrequest,nlptr,NULL); break; case 'u': g_scheduler.addtask(user_undefineline,priority_userrequest,nlptr,NULL); break; case 'U': g_scheduler.addtask(user_undefinelines,priority_userrequest,nlptr,NULL); break; case 'w': g_scheduler.addtask(user_makeword,priority_userrequest,nlptr,NULL); break; case 't': g_scheduler.addtask(user_marktopblock,priority_userrequest,nlptr,NULL); break; case 'b': g_scheduler.addtask(user_markbottomblock,priority_userrequest,nlptr,NULL); break; default: break; } break; case WM_LBUTTONDOWN: dio.setpos(HIWORD(lParam)); break; case WM_RBUTTONDOWN: dio.setpos(HIWORD(lParam)); point.x=LOWORD(lParam); point.y=HIWORD(lParam); ClientToScreen(g_hMainWnd,&point); TrackPopupMenu(rmenu,0,point.x,point.y,0,g_hMainWnd,NULL); break; case WM_PAINT: if(!KillThread) DoPaint(hwnd,cxChar,cyChar); else PaintBack(hwnd); ValidateRect(g_hMainWnd,NULL); break; case WM_CLOSE: if(MessageBox(g_hMainWnd,"Are you sure that you want to exit Borg ?\n\rHit Yes To Exit\n\rHit No to Stay","Borg Disassembler", MB_ICONEXCLAMATION|MB_YESNO)==IDNO) break; g_scheduler.stopthread(); g_scheduler.addtask(quitborg,priority_quit,nlptr,NULL); KillThread=true; if(InThread) SetThreadPriority(ThreadHandle,THREAD_PRIORITY_TIME_CRITICAL); DestroyWindow(g_hMainWnd); return 0; case WM_DESTROY: save_reg_entries(); KillThread=true; killcount=0; Sleep(0); SetPriorityClass(ThreadHandle,HIGH_PRIORITY_CLASS); if(InThread) while(TestThread()) { killcount++; if(killcount>2) { // this is a nasty way of getting out. // sometimes the thread just will not exit nicely when its busy. if(TerminateThread(ThreadHandle,1)) { CloseHandle(ThreadHandle); break; } } } DeleteCriticalSection(&g_hCs); PostQuitMessage(0); break; case WM_SIZE: if(wParam==SIZE_MAXIMIZED) g_options.winmax=true; else if (wParam==SIZE_RESTORED) g_options.winmax=false; mainwndsize.top=0; mainwndsize.left=0; mainwndsize.right=LOWORD(lParam); mainwndsize.bottom=HIWORD(lParam); GetWindowRect(hwndStatusBar,&StatusWindowSize); GetWindowRect(g_hMainWnd,&mainwnd); MoveWindow(hwndStatusBar,0,mainwndsize.bottom-StatusWindowSize.bottom+StatusWindowSize.top, mainwndsize.right,StatusWindowSize.bottom-StatusWindowSize.top,true); break; case WM_MOUSEWHEEL: if (GET_KEYSTATE_WPARAM(wParam) & MK_SHIFT) { scrll.assign(0,GET_WHEEL_DELTA_WPARAM(wParam)/WHEEL_DELTA); g_scheduler.addtask(hscroll,priority_userrequest,scrll,NULL); } else { scrll.assign(0,-GET_WHEEL_DELTA_WPARAM(wParam)/WHEEL_DELTA); if(InThread) g_scheduler.addtask(scrolling,priority_userrequest,scrll,NULL); } break; case WM_VSCROLL: switch(LOWORD(wParam)) { case SB_TOP: break; case SB_BOTTOM: break; case SB_LINEUP: scrll.assign(0,-1); if(InThread) g_scheduler.addtask(scrolling,priority_userrequest,scrll,NULL); break; case SB_LINEDOWN: scrll.assign(0,1); if(InThread) g_scheduler.addtask(scrolling,priority_userrequest,scrll,NULL); break; case SB_PAGEUP: scrll.assign(0,-mainwndsize.bottom/cyChar+1); if(InThread) g_scheduler.addtask(scrolling,priority_userrequest,scrll,NULL); break; case SB_PAGEDOWN: scrll.assign(0,mainwndsize.bottom/cyChar-1); if(InThread) g_scheduler.addtask(scrolling,priority_userrequest,scrll,NULL); break; case SB_THUMBPOSITION: scrll.assign(0,HIWORD(wParam)); if(InThread) g_scheduler.addtask(vthumbposition,priority_userrequest,scrll,NULL); break; default: break; } break; case WM_HSCROLL: switch(LOWORD(wParam)) { case SB_LINEUP: scrll.assign(0,-1); g_scheduler.addtask(hscroll,priority_userrequest,scrll,NULL); break; case SB_LINEDOWN: scrll.assign(0,1); g_scheduler.addtask(hscroll,priority_userrequest,scrll,NULL); break; case SB_PAGEUP: scrll.assign(0,-8); g_scheduler.addtask(hscroll,priority_userrequest,scrll,NULL); break; case SB_PAGEDOWN: scrll.assign(0,8); g_scheduler.addtask(hscroll,priority_userrequest,scrll,NULL); break; case SB_THUMBPOSITION: scrll.assign(0,HIWORD(wParam)); if(InThread) g_scheduler.addtask(hthumbposition,priority_userrequest,scrll,NULL); break; default: break; } break; case WM_REPEATNAMEVIEW: namesviewer(); break; case WM_REPEATXREFVIEW: xrefsviewer(); break; // maximises window, used when the reg is read in at the start to maximise // the main window after initialisation of it case WM_MAXITOUT: ShowWindow(g_hMainWnd,SW_MAXIMIZE); break; case WM_CREATE: optionsinit(); hdc=GetDC(hwnd); SelectObject(hdc,GetStockObject(ANSI_FIXED_FONT)); GetTextMetrics(hdc,&tm); cxChar=tm.tmAveCharWidth; cyChar=tm.tmHeight+tm.tmExternalLeading; ReleaseDC(hwnd,hdc); InitializeCriticalSection(&g_hCs); hwndStatusBar=CreateStatusWindow(WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|CCS_BOTTOM, "No File Loaded",hwnd,2); GetWindowRect(hwndStatusBar,&StatusWindowSize); GetWindowRect(g_hMainWnd,&mainwnd); SetScrollRange(hwnd,SB_VERT,0,VERTSCROLLRANGE,false); SetScrollPos(hwnd,SB_VERT,0,false); KillThread=false; InThread=false; rmenu=LoadMenu(g_hInst,MAKEINTRESOURCE(right_click_menu)); rmenu=GetSubMenu(rmenu,0); load_reg_entries(); setupfont(); break; case WM_KEYDOWN: if(!charinputenabled) break; switch(wParam) { case VK_HOME: SendMessage(hwnd,WM_VSCROLL,SB_TOP,0L); break; case VK_PRIOR: SendMessage(hwnd,WM_VSCROLL,SB_PAGEUP,0L); break; case VK_NEXT: SendMessage(hwnd,WM_VSCROLL,SB_PAGEDOWN,0L); break; case VK_DOWN: SendMessage(hwnd,WM_VSCROLL,SB_LINEDOWN,0L); break; case VK_UP: SendMessage(hwnd,WM_VSCROLL,SB_LINEUP,0L); break; case VK_LEFT: SendMessage(hwnd,WM_HSCROLL,SB_PAGEUP,0L); break; case VK_RIGHT: SendMessage(hwnd,WM_HSCROLL,SB_PAGEDOWN,0L); break; case VK_RETURN: if(GetKeyState(VK_SHIFT)&0x8000) g_scheduler.addtask(user_jumptoarg2,priority_userrequest,nlptr,NULL); else g_scheduler.addtask(user_jumpto,priority_userrequest,nlptr,NULL); break; case VK_ESCAPE: g_scheduler.addtask(user_jumpback,priority_userrequest,nlptr,NULL); break; case VK_F1: DialogBox(g_hInst,MAKEINTRESOURCE(help_shortcuts),hwnd,(DLGPROC)helpshortcuts); break; case VK_F3: searchmore(); break; default: break; } break; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; }
/************************************************************************ * DoPaint * * - This is the main painting routine. If the program is quitting then * * it returns (we dont want thread clashes due to critical sections * * here and theres no point to repainting when we're exitting). * * - If the buffer is not ready then we wait, and go to sleep. * * - Otherwise the routine paints the screen from the buffer, using the * * selected font and colours * ************************************************************************/ void DoPaint(HWND hWnd,int cxChar,int cyChar) { HDC hDC; // handle for the display device PAINTSTRUCT ps; // holds PAINT information UINT nI; RECT rRect; int startpt,sn; char sl[300]; cyc=cyChar; while(!bufferready) Sleep(0); // wait if filling buffer if(KillThread) return; if(!lastline) { PaintBack(hWnd); return; } EnterCriticalSection(&g_hCs); memset(&ps, 0x00, sizeof(PAINTSTRUCT)); hDC = BeginPaint(hWnd, &ps); // Included as the background is not a pure color //SetBkMode(hDC,TRANSPARENT); switch(g_options.font) { case courierfont: case courierfont10: case courierfont12: if(cf==NULL) SelectObject(hDC,GetStockObject(ANSI_FIXED_FONT)); else SelectObject(hDC,cf); break; case ansifont: SelectObject(hDC,GetStockObject(ANSI_FIXED_FONT)); break; case systemfont: SelectObject(hDC,GetStockObject(SYSTEM_FIXED_FONT)); break; default: SelectObject(hDC,GetStockObject(ANSI_FIXED_FONT)); break; } GetClientRect(hWnd,&rRect); if(hpos>max_length-(rRect.right/cxChar)) hpos=max_length-rRect.right/cxChar; if(rrr!=(unsigned int)rRect.right) { rrr=(unsigned int)rRect.right; SetScrollRange(hWnd,SB_HORZ,0,max_length-rRect.right/cxChar,true); } SetScrollPos(hWnd,SB_HORZ,hpos,true); nScreenRows = rRect.bottom/cyChar; ShowScrollBar (hWnd, SB_VERT, true); ShowScrollBar (hWnd, SB_HORZ, max_length>(rRect.right/cxChar)); startpt=0; SetTextColor(hDC,g_options.textcolor); for(nI=startpt;nI<lastline;nI++) { if((userselonscreen)&&(nI==usersel)) SetBkColor(hDC,g_options.highcolor); else SetBkColor(hDC,g_options.bgcolor); strcpy(sl,&MainBuff[nI*max_length]); sn=strlen(sl); if(sn<max_length) memset(&sl[sn],' ',max_length-sn); sl[max_length]=0; TabbedTextOut(hDC,2-hpos*cxChar,nI*cyChar,sl, max_length,0,NULL,2-hpos*cxChar); } for(nI=lastline;nI<nScreenRows+1;nI++) { if((userselonscreen)&&(nI==usersel)) SetBkColor(hDC,g_options.highcolor); else SetBkColor(hDC,g_options.bgcolor); memset(sl,' ',max_length); sl[max_length]=0; TabbedTextOut(hDC,2-hpos*cxChar,nI*cyChar,sl, max_length,0,NULL,2-hpos*cxChar); } // Inform Windows painting is complete EndPaint(hWnd,&ps); LeaveCriticalSection(&g_hCs); }