//////////////////////////////////////////////////////////////////// // Public functions // void CDrawGrid::Draw( int page, CDC* dc ) /* ============================================================ Function : CDrawGrid::Draw Description : Draws this object. Access : Public Return : void Parameters : int page - Current page CDC* dc - CDC to draw to Usage : Called by the generator to draw the object. ============================================================*/ { ///////////////////////////////// // Get and convert grid position // int drawpage = page - GetPageOffset(); CDoubleRect rect = GetPosition(); CUnitConversion::InchesToPixels( rect ); CRect r( static_cast< int >( rect.left ), static_cast< int >( rect.top ), static_cast< int >( rect.right ), static_cast< int >( rect.bottom ) ); CUnitConversion::AdjustPixelsToPaper( dc, r ); ///////////////////////////////// // Create column widths and // fonts // int restWidth = 0; int sumWidth = 0; TContainer< CFont* > fonts; double lpi = static_cast< double >( GetLPI() ); double inch = static_cast< double >( dc->GetDeviceCaps( LOGPIXELSY ) ); int lineHeight = static_cast< int >( inch / lpi + .5 ); int max = m_columns.GetSize(); for( int t = 0 ; t < max ; t++ ) { CColumn* column = m_columns.GetAt( t ); if( column ) { sumWidth += CUnitConversion::InchesToPixels( column->GetWidth() ); fonts.Add( column->GetColumnFont() ); } } // restWidth will be used for // any 0-length field restWidth = r.Width() - sumWidth; ///////////////////////////////// // Find start and end of data // int start = m_pages.GetAt( drawpage )->m_startLine; int end = m_pages.GetAt( drawpage )->m_endLine; int mode = dc->SetBkMode( TRANSPARENT ); COLORREF color = dc->GetTextColor(); ///////////////////////////////// // Border // const CBorderLine* borderline = GetBorder(); CPen pen; CPen boldPen; if( borderline->GetVisible() ) { // Draw a border around the grid int thickness = CUnitConversion::InchesToPixels( borderline->GetThickness() ); pen.CreatePen( borderline->GetStyle(), thickness, borderline->GetColor() ); dc->SelectObject( &pen ); dc->SelectStockObject( NULL_BRUSH ); dc->Rectangle( r ); dc->SelectStockObject( NULL_PEN ); } ///////////////////////////////// // Line pens // const CBorderLine* columnline = GetColumnLine(); const CBorderLine* rowline = GetRowLine(); CPen* columnpen = NULL; CPen* rowpen = NULL; if( columnline->GetVisible() ) { columnpen = new CPen; int thickness = CUnitConversion::InchesToPixels( columnline->GetThickness() ); columnpen->CreatePen( columnline->GetStyle(), thickness, columnline->GetColor() ); } if( rowline->GetVisible() ) { rowpen = new CPen; int thickness = CUnitConversion::InchesToPixels( rowline->GetThickness() ); rowpen->CreatePen( rowline->GetStyle(), thickness, rowline->GetColor() ); } ///////////////////////////////// // Column lines // if( columnpen ) { dc->SelectObject( columnpen ); int left = r.left; // Loop columns for( int i = 0 ; i < max - 1; i++ ) { CColumn* column = m_columns.GetAt( i ); if( column ) { int pixelWidth = CUnitConversion::InchesToPixels( column->GetWidth() ); if( pixelWidth == 0 ) pixelWidth = restWidth; left += pixelWidth; dc->MoveTo( left, r.top ); dc->LineTo( left, r.bottom ); } } dc->SelectStockObject( NULL_PEN ); } ///////////////////////////////// // Loop and print column strings // int top = r.top; for(int t = start ; t < end ; t++ ) { // Tokenize a line of data CString line( m_data[ t ] ); int quarterHeight = lineHeight / 4; // Check if this is a separator if( IsSeparator( line ) ) { // Draw a line across the grid dc->SelectStockObject( BLACK_PEN ); dc->MoveTo( r.left, top + quarterHeight ); dc->LineTo( r.right, top + quarterHeight ); } else if( IsDoubleSeparator( line ) ) { // Draw a double line across the grid dc->SelectStockObject( BLACK_PEN ); dc->MoveTo( r.left, top + quarterHeight ); dc->LineTo( r.right, top + quarterHeight ); dc->MoveTo( r.left, top + quarterHeight * 2 ); dc->LineTo( r.right, top + quarterHeight * 2 ); } else if( IsBoldSeparator( line ) ) { // Draw a bold line across the grid boldPen.CreatePen( PS_SOLID, quarterHeight / 2, RGB( 0, 0, 0 ) ); dc->SelectObject( boldPen ); dc->MoveTo( r.left, top + quarterHeight ); dc->LineTo( r.right, top + quarterHeight ); dc->SelectStockObject( BLACK_PEN ); } else { CTokenizer tok( line, _T( "|" ) ); int left = r.left; // Loop columns for( int i = 0 ; i < max ; i++ ) { CColumn* column = m_columns.GetAt( i ); CRect drawRect( left, top, r.right, top + lineHeight ); if( column ) { // Get the data for this column CString data; tok.GetAt( i, data ); // Get the width of the column int pixelWidth = CUnitConversion::InchesToPixels( column->GetWidth() ); if( pixelWidth == 0 ) pixelWidth = restWidth; // Set font CFont* font = fonts.GetAt( i ); CFont* specialFont = NULL; if( font ) { if( IsBold( data ) ) { // Select a bold font // here instead specialFont = new CFont; LOGFONT lf; font->GetLogFont( &lf ); lf.lfWeight = FW_BOLD; specialFont->CreateFontIndirect( &lf ); } if( IsItalic( data )) { // Select an italic font // here instead specialFont = new CFont; LOGFONT lf; font->GetLogFont( &lf ); lf.lfItalic = TRUE; specialFont->CreateFontIndirect( &lf ); } } if( specialFont ) dc->SelectObject( specialFont ); else if( font ) dc->SelectObject( font ); // Create draw rect drawRect.SetRect( left, top, left + pixelWidth, top + lineHeight ); // Add offsets for columns int offset = CUnitConversion::PointsToPixels( column->GetFontSize() / 40.0 ); if( borderline->GetVisible() && i == 0 ) offset += max( 1, CUnitConversion::InchesToPixels( borderline->GetThickness() ) ); if( columnline->GetVisible() && i > 0 ) offset += max( 1, CUnitConversion::InchesToPixels( columnline->GetThickness() ) ); drawRect.left += offset; drawRect.right -= offset; // Draw data int justification = column->GetJustification(); dc->DrawText( data, drawRect, DT_VCENTER | DT_NOPREFIX | DT_WORDBREAK | justification ); if( specialFont ) delete specialFont; // Increase x-coord left += pixelWidth; } ///////////////////////////////// // Row dividers // if( rowpen && t < end ) { dc->SelectObject( rowpen ); dc->MoveTo( r.left, drawRect.bottom ); dc->LineTo( r.right, drawRect.bottom ); } } } // Increase y-coord top += lineHeight; } ///////////////////////////////// // Restore everything // dc->SetBkMode( mode ); dc->SetTextColor( color ); dc->SelectStockObject( ANSI_VAR_FONT ); dc->SelectStockObject( NULL_PEN ); if( columnpen ) delete columnpen; if( rowpen ) delete rowpen; }
static u32 win_proc(MSG *pMsg) { HWND hwnd; HDC hdc; RECT rc,rc0; u32 x,y; hwnd =pMsg->hwnd; switch(pMsg->Code) { case MSG_CREATE: timer_500ms_count=0; memset(ZigBeeTextBuf,0,sizeof(ZigBeeTextBuf)); memset(ZigBeeTimeBuf,0,sizeof(ZigBeeTimeBuf)); zigbee_ShowString("Zigbee Text"); hwndZigBee =hwnd; GetClientRect(hwnd,&rc0); SetFocusWindow(hwnd); CreateWindow(BUTTON,"关闭",WS_BORDER|WS_DLGFRAME|WS_CHILD|BS_SIMPLE|WS_VISIBLE,RectW(&rc0)-60,RectH(&rc0)-60,56,56,hwnd,ID_CLOSE,NULL); SetRect(&rcZigBeeString,4,4,RectW(&rc0)-4*2,60); x=4; y=RectH(&rc0)-70; SetRect(&rcGroupBox_LED,x,y,100,66); SetRect(&rcGroupBox_CTR,x+100+4,y,100,66); x=rcGroupBox_LED.left+12; y=rcGroupBox_LED.top+18; CreateWindow(BUTTON,"LED1",WS_BORDER|WS_CHILD|BS_HOLD|WS_VISIBLE,x,y+0*24,72,20,hwnd,ID_LED1,NULL); CreateWindow(BUTTON,"LED2",WS_BORDER|WS_CHILD|BS_HOLD|WS_VISIBLE,x,y+1*24,72,20,hwnd,ID_LED2,NULL); x=rcGroupBox_CTR.left+12; y=rcGroupBox_CTR.top+18; CreateWindow(BUTTON,"组网",WS_BORDER|WS_CHILD|WS_VISIBLE,x,y+0*24,72,20,hwnd,ID_NET_ON,NULL); CreateWindow(BUTTON,"断开",WS_BORDER|WS_CHILD|WS_VISIBLE,x,y+1*24,72,20,hwnd,ID_NET_OFF,NULL); CreateWindow(BUTTON,"发送",WS_BORDER|WS_CHILD|BS_SIMPLE|WS_VISIBLE,RectW(&rc0)-60,rcGroupBox_CTR.top-(24+2),56,24,hwnd,ID_SEND,NULL); GDD_CreateTimer(hwnd,0,500,TMR_START); break; //// case MSG_KEY_DOWN: break; ////// case MSG_KEY_UP: { u16 key_val; hdc =BeginPaint(hwnd); key_val =LO16(pMsg->Param1); sprintf(ZigBeeTextBuf,"KeyVal:%04XH",key_val); DrawText(hdc,ZigBeeTextBuf,-1,&rc,DT_LEFT|DT_VCENTER|DT_BORDER|DT_BKGND); EndPaint(hwnd,hdc); // InvalidateWindow(hwnd); } break; ////// case MSG_TIMER: { timer_500ms_count++; sprintf(ZigBeeTimeBuf,"TIME:%06d",timer_500ms_count); /* i=SendMessage(GetDesktopWindow(),MSG_GET_POS,timer_500ms_count,0); printf("i=%08XH.\r\n",i); */ InvalidateWindow(hwnd); } break; case MSG_NOTIFY: { u16 event,id; event =HI16(pMsg->Param1); id =LO16(pMsg->Param1); switch(event) { case BTN_DOWN: //按钮按下 if(id==ID_LED1) { zigbee_LED1_ON(); } if(id==ID_LED2) { zigbee_LED2_ON(); } if(id==ID_NET_ON) { zigbee_NET_ON(); } if(id==ID_NET_OFF) { zigbee_NET_OFF(); } if(id==ID_SEND) { zigbee_send_string(ZigBeeTextBuf); } break; //// case BTN_UP: //按钮弹起 if(id==ID_CLOSE) { PostMessage(hwnd,MSG_CLOSE,0,0); } if(id==ID_LED1) { zigbee_LED1_OFF(); } if(id==ID_LED2) { zigbee_LED2_OFF(); } break; //// } } break; //// case MSG_PAINT: { hdc =BeginPaint(hwnd); GetClientRect(hwnd,&rc0); SetFillColor(hdc,RGB(150,150,150)); FillRect(hdc,&rc0); SetTextColor(hdc,RGB(0,0,128)); SetDrawColor(hdc,RGB(100,100,100)); DrawGroupBox(hdc,&rcZigBeeString,"信息接收区"); //// SetRect(&rc, rcGroupBox_LED.left, rcGroupBox_LED.top-(24+2), RectW(&rcGroupBox_LED), 24); if(zigbee_is_ok()) { SetTextColor(hdc,RGB(0,255,0)); SetDrawColor(hdc,RGB(0,200,0)); SetFillColor(hdc,RGB(0,128,0)); DrawText(hdc,"连接成功",-1,&rc,DT_CENTER|DT_VCENTER|DT_BORDER|DT_BKGND); } else { SetTextColor(hdc,RGB(255,0,0)); SetDrawColor(hdc,RGB(200,0,0)); SetFillColor(hdc,RGB(100,0,0)); if(timer_500ms_count&0x01) { DrawText(hdc,"未连接",-1,&rc,DT_CENTER|DT_VCENTER|DT_BORDER|DT_BKGND); } else { DrawText(hdc," ",-1,&rc,DT_CENTER|DT_VCENTER|DT_BORDER|DT_BKGND); } } //// SetRect(&rc, rcGroupBox_CTR.left, rcGroupBox_CTR.top-(24+2), RectW(&rcGroupBox_CTR), 24); SetTextColor(hdc,RGB(0,255,255)); SetDrawColor(hdc,RGB(0,200,200)); SetFillColor(hdc,RGB(0,80,80)); DrawText(hdc,ZigBeeTimeBuf,-1,&rc,DT_CENTER|DT_VCENTER|DT_BORDER|DT_BKGND); //// SetTextColor(hdc,RGB(0,255,0)); SetDrawColor(hdc,RGB(0,200,0)); SetFillColor(hdc,RGB(0,80,0)); CopyRect(&rc,&rcZigBeeString); InflateRectEx(&rc,-4,-20,-4,-4); DrawText(hdc,ZigBeeTextBuf,-1,&rc,DT_LEFT|DT_VCENTER|DT_BORDER|DT_BKGND); SetTextColor(hdc,RGB(0,0,128)); SetDrawColor(hdc,RGB(80,80,80)); DrawGroupBox(hdc,&rcGroupBox_LED,"LED控制"); DrawGroupBox(hdc,&rcGroupBox_CTR,"网络控制"); EndPaint(hwnd,hdc); } break; //// default: return DefWindowProc(pMsg); } return 0; }
static LONG WINAPI ConWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { char *cmdString; static qboolean s_timePolarity; switch (uMsg) { case WM_ACTIVATE: if ( LOWORD( wParam ) != WA_INACTIVE ) { SetFocus( s_wcd.hwndInputLine ); } if ( com_viewlog ) { // if the viewlog is open, check to see if it's being minimized if ( com_viewlog->integer == 1 ) { if ( HIWORD( wParam ) ) // minimized flag { Cvar_Set( "viewlog", "2" ); } } else if ( com_viewlog->integer == 2 ) { if ( !HIWORD( wParam ) ) // minimized flag { Cvar_Set( "viewlog", "1" ); } } } break; case WM_CLOSE: //cmdString = CopyString( "quit" ); //Sys_QueEvent( 0, SE_CONSOLE, 0, 0, strlen( cmdString ) + 1, cmdString ); if ( s_wcd.quitOnClose ) { PostQuitMessage( 0 ); } else { Sys_ShowConsole( 0, qfalse ); Cvar_Set( "viewlog", "0" ); } return 0; case WM_CTLCOLORSTATIC: if ( ( HWND ) lParam == s_wcd.hwndBuffer ) { SetBkColor( ( HDC ) wParam, RGB( 0, 0, 0 ) ); SetTextColor( ( HDC ) wParam, RGB( 249, 249, 000 ) ); return ( long ) s_wcd.hbrEditBackground; } else if ( ( HWND ) lParam == s_wcd.hwndErrorBox ) { if ( s_timePolarity & 1 ) { SetBkColor( ( HDC ) wParam, RGB( 0x80, 0x80, 0x80 ) ); SetTextColor( ( HDC ) wParam, RGB( 0xff, 0x00, 0x00 ) ); } else { SetBkColor( ( HDC ) wParam, RGB( 0x80, 0x80, 0x80 ) ); SetTextColor( ( HDC ) wParam, RGB( 0x00, 0x00, 0x00 ) ); } return ( long ) s_wcd.hbrErrorBackground; } return FALSE; break; case WM_COMMAND: if ( wParam == COPY_ID ) { SendMessage( s_wcd.hwndBuffer, EM_SETSEL, 0, -1 ); SendMessage( s_wcd.hwndBuffer, WM_COPY, 0, 0 ); } else if ( wParam == QUIT_ID ) { if ( s_wcd.quitOnClose ) { PostQuitMessage( 0 ); } else { cmdString = CopyString( "quit" ); Sys_QueEvent( 0, SE_CONSOLE, 0, 0, strlen( cmdString ) + 1, cmdString ); } } else if ( wParam == CLEAR_ID ) { SendMessage( s_wcd.hwndBuffer, EM_SETSEL, 0, -1 ); SendMessage( s_wcd.hwndBuffer, EM_REPLACESEL, FALSE, ( LPARAM ) "" ); UpdateWindow( s_wcd.hwndBuffer ); } break; case WM_CREATE: s_wcd.hbrEditBackground = CreateSolidBrush( RGB( 0x00, 0x00, 0x00 ) ); s_wcd.hbrErrorBackground = CreateSolidBrush( RGB( 0x80, 0x80, 0x80 ) ); SetTimer( hWnd, 1, 1000, NULL ); break; case WM_ERASEBKGND: return DefWindowProc( hWnd, uMsg, wParam, lParam ); case WM_TIMER: if ( wParam == 1 ) { s_timePolarity = !s_timePolarity; if ( s_wcd.hwndErrorBox ) { InvalidateRect( s_wcd.hwndErrorBox, NULL, FALSE ); } } break; } return DefWindowProc( hWnd, uMsg, wParam, lParam ); }
// // FUNCTION: WndProc(HWND, unsigned, WORD, LONG) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; int wmId, wmEvent; PAINTSTRUCT ps; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_HELP_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDOK: SendMessage(hWnd, WM_ACTIVATE, MAKEWPARAM(WA_INACTIVE, 0), (LPARAM)hWnd); SendMessage (hWnd, WM_CLOSE, 0, 0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CREATE: s_sai.cbSize = sizeof(SHACTIVATEINFO); hwndCB = CreateRpCommandBar(hWnd); break; case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); HPEN hpen1, hpen2; HBRUSH hbr1, hbr2; hpen1 = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); hpen2 = CreatePen(PS_SOLID, 1, RGB(0, 0, 255)); hbr1 = CreateSolidBrush(RGB(0, 255, 0)); hbr2 = CreateSolidBrush(RGB(0, 255, 255)); SelectObject(hdc, hpen1); POINT pt[2]; pt[0].x = 10; pt[0].y = 10; pt[1].x = 110; pt[1].y = 10; Polyline(hdc, pt, 2); SelectObject(hdc, hbr1); Rectangle(hdc, 40, 40, 80, 80); SelectObject(hdc, hpen2); pt[0].x = 20; pt[0].y = 20; pt[1].x = 20; pt[1].y = 120; Polyline(hdc, pt, 2); SelectObject(hdc, hbr2); Rectangle(hdc, 100, 100, 150, 150); // Clean Up all objects created. SelectObject(hdc, GetStockObject(BLACK_PEN)); SelectObject(hdc, GetStockObject(WHITE_BRUSH)); DeleteObject(hpen1); DeleteObject(hpen2); DeleteObject(hbr1); DeleteObject(hbr2); EndPaint(hWnd, &ps); } break; case WM_DESTROY: CommandBar_Destroy(hwndCB); PostQuitMessage(0); break; case WM_SETTINGCHANGE: SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
void IORegView_Paint(CIORegView* wnd, HWND hWnd, WPARAM wParam, LPARAM lParam) { HDC hDC; PAINTSTRUCT ps; HDC hMemDC; HBITMAP hMemBitmap; RECT rc; HPEN pen; int x, y, w, h; int nameColWidth; int curx, cury; SIZE fontsize; IOReg reg; char txt[80]; GetClientRect(hWnd, &rc); x = 0; y = wnd->rebarHeight; w = rc.right - wnd->vsbWidth; h = rc.bottom - wnd->rebarHeight; curx = kXMargin; cury = wnd->yoff + kYMargin; hDC = BeginPaint(hWnd, &ps); hMemDC = CreateCompatibleDC(hDC); hMemBitmap = CreateCompatibleBitmap(hDC, w, h); SelectObject(hMemDC, hMemBitmap); pen = CreatePen(PS_SOLID, 1, RGB(210, 230, 255)); SelectObject(hMemDC, pen); SelectObject(hMemDC, wnd->hFont); GetTextExtentPoint32(hMemDC, " ", 1, &fontsize); FillRect(hMemDC, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH)); reg = IORegs[wnd->CPU][wnd->Reg]; if ((reg.type == AllRegs) || (reg.type == CatBegin)) { nameColWidth = w - (kXMargin + (fontsize.cx*8) + kXMargin + 1 + kXMargin + kXMargin + 1 + kXMargin + (fontsize.cx*8) + kXMargin); DrawText(hMemDC, reg.name, curx, cury, w, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS); cury += fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury ++; curx = kXMargin; DrawText(hMemDC, "Address", curx, cury+kYMargin, fontsize.cx*8, fontsize.cy, DT_LEFT); curx += (fontsize.cx*8) + kXMargin; MoveToEx(hMemDC, curx, cury, NULL); LineTo(hMemDC, curx, h); curx += 1 + kXMargin; DrawText(hMemDC, "Name", curx, cury+kYMargin, nameColWidth, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS); curx += nameColWidth + kXMargin; MoveToEx(hMemDC, curx, cury, NULL); LineTo(hMemDC, curx, h); curx += 1 + kXMargin; DrawText(hMemDC, "Value", curx, cury+kYMargin, fontsize.cx*8, fontsize.cy, DT_RIGHT); cury += kYMargin + fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; for (int i = wnd->Reg+1; ; i++) { IOReg curReg = IORegs[wnd->CPU][i]; curx = kXMargin; if (curReg.type == CatBegin) { if (reg.type == AllRegs) continue; else break; } else if (curReg.type == ListEnd) break; else if (curReg.type == MMIOReg) { u32 val; sprintf(txt, "%08X", curReg.address); DrawText(hMemDC, txt, curx, cury, fontsize.cx*8, fontsize.cy, DT_LEFT); curx += (fontsize.cx*8) + kXMargin + 1 + kXMargin; DrawText(hMemDC, curReg.name, curx, cury, nameColWidth, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS | DT_NOPREFIX); curx += nameColWidth + kXMargin + 1 + kXMargin; switch (curReg.size) { case 1: val = (u32)MMU_read8(wnd->CPU, curReg.address); sprintf(txt, "%02X", val); break; case 2: val = (u32)MMU_read16(wnd->CPU, curReg.address); sprintf(txt, "%04X", val); break; case 4: val = MMU_read32(wnd->CPU, curReg.address); sprintf(txt, "%08X", val); break; } DrawText(hMemDC, txt, curx, cury, fontsize.cx*8, fontsize.cy, DT_RIGHT); } cury += fontsize.cy + kYMargin; if (cury >= h) break; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; } } else { u32 val; nameColWidth = w - (kXMargin + (fontsize.cx*8) + kXMargin + 1 + kXMargin + kXMargin + 1 + kXMargin + (fontsize.cx*8) + kXMargin); sprintf(txt, "%08X - %s", reg.address, reg.name); DrawText(hMemDC, txt, curx, cury, w, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS | DT_NOPREFIX); cury += fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; switch (reg.size) { case 1: val = (u32)MMU_read8(wnd->CPU, reg.address); sprintf(txt, "Value: %02X", val); break; case 2: val = (u32)MMU_read16(wnd->CPU, reg.address); sprintf(txt, "Value: %04X", val); break; case 4: val = MMU_read32(wnd->CPU, reg.address); sprintf(txt, "Value: %08X", val); break; } DrawText(hMemDC, txt, curx, cury, w, fontsize.cy, DT_LEFT); cury += fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury ++; curx = kXMargin; DrawText(hMemDC, "Bits", curx, cury+kYMargin, fontsize.cx*8, fontsize.cy, DT_LEFT); curx += (fontsize.cx*8) + kXMargin; MoveToEx(hMemDC, curx, cury, NULL); LineTo(hMemDC, curx, h); curx += 1 + kXMargin; DrawText(hMemDC, "Description", curx, cury+kYMargin, nameColWidth, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS); curx += nameColWidth + kXMargin; MoveToEx(hMemDC, curx, cury, NULL); LineTo(hMemDC, curx, h); curx += 1 + kXMargin; DrawText(hMemDC, "Value", curx, cury+kYMargin, fontsize.cx*8, fontsize.cy, DT_RIGHT); cury += kYMargin + fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; for (int i = 0; i < reg.numBitfields; i++) { IORegBitfield bitfield = reg.bitfields[i]; curx = kXMargin; if (bitfield.nbits > 1) sprintf(txt, "Bit%i-%i", bitfield.shift, bitfield.shift + bitfield.nbits - 1); else sprintf(txt, "Bit%i", bitfield.shift); DrawText(hMemDC, txt, curx, cury, fontsize.cx*8, fontsize.cy, DT_LEFT); curx += (fontsize.cx*8) + kXMargin + 1 + kXMargin; DrawText(hMemDC, bitfield.name, curx, cury, nameColWidth, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS | DT_NOPREFIX); curx += nameColWidth + kXMargin + 1 + kXMargin; char bfpattern[8]; sprintf(bfpattern, "%%0%iX", ((bitfield.nbits+3)&~3) >> 2); sprintf(txt, bfpattern, (val >> bitfield.shift) & ((1<<bitfield.nbits)-1)); DrawText(hMemDC, txt, curx, cury, fontsize.cx*8, fontsize.cy, DT_RIGHT); cury += fontsize.cy + kYMargin; if (cury >= h) break; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; } } BitBlt(hDC, x, y, w, h, hMemDC, 0, 0, SRCCOPY); DeleteDC(hMemDC); DeleteObject(hMemBitmap); DeleteObject(pen); EndPaint(hWnd, &ps); }
void CPropertiesWnd::InitPropList() { SetPropListFont(); m_wndPropList.EnableHeaderCtrl(FALSE); m_wndPropList.EnableDescriptionArea(); m_wndPropList.SetVSDotNetLook(); m_wndPropList.MarkModifiedProperties(); CMFCPropertyGridProperty* pGroup1 = new CMFCPropertyGridProperty(_T("Appearance")); pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("3D Look"), (_variant_t) false, _T("Specifies the window's font will be non-bold and controls will have a 3D border"))); CMFCPropertyGridProperty* pProp = new CMFCPropertyGridProperty(_T("Border"), _T("Dialog Frame"), _T("One of: None, Thin, Resizable, or Dialog Frame")); pProp->AddOption(_T("None")); pProp->AddOption(_T("Thin")); pProp->AddOption(_T("Resizable")); pProp->AddOption(_T("Dialog Frame")); pProp->AllowEdit(FALSE); pGroup1->AddSubItem(pProp); pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("Caption"), (_variant_t) _T("About"), _T("Specifies the text that will be displayed in the window's title bar"))); m_wndPropList.AddProperty(pGroup1); CMFCPropertyGridProperty* pSize = new CMFCPropertyGridProperty(_T("Window Size"), 0, TRUE); pProp = new CMFCPropertyGridProperty(_T("Height"), (_variant_t) 250l, _T("Specifies the window's height")); pProp->EnableSpinControl(TRUE, 50, 300); pSize->AddSubItem(pProp); pProp = new CMFCPropertyGridProperty( _T("Width"), (_variant_t) 150l, _T("Specifies the window's width")); pProp->EnableSpinControl(TRUE, 50, 200); pSize->AddSubItem(pProp); m_wndPropList.AddProperty(pSize); CMFCPropertyGridProperty* pGroup2 = new CMFCPropertyGridProperty(_T("Font")); LOGFONT lf; CFont* font = CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT)); font->GetLogFont(&lf); lstrcpy(lf.lfFaceName, _T("Arial")); pGroup2->AddSubItem(new CMFCPropertyGridFontProperty(_T("Font"), lf, CF_EFFECTS | CF_SCREENFONTS, _T("Specifies the default font for the window"))); pGroup2->AddSubItem(new CMFCPropertyGridProperty(_T("Use System Font"), (_variant_t) true, _T("Specifies that the window uses MS Shell Dlg font"))); m_wndPropList.AddProperty(pGroup2); CMFCPropertyGridProperty* pGroup3 = new CMFCPropertyGridProperty(_T("Misc")); pProp = new CMFCPropertyGridProperty(_T("(Name)"), _T("Application")); pProp->Enable(FALSE); pGroup3->AddSubItem(pProp); CMFCPropertyGridColorProperty* pColorProp = new CMFCPropertyGridColorProperty(_T("Window Color"), RGB(210, 192, 254), NULL, _T("Specifies the default window color")); pColorProp->EnableOtherButton(_T("Other...")); pColorProp->EnableAutomaticButton(_T("Default"), ::GetSysColor(COLOR_3DFACE)); pGroup3->AddSubItem(pColorProp); static const TCHAR szFilter[] = _T("Icon Files(*.ico)|*.ico|All Files(*.*)|*.*||"); pGroup3->AddSubItem(new CMFCPropertyGridFileProperty(_T("Icon"), TRUE, _T(""), _T("ico"), 0, szFilter, _T("Specifies the window icon"))); pGroup3->AddSubItem(new CMFCPropertyGridFileProperty(_T("Folder"), _T("c:\\"))); m_wndPropList.AddProperty(pGroup3); CMFCPropertyGridProperty* pGroup4 = new CMFCPropertyGridProperty(_T("Hierarchy")); CMFCPropertyGridProperty* pGroup41 = new CMFCPropertyGridProperty(_T("First sub-level")); pGroup4->AddSubItem(pGroup41); CMFCPropertyGridProperty* pGroup411 = new CMFCPropertyGridProperty(_T("Second sub-level")); pGroup41->AddSubItem(pGroup411); pGroup411->AddSubItem(new CMFCPropertyGridProperty(_T("Item 1"), (_variant_t) _T("Value 1"), _T("This is a description"))); pGroup411->AddSubItem(new CMFCPropertyGridProperty(_T("Item 2"), (_variant_t) _T("Value 2"), _T("This is a description"))); pGroup411->AddSubItem(new CMFCPropertyGridProperty(_T("Item 3"), (_variant_t) _T("Value 3"), _T("This is a description"))); pGroup4->Expand(FALSE); m_wndPropList.AddProperty(pGroup4); }
void sub_81439D0(void) { u8 taskIdA; s16 taskIdC; u8 taskIdB; u16 savedIme; struct Unk201C000 *c000; sub_8144130(); SetVBlankCallback(NULL); ResetPaletteFade(); ResetTasks(); taskIdA = CreateTask(task_a_8143B38, 0); gTasks[taskIdA].data[TDA_4] = 0; gTasks[taskIdA].data[TDA_7] = 0; gTasks[taskIdA].data[TDA_11] = 0; gTasks[taskIdA].data[TDA_13] = 1; while (TRUE) { if (sub_8144ECC(0, taskIdA)) break; } taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID]; gTasks[taskIdC].data[TDC_0] = 40; Text_LoadWindowTemplate(&gWindowTemplate_81E7208); InitMenuWindow(&gWindowTemplate_81E7208); LoadPalette(&gUnknown_0840B7BC, 0x80, sizeof(gUnknown_0840B7BC)); CpuCopy16(&gUnknown_0840B7FC, (void *)(VRAM + 0xBEE0), sizeof(gUnknown_0840B7FC)); REG_BG0VOFS = 0xFFFC; taskIdB = CreateTask(task_b_81441B8, 0); gTasks[taskIdB].data[TDB_TASK_A_ID] = taskIdA; gTasks[taskIdA].data[TDA_TASK_B_ID] = taskIdB; BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); savedIme = REG_IME; REG_IME = 0; REG_IE |= INTR_FLAG_VBLANK; REG_IME = savedIme; REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; SetVBlankCallback(vblank_8143948); m4aSongNumStart(BGM_THANKFOR); SetMainCallback2(sub_814395C); gUnknown_02039325 = 0; c000 = &ewram1c000; sub_81458DC(); c000->unk88 = 0; c000->unk8A = 0; c000->unk8C = 0; gUnknown_02039322 = taskIdA; }
void CButtonST::DrawItem(UINT ctrlID, LPDRAWITEMSTRUCT lpDIS) { CDCHandle pDC = lpDIS->hDC; CPenHandle pOldPen; // Checkbox or Radiobutton style ? if (m_bIsCheckBox) { m_bIsPressed = (lpDIS->itemState & ODS_SELECTED) || m_nCheck; } // Normal button OR other button style ... else { m_bIsPressed = (lpDIS->itemState & ODS_SELECTED); } m_bIsFocused = (lpDIS->itemState & ODS_FOCUS) != 0; m_bIsDisabled = (lpDIS->itemState & ODS_DISABLED) != 0; CRect itemRect = lpDIS->rcItem; pDC.SetBkMode(TRANSPARENT); if (!m_bIsFlat) { if (m_bIsFocused || GetDefault()) { CBrush br; br.CreateSolidBrush(RGB(0,0,0)); pDC.FrameRect(&itemRect, br); itemRect.DeflateRect(1, 1); } } // Prepare draw... paint button background // Draw transparent? if (m_bDrawTransparent) { PaintBk(pDC); } else { OnDrawBackground(pDC, &itemRect); } // Draw pressed button if (m_bIsPressed) { if (m_bIsFlat) { if (m_bDrawBorder) { OnDrawBorder(pDC, &itemRect); } } else { CBrush brBtnShadow; brBtnShadow.CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW)); pDC.FrameRect(&itemRect, brBtnShadow); } } else // ...else draw non pressed button { CPen penBtnHiLight; // White CPen pen3DLight; // Light gray CPen penBtnShadow; // Dark gray CPen pen3DDKShadow; // Black penBtnHiLight.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_BTNHILIGHT)); // White pen3DLight.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_3DLIGHT)); // Light gray penBtnShadow.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_BTNSHADOW)); // Dark gray pen3DDKShadow.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_3DDKSHADOW)); // Black if (m_bIsFlat) { if (m_bMouseOnButton && m_bDrawBorder) { pDC.Draw3dRect(itemRect, ::GetSysColor(COLOR_BTNHILIGHT), ::GetSysColor(COLOR_BTNSHADOW)); } } else { // Draw top-left borders // White line pOldPen = pDC.SelectPen(penBtnHiLight); pDC.MoveTo(itemRect.left, itemRect.bottom-1); pDC.LineTo(itemRect.left, itemRect.top); pDC.LineTo(itemRect.right, itemRect.top); // Light gray line pDC.SelectPen(pen3DLight); pDC.MoveTo(itemRect.left+1, itemRect.bottom-1); pDC.LineTo(itemRect.left+1, itemRect.top+1); pDC.LineTo(itemRect.right, itemRect.top+1); // Draw bottom-right borders // Black line pDC.SelectPen(pen3DDKShadow); pDC.MoveTo(itemRect.left, itemRect.bottom-1); pDC.LineTo(itemRect.right-1, itemRect.bottom-1); pDC.LineTo(itemRect.right-1, itemRect.top-1); // Dark gray line pDC.SelectPen(penBtnShadow); pDC.MoveTo(itemRect.left+1, itemRect.bottom-2); pDC.LineTo(itemRect.right-2, itemRect.bottom-2); pDC.LineTo(itemRect.right-2, itemRect.top); // pDC.SelectPen(pOldPen); } } // Read the button's title CString sTitle; int nLen = GetWindowTextLength(); int nRetLen = GetWindowText(sTitle.GetBufferSetLength(nLen), nLen + 1); CRect captionRect = lpDIS->rcItem; // Draw the icon if (m_csIcons[0].hIcon != 0) { DrawTheIcon(pDC, !sTitle.IsEmpty(), lpDIS->rcItem, captionRect, m_bIsPressed, m_bIsDisabled); } if (m_csBitmaps[0].hBitmap != 0) { pDC.SetBkColor(RGB(255,255,255)); DrawTheBitmap(pDC, !sTitle.IsEmpty(), lpDIS->rcItem, captionRect, m_bIsPressed, m_bIsDisabled); } // Write the button title (if any) if (!sTitle.IsEmpty()) { // Draw the button's title // If button is pressed then "press" title also if (m_bIsPressed && !m_bIsCheckBox) { captionRect.OffsetRect(1, 1); } // Center text CRect centerRect = captionRect; pDC.DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER | DT_CALCRECT); captionRect.OffsetRect((centerRect.Width() - captionRect.Width())/2, (centerRect.Height() - captionRect.Height())/2); pDC.SetBkMode(TRANSPARENT); if (m_bIsDisabled) { captionRect.OffsetRect(1, 1); pDC.SetTextColor(::GetSysColor(COLOR_3DHILIGHT)); pDC.DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER); captionRect.OffsetRect(-1, -1); pDC.SetTextColor(::GetSysColor(COLOR_3DSHADOW)); pDC.DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER); } else { if (m_bMouseOnButton || m_bIsPressed) { pDC.SetTextColor(m_crColors[BTNST_COLOR_FG_IN]); pDC.SetBkColor(m_crColors[BTNST_COLOR_BK_IN]); } else { pDC.SetTextColor(m_crColors[BTNST_COLOR_FG_OUT]); pDC.SetBkColor(m_crColors[BTNST_COLOR_BK_OUT]); } pDC.DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER); } } if (!m_bIsFlat || (m_bIsFlat && m_bDrawFlatFocus)) { // Draw the focus rect if (m_bIsFocused) { CRect focusRect = itemRect; focusRect.DeflateRect(3, 3); pDC.DrawFocusRect(&focusRect); } } }
/** * Dummi modal MsgBox for popup, * this set call function in wait stait and do not freece miranda main thread * the window is outside the desktop */ static INT_PTR CALLBACK MsgBoxPop(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: LPMSGBOX pMsgBox = (LPMSGBOX)lParam; MoveWindow(hDlg, -10, -10, 0, 0, FALSE); LPMSGPOPUPDATA pmpd = (LPMSGPOPUPDATA)mir_alloc(sizeof(MSGPOPUPDATA)); if (pmpd) { POPUPDATAT_V2 pd = { 0 }; pd.cbSize = sizeof(pd); pd.lchContact = NULL; //(HANDLE)wParam; // icon pd.lchIcon = MsgLoadIcon(pMsgBox); mir_tstrncpy(pd.lptzContactName, pMsgBox->ptszTitle, _countof(pd.lptzContactName)); mir_tstrncpy(pd.lptzText, pMsgBox->ptszMsg, _countof(pd.lptzText)); // CALLBAC Proc pd.PluginWindowProc = PopupProc; pd.PluginData = pmpd; pd.iSeconds = -1; pd.lpActions = pmpd->pa; // set color of popup switch (pMsgBox->uType & MB_ICONMASK) { case MB_ICON_ERROR: pd.colorBack = RGB(200, 10, 0); pd.colorText = RGB(255, 255, 255); break; case MB_ICON_WARNING: pd.colorBack = RGB(200, 100, 0); pd.colorText = RGB(255, 255, 255); break; default: if (pMsgBox->uType & MB_CUSTOMCOLOR) { pd.colorBack = pMsgBox->colorBack; pd.colorText = pMsgBox->colorText; } } // handle for MakePopupAction pmpd->hDialog = hDlg; // active buttons switch (MB_TYPE(pMsgBox->uType)) { case MB_OK: MakePopupAction(pmpd->pa[pd.actionCount++], IDOK); break; case MB_OKCANCEL: MakePopupAction(pmpd->pa[pd.actionCount++], IDOK); MakePopupAction(pmpd->pa[pd.actionCount++], IDCANCEL); break; case MB_RETRYCANCEL: MakePopupAction(pmpd->pa[pd.actionCount++], IDRETRY); MakePopupAction(pmpd->pa[pd.actionCount++], IDCANCEL); break; case MB_YESNO: MakePopupAction(pmpd->pa[pd.actionCount++], IDYES); MakePopupAction(pmpd->pa[pd.actionCount++], IDNO); break; case MB_ABORTRETRYIGNORE: MakePopupAction(pmpd->pa[pd.actionCount++], IDABORT); MakePopupAction(pmpd->pa[pd.actionCount++], IDRETRY); MakePopupAction(pmpd->pa[pd.actionCount++], IDIGNORE); break; case MB_YESNOCANCEL: MakePopupAction(pmpd->pa[pd.actionCount++], IDYES); MakePopupAction(pmpd->pa[pd.actionCount++], IDNO); MakePopupAction(pmpd->pa[pd.actionCount++], IDCANCEL); break; case MB_YESALLNO: MakePopupAction(pmpd->pa[pd.actionCount++], IDYES); MakePopupAction(pmpd->pa[pd.actionCount++], IDALL); MakePopupAction(pmpd->pa[pd.actionCount++], IDNO); break; } // create popup CallService(MS_POPUP_ADDPOPUPT, (WPARAM)&pd, APF_NEWDATA); if (MB_TYPE(pMsgBox->uType) == MB_OK) EndDialog(hDlg, IDOK); } break; } return FALSE; }
void CAxRectTracker::Construct() { // do one-time initialization if necessary static BOOL bInitialized; if (!bInitialized) { // sanity checks for assumptions we make in the code ASSERT(sizeof(((RECT*)NULL)->left) == sizeof(int)); ASSERT(offsetof(RECT, top) > offsetof(RECT, left)); ASSERT(offsetof(RECT, right) > offsetof(RECT, top)); ASSERT(offsetof(RECT, bottom) > offsetof(RECT, right)); if (s_afxHatchBrush == NULL) { // create the hatch pattern + bitmap WORD hatchPattern[8]; WORD wPattern = 0x1111; for (int i = 0; i < 4; i++) { hatchPattern[i] = wPattern; hatchPattern[i+4] = wPattern; wPattern <<= 1; } HBITMAP hatchBitmap = CreateBitmap(8, 8, 1, 1, &hatchPattern); if (hatchBitmap == NULL) { AfxThrowResourceException(); } // create black hatched brush s_afxHatchBrush = CreatePatternBrush(hatchBitmap); DeleteObject(hatchBitmap); if (s_afxHatchBrush == NULL) { AfxThrowResourceException(); } } if (s_afxBlackDottedPen == NULL) { // create black dotted pen s_afxBlackDottedPen = CreatePen(PS_DOT, 0, RGB(0, 0, 0)); if (s_afxBlackDottedPen == NULL) { AfxThrowResourceException(); } } // Note: all track cursors must live in same module //[B0000] HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(AFX_IDC_TRACK4WAY), RT_GROUP_CURSOR); // initialize the cursor array //[B0000] s_afxCursors[0] = ::LoadCursor(hInst, MAKEINTRESOURCE(AFX_IDC_TRACKNWSE)); //[B0000] s_afxCursors[1] = ::LoadCursor(hInst, MAKEINTRESOURCE(AFX_IDC_TRACKNESW)); s_afxCursors[0] = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)); //[B0000] s_afxCursors[1] = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)); //[B0000] s_afxCursors[2] = s_afxCursors[0]; s_afxCursors[3] = s_afxCursors[1]; // s_afxCursors[4] = ::LoadCursor(hInst, MAKEINTRESOURCE(AFX_IDC_TRACKNS)); // s_afxCursors[5] = ::LoadCursor(hInst, MAKEINTRESOURCE(AFX_IDC_TRACKWE)); s_afxCursors[4] = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)); s_afxCursors[5] = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)); s_afxCursors[6] = s_afxCursors[4]; s_afxCursors[7] = s_afxCursors[5]; // s_afxCursors[8] = ::LoadCursor(hInst, MAKEINTRESOURCE(AFX_IDC_TRACK4WAY)); // s_afxCursors[9] = ::LoadCursor(hInst, MAKEINTRESOURCE(AFX_IDC_MOVE4WAY)); s_afxCursors[8] = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEALL)); s_afxCursors[9] = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEALL)); // get default handle size from Windows profile setting static const TCHAR szWindows[] = _T("windows"); static const TCHAR szInplaceBorderWidth[] = _T("oleinplaceborderwidth"); s_afxHandleSize = GetProfileInt(szWindows, szInplaceBorderWidth, 4); bInitialized = TRUE; } m_nStyle = 0; m_nHandleSize = s_afxHandleSize; m_sizeMin.cy = m_sizeMin.cx = m_nHandleSize * 2; m_rectLast.SetRectEmpty(); m_sizeLast.cx = m_sizeLast.cy = 0; m_bErase = FALSE; m_bFinalErase = FALSE; }
/////////////////////////////////////////////////////////////////////////// // CAxRectTracker operations void CAxRectTracker::Draw(CDC* pDC) const { // set initial DC state VERIFY(pDC->SaveDC() != 0); pDC->SetMapMode(MM_TEXT); pDC->SetViewportOrg(0, 0); pDC->SetWindowOrg(0, 0); // get normalized rectangle CRect rect = m_rect; rect.NormalizeRect(); CPen* pOldPen = NULL; CBrush* pOldBrush = NULL; CGdiObject* pTemp = NULL; int nOldROP; // draw lines if ((m_nStyle & (dottedLine | solidLine)) != 0) { if (m_nStyle & dottedLine) pOldPen = pDC->SelectObject(CPen::FromHandle(s_afxBlackDottedPen)); else pOldPen = (CPen*)pDC->SelectStockObject(BLACK_PEN); pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH); nOldROP = pDC->SetROP2(R2_COPYPEN); rect.InflateRect(+1, +1); // borders are one pixel outside pDC->Rectangle(rect.left, rect.top, rect.right, rect.bottom); pDC->SetROP2(nOldROP); } // if hatchBrush is going to be used, need to unrealize it if ((m_nStyle & (hatchInside | hatchedBorder)) != 0) UnrealizeObject(s_afxHatchBrush); // hatch inside if ((m_nStyle & hatchInside) != 0) { pTemp = pDC->SelectStockObject(NULL_PEN); if (pOldPen == NULL) pOldPen = (CPen*)pTemp; pTemp = pDC->SelectObject(CBrush::FromHandle(s_afxHatchBrush)); if (pOldBrush == NULL) pOldBrush = (CBrush*)pTemp; pDC->SetBkMode(TRANSPARENT); nOldROP = pDC->SetROP2(R2_MASKNOTPEN); pDC->Rectangle(rect.left+1, rect.top+1, rect.right, rect.bottom); pDC->SetROP2(nOldROP); } // draw hatched border if ((m_nStyle & hatchedBorder) != 0) { pTemp = pDC->SelectObject(CBrush::FromHandle(s_afxHatchBrush)); if (pOldBrush == NULL) pOldBrush = (CBrush*)pTemp; pDC->SetBkMode(OPAQUE); CRect rectTrue; GetTrueRect(&rectTrue); pDC->PatBlt(rectTrue.left, rectTrue.top, rectTrue.Width(), rect.top-rectTrue.top, 0x000F0001 /* Pn */); pDC->PatBlt(rectTrue.left, rect.bottom, rectTrue.Width(), rectTrue.bottom-rect.bottom, 0x000F0001 /* Pn */); pDC->PatBlt(rectTrue.left, rect.top, rect.left-rectTrue.left, rect.Height(), 0x000F0001 /* Pn */); pDC->PatBlt(rect.right, rect.top, rectTrue.right-rect.right, rect.Height(), 0x000F0001 /* Pn */); } // draw resize handles if ((m_nStyle & (resizeInside | resizeOutside)) != 0) { UINT mask = GetHandleMask(); for (int i = 0; i < 8; ++i) { if (mask & (1<<i)) { GetHandleRect((TrackerHit)i, &rect); pDC->FillSolidRect(rect, RGB(0, 0, 0)); } } } // cleanup pDC state if (pOldPen != NULL) pDC->SelectObject(pOldPen); if (pOldBrush != NULL) pDC->SelectObject(pOldBrush); VERIFY(pDC->RestoreDC(-1)); }
LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { PAINTSTRUCT Ps; switch(msg) { case WM_CREATE: { /** * Create AddFood Button */ HFONT hFont = CreateFont(30,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS, CLIP_DEFAULT_PRECIS,NULL, VARIABLE_PITCH,TEXT("Impact")); HWND hButtonAddFood = CreateWindowEx(NULL, "BUTTON", "ADD FOOD", WS_TABSTOP|WS_VISIBLE| WS_CHILD|BS_DEFPUSHBUTTON|BS_TOP, 10, 150, 100, 25, hWnd, (HMENU)BUTTON_ADD_FOOD, GetModuleHandle(NULL), NULL); /** * Create button ShowFoodNumber */ HWND hShowFoodNumber = CreateWindowEx(NULL, "BUTTON", "Funny", WS_TABSTOP|WS_VISIBLE| WS_CHILD|BS_DEFPUSHBUTTON|BS_TOP, 10, 180, 300, 40, hWnd, (HMENU)BUTTON_DISPLAY_FOOD_NR, GetModuleHandle(NULL), NULL); SendMessage (hShowFoodNumber, WM_SETFONT, WPARAM (hFont), TRUE); /** * Draw Food List (In a input box) */ hFoodList = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_READONLY| ES_MULTILINE, 10, 40, 300, 100, hWnd, (HMENU)INPUT_TEXT_SHOW_FOOD, GetModuleHandle(NULL), NULL); /** * Draw main Input food field */ hInputFood = CreateWindowEx( (DWORD)NULL, TEXT("edit"), "", WS_VISIBLE | WS_CHILD | WS_BORDER, 120, 150, 190, 25, hWnd, (HMENU)INPUT_TEXT_ADD_FOOD, GetModuleHandle(NULL), NULL); } break; case WM_PAINT: { HDC hdc = BeginPaint(hWnd, &Ps); RECT rect; /** * Draw Text */ // Second Text char foodNrMessage[256] = "Number : "; char nr[50]; strcat(foodNrMessage, itoa(foodNumber, nr, 10)); SetBkMode(hdc, TRANSPARENT); SetRect(&updateRect, 210, 10, 300, 30); DrawText( hdc, foodNrMessage, -1, &updateRect, DT_SINGLELINE | DT_NOCLIP ) ; // First Text HFONT hFont = CreateFont(25,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS, CLIP_DEFAULT_PRECIS,NULL, VARIABLE_PITCH,TEXT("Impact")); SetRect(&rect, 10, 10, 50, 50); SelectObject(hdc, hFont); SetBkMode(hdc, OPAQUE); SetBkColor(hdc, RGB(0,255,255)); SetTextColor(hdc, RGB(255,0,0)); DrawText(hdc, TEXT(firstText), -1,&rect, DT_NOCLIP); EndPaint(hWnd, &Ps); } break; case WM_CTLCOLOREDIT: { HDC hdc = (HDC)wParam; HWND hwnd = (HWND)lParam; HBRUSH color; if (GetDlgCtrlID(hwnd) == INPUT_TEXT_ADD_FOOD) { color = CreateSolidBrush(RGB(225, 225, 225)); SetTextColor(hdc, RGB(0, 0, 255)); SetBkMode(hdc, TRANSPARENT); SetBkColor(hdc,(LONG)color); } return (LONG) color; } break; case WM_COMMAND: { switch(LOWORD(wParam)) { case BUTTON_ADD_FOOD: { char buffer[256]; SendMessage(hInputFood, WM_GETTEXT, sizeof(buffer)/sizeof(buffer[0]), reinterpret_cast<LPARAM>(buffer)); if(strlen(buffer) > 0){ char newInput[255] = ""; char stat[30]; strcat(newInput, itoa((foodNumber+1), stat, 10) ); strcat(newInput, " ) "); strcat(newInput, buffer); strcat(newInput, "\r\n"); SendMessage(hFoodList, EM_REPLACESEL, FALSE, (LPARAM)newInput); SendMessage(hInputFood, WM_SETTEXT, NULL, (LPARAM)""); foodNumber++; InvalidateRect(hWnd, &updateRect, TRUE); } } break; case BUTTON_DISPLAY_FOOD_NR: { char buffer[255] = ""; switch(foodNumber){ case 0:http://pastebin.com/62fGU90U case 1: case 2: case 3: strcat(buffer, "You are not hungry at all"); break; case 4: case 5: case 6: strcat(buffer, "I see you are hungry now"); break; default: strcat(buffer, "You are starvin... go get something to eat"); break; } MessageBox(NULL, buffer, "Funny", MB_ICONINFORMATION); } break; } } break; case WM_SIZE: { INT nWidth = LOWORD(lParam); HWND hFunnyButton = GetDlgItem(hWnd, BUTTON_DISPLAY_FOOD_NR); MoveWindow(hFunnyButton, 10, 180, nWidth - 17, 40, TRUE); HWND hShowFoodInput = GetDlgItem(hWnd, INPUT_TEXT_SHOW_FOOD); HWND hAddFood = GetDlgItem(hWnd, INPUT_TEXT_ADD_FOOD); MoveWindow(hShowFoodInput, 10, 40, nWidth - 18, 100, TRUE); MoveWindow(hAddFood, 120, 150, nWidth - 128, 25, TRUE); } break; case WM_GETMINMAXINFO: { MINMAXINFO * mmiStruct; mmiStruct = (MINMAXINFO*)lParam; POINT ptPoint; ptPoint.x = 335; //Minimum width of the window. ptPoint.y = 260; //Minimum height of the window. mmiStruct->ptMinTrackSize = ptPoint; ptPoint.x = GetSystemMetrics(SM_CXMAXIMIZED); //Maximum width of the window. ptPoint.y = GetSystemMetrics(SM_CYMAXIMIZED); //Maximum height of the window. mmiStruct->ptMaxTrackSize = ptPoint; } break; case WM_DESTROY: { PostQuitMessage(0); return 0; } break; } return DefWindowProc(hWnd,msg,wParam,lParam); }
void CDynControl::PrepareDataArray() { if(IsNew==0) return; IsNew=0; csPropertyName="Основные"; if(m_nControlType == ID_DYNBUTTONTREE)//TREE { csPropertyName="Дерево"; AddBoolProperty("Есть кнопки",1); AddBoolProperty("Есть линии",1); AddBoolProperty("Есть корневая линия",1); AddBoolProperty("Есть пиктограммы",0); AddStringProperty("Тип значения",nTypeValue,"ДеревоЗначений"); AddFuncProperty("Выбор",NM_DBLCLK,""); AddFuncProperty("Выделение",TVN_SELCHANGED,""); AddFuncProperty("Откр. ветки",TVN_ITEMEXPANDED,""); AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); } else if(m_nControlType == ID_DYNBUTTONGRID)//GRID { csPropertyName="Grid"; AddIntProperty("Число строк",20); AddIntProperty("Число колонок",10); AddIntProperty("Число фикс.стр",1); AddIntProperty("Число фикс.кол.",1); AddBoolProperty("Разрешить редактирование",1); AddBoolProperty("",1); AddBoolProperty("",1); // AddBoolProperty("Выделять фикс.колонки",1);//5 // AddBoolProperty("Выделять фикс.строки",1); AddBoolProperty("Сортировка колонок",1); AddIntProperty("Высота ячейки",16); AddIntProperty("Ширина ячейки",130); AddBoolProperty("",1); // AddBoolProperty("Выделение строки",1);//10 AddBoolProperty("Авторазмер колонок",0); AddBoolProperty("Виртуальный режим",0); AddColorProperty("Цвет фона таблицы",RGB(255,255,255)); AddStringProperty("Тип значения",nTypeValue,csPropertyName); AddFuncProperty("Начало редактирования",GVN_BEGINLABELEDIT,""); AddFuncProperty("Двойн.лев.кнопка",NM_DBLCLK,""); AddFuncProperty("Левая кнопка",NM_CLICK,""); AddFuncProperty("Правая кнопка",NM_RCLICK,""); AddFuncProperty("Окончание редактирования",GVN_ENDLABELEDIT,""); AddFuncProperty("Начало выделения",GVN_SELCHANGING,""); AddFuncProperty("Окончание выделения",GVN_SELCHANGED,""); AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); AddFuncProperty("Обратный вызов виртуального режима",9999,""); } else if (m_nControlType == ID_DYNBUTTONEDIT) // EDIT { csPropertyName="Реквизит диалога"; AddStringProperty("Тип значения",nTypeValue,"Строка"); AddBoolProperty("Неограниченная длина",1); AddIntProperty("Длина",10); AddIntProperty("Точность",0); AddBoolProperty("Неотрицательный",0);//4 AddBoolProperty("Многострочный",0); AddBoolProperty("Ввод пароля",0); AddBoolProperty("Кнопка выбора",0);//7 AddBoolProperty("Запретить редактирование",0);//8 AddFuncProperty("Выбор",WM_ONSELECT,""); AddFuncProperty("Редактирование",EN_CHANGE,""); AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); } else if (m_nControlType == ID_DYNBUTTONRADIO) // RADIO { csPropertyName="Переключатель"; AddBoolProperty("Первый в группе",0); AddStringProperty("Тип значения",nTypeValue,""); AddFuncProperty("Выбор",BN_CLICKED,""); AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); } else if (m_nControlType == ID_DYNBUTTONLISTBOX) // LISTBOX { csPropertyName="Список"; AddBoolProperty("Мультивыделение строк",0); AddStringProperty("Тип значения",nTypeValue,"СписокЗначений"); AddFuncProperty("Выбор",LBN_DBLCLK,""); AddFuncProperty("Позиционирование",LBN_SELCHANGE,""); //LBN_SELCANCEL AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); } else if (m_nControlType == ID_DYNBUTTONLABEL) // LABEL { csPropertyName="Надпись"; AddIntProperty("Размер шрифта",8); AddBoolProperty("Жирность",0); AddBoolProperty("Наклон",0); AddBoolProperty("Подчеркивание",0); AddColorProperty("Цвет",0); AddStringProperty("Положение гориз",1,"Лево");//5 AddStringProperty("Положение верт",0,"Центр");//6 AddFuncProperty("Нажатие",BN_CLICKED,"");//7 AddFuncProperty("Формула надписи",NM_CUSTOMDRAW,""); //AddFuncProperty("Формула",ANY_MESSAGE,""); } else if (m_nControlType == ID_DYNBUTTONCOMBO) // COMBO { csPropertyName="Поле со списком"; AddStringProperty("Тип значения",nTypeValue,"СписокЗначений"); //AddStringProperty("Тип значения",nTypeValue,""); AddFuncProperty("Выбор",CBN_SELENDOK,""); AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); } else if (m_nControlType == ID_DYNBUTTONGROUP) // GROUPBOX csPropertyName="Рамка группы"; else if (m_nControlType == ID_DYNBUTTONCHECK) // CHECK { csPropertyName="Флажок"; AddStringProperty("Тип значения",nTypeValue,""); AddFuncProperty("Выбор",BN_CLICKED,""); AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); } else if (m_nControlType == ID_DYNBUTTON) // BUTTON { csPropertyName="Кнопка"; AddBoolProperty("Кнопка по умолчанию",0); AddStringProperty("Тип значения",nTypeValue,""); AddFuncProperty("Нажатие",BN_CLICKED,""); AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); AddColorProperty("Цвет",0);//4 AddIntProperty("Картинка",0);//5 AddStringProperty("Картинка гориз",1,"Лево");//6 AddStringProperty("Картинка верт",0,"Верх");//7 } else if (m_nControlType == ID_DYNBUTTONDATE) // DATE csPropertyName="Дата"; else if (m_nControlType == ID_BUTTONPROGRESS) // CProgressCtrl { csPropertyName="Индикатор"; AddIntProperty("Мин. значение",0); AddIntProperty("Макс. значение",100); AddBoolProperty("Вертикальное расположение",0); AddBoolProperty("Непрерывное заполнение",0); AddStringProperty("Тип значения",nTypeValue,""); } else if (m_nControlType == ID_BUTTONSLIDER) // CSliderCtrl { csPropertyName="Слайдер"; AddIntProperty("Мин. значение",0); AddIntProperty("Макс. значение",100); AddBoolProperty("Вертикальное расположение",0); AddBoolProperty("Инвертировать направление",1); AddBoolProperty("Маркеры",0);//4 AddStringProperty("Тип значения",nTypeValue,""); AddFuncProperty("Движение",NM_CUSTOMDRAW,""); AddFuncProperty("Нажатие клавиши",WM_KEYDOWN,""); AddFuncProperty("При изменении",NM_RELEASEDCAPTURE,""); } else if (m_nControlType == ID_BUTTONFORMOBJECT) //Пользовательская форма - микроформа { csPropertyName=m_csObjName;//"микроформа"; } else if (m_nControlType == ID_BUTTON_TAB)//CTabCtrl { AddFuncProperty("Выбор",TCN_SELCHANGE,"");//0 AddBoolProperty("Кнопки",0);//1 TCS_BUTTONS AddBoolProperty("Многострочный",0);//2 TCS_MULTILINE AddBoolProperty("Вертикально",0);//3 TCS_VERTICAL AddBoolProperty("Перевернуть",0);//4 TCS_BOTTOM + TCS_RIGHT } }
void KMyCanvas::OnDraw(HDC hDC, const RECT * rcPaint) { if ( m_lastlimit>= m_limit ) return; TCHAR title [MAX_PATH]; sprintf(title, "Mandelbrot Set (%f %f) zoom %d:%d unit %f", m_x, m_y, m_zoommul, m_zoomdiv, m_unit); SetWindowText(GetParent(m_hWnd), title); int tick = GetTickCount(); if ( rcPaint ) m_lastlimit = 0; RECT rect; GetClientRect(m_hWnd, & rect); int x0 = GetScrollPos(m_hWnd, SB_HORZ); int y0 = GetScrollPos(m_hWnd, SB_VERT); // ClearBuffer(rect.right, rect.bottom, x0, y0); HRGN hRgn = CreateRectRgn(0, 0, 1, 1); { GetRandomRgn(hDC, hRgn, SYSRGN); POINT p0; GetDCOrgEx(hDC, & p0); // change region to be relative to DC, NT only // if ( HIWORD(hDC) ) OffsetRgn(hRgn, - p0.x, - p0.y); } m_lastlimit += 16; for (int y=0; y<rect.bottom; y++) { COLORREF lastc = 0xFFFFFFFF; int count = 0; for (int x=0; x<rect.right; x++) // if ( Buffer[y][x]==0 ) if ( PtInRegion(hRgn, x, y) ) { int count = MandelCount(NULL, x+x0, y+y0, m_limit); COLORREF c = 0; if ( count==0 ) // don't know c = RGB(64, 78, 170); // Red else if ( count>0 ) // yes c = In[count]; // green else if ( count< -3 ) c = Out[-count]; // Buffer[y][x] = count; if ( c ) SetPixel(hDC, x+x0, y+y0, c); } } tick = GetTickCount() - tick; wsprintf(title, "tick %d", tick); m_pStatus->SetText(1, title); }
LRESULT OnPaint(HWND hWnd,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; int idx; HPEN hPen,hOldPen; HBRUSH hBrush,hOldBrush; RECT crt; HDC hMemDC; HBITMAP hOldBitmap; int x,y; hdc=BeginPaint(hWnd, &ps); hMemDC=CreateCompatibleDC(hdc); GetClientRect(hWnd,&crt); if (hBackBit == NULL) { hBackBit=CreateCompatibleBitmap(hdc,crt.right,crt.bottom); } hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBackBit); FillRect(hMemDC,&crt,GetSysColorBrush(COLOR_WINDOW)); if (bGridLine) { hPen=CreatePen(PS_SOLID,1,RGB(192,192,192)); hOldPen=(HPEN)SelectObject(hMemDC,hPen); for (y=0;y<crt.bottom;y=y+GridLineY*GridY) { MoveToEx(hMemDC,0,y,NULL); LineTo(hMemDC,crt.right,y); } for (x=0;x<crt.right;x=x+GridLineX*GridX) { MoveToEx(hMemDC,x,0,NULL); LineTo(hMemDC,x,crt.bottom); } DeleteObject(SelectObject(hMemDC,hOldPen)); } for (idx=0;idx<arNum;idx++) { if (arObj[idx]->LineColor == (COLORREF)-1) { hPen=(HPEN)GetStockObject(NULL_PEN); } else { hPen=CreatePen(PS_INSIDEFRAME,arObj[idx]->LineWidth,arObj[idx]->LineColor); } hOldPen=(HPEN)SelectObject(hMemDC,hPen); if (arObj[idx]->PlaneColor == (COLORREF)-1) { hBrush=(HBRUSH)GetStockObject(NULL_BRUSH); } else { hBrush=CreateSolidBrush(arObj[idx]->PlaneColor); } hOldBrush=(HBRUSH)SelectObject(hMemDC,hBrush); switch (arObj[idx]->Type) { case DT_LINE: if ((arObj[idx]->Flag & 0x3) == DS_LT || (arObj[idx]->Flag & 0x3) == DS_RB) { MoveToEx(hMemDC,arObj[idx]->rt.left,arObj[idx]->rt.top,NULL); LineTo(hMemDC,arObj[idx]->rt.right,arObj[idx]->rt.bottom); } else { MoveToEx(hMemDC,arObj[idx]->rt.left,arObj[idx]->rt.bottom,NULL); LineTo(hMemDC,arObj[idx]->rt.right,arObj[idx]->rt.top); } break; case DT_ELLIPSE: Ellipse(hMemDC,arObj[idx]->rt.left,arObj[idx]->rt.top, arObj[idx]->rt.right,arObj[idx]->rt.bottom); break; case DT_RECTANGLE: Rectangle(hMemDC,arObj[idx]->rt.left,arObj[idx]->rt.top, arObj[idx]->rt.right,arObj[idx]->rt.bottom); break; } SelectObject(hMemDC,hOldPen); SelectObject(hMemDC,hOldBrush); if (arObj[idx]->LineColor != (COLORREF)-1) { DeleteObject(hPen); } if (arObj[idx]->PlaneColor != (COLORREF)-1) { DeleteObject(hBrush); } } if (NowSel != -1) { DrawTracker(hMemDC,NowSel); } BitBlt(hdc,0,0,crt.right,crt.bottom,hMemDC,0,0,SRCCOPY); SelectObject(hMemDC,hOldBitmap); DeleteDC(hMemDC); EndPaint(hWnd, &ps); return 0; }
///////////////////////////////////////////////////////////////////////////////////////////////// // Method name : DisplayBrightness // Arguments : // 1) HDC hMemDC -- Device context // 2) RECT &r -- Rectangle position // 3) int nRedVal -- Red color Value. If it have +ve, it's going to Dark RED. // If it's -ve , it's going to Light RED // 4) int nGreenVal-- Green color Value. If it have +ve, it's going to Dark Green . // If it's -ve , it's going to Light Green // 5) int nBlueVal -- Blue color Value. If it have +ve, it's going to Dark Blue. // If it's -ve , it's going to Light Blue // These Red,Green,Blue value between -255 to 255 // Return type : void // Description : Brightness have 2 types. 1) Dark 2) light. // Formula : Color = Color + nColorVal; (ex) Red = Red + nRedVal; Blue = Blue + nBlueVal // Precondition : 1)gdiplus should be intialize 2) Image should be load // Postcondition: None ///////////////////////////////////////////////////////////////////////////////////////////////// void CImageProcess::DisplayBrightness(HDC hMemDC, RECT &r, int nRedVal, int nGreenVal, int nBlueVal) { BITMAPINFO bi; BOOL bRes; char *buf; // Bitmap header bi.bmiHeader.biSize = sizeof(bi.bmiHeader); bi.bmiHeader.biWidth = m_nWidth; bi.bmiHeader.biHeight = m_nHeight; bi.bmiHeader.biPlanes = 1; bi.bmiHeader.biBitCount = 32; bi.bmiHeader.biCompression = BI_RGB; bi.bmiHeader.biSizeImage = m_nWidth * 4 * m_nHeight; bi.bmiHeader.biClrUsed = 0; bi.bmiHeader.biClrImportant = 0; // Buffer buf = (char *) malloc(m_nWidth * 4 * m_nHeight); // Don't use getPixel and SetPixel.It's very slow. // Get the all scanline. bRes = GetDIBits(hMemDC, m_hBitmap, 0, m_nHeight, buf, &bi, DIB_RGB_COLORS); long nCount=0; for (int i=0; i<m_nHeight; ++i) { for (int j=0; j<m_nWidth; ++j) { long lVal=0; memcpy(&lVal, &buf[nCount], 4); // Get the reverse order int b = GetRValue(lVal); int g = GetGValue(lVal); int r = GetBValue(lVal); // Red r += nRedVal; if (r >255) { r = 255; } if (r <0) { r = 0; } // Green g += nGreenVal; if (g>255) { g = 255; } if (g<0) { g = 0; } // Blue b += nBlueVal; if (b >255) { b = 255; } if (b<0) { b = 0; } // Store reverse order lVal = RGB(b, g, r); memcpy(&buf[nCount], &lVal, 4); // Increment with 4. RGB color take 4 bytes.The high-order byte must be zero // See in MSDN COLORREF nCount+=4; } } // Set again SetDIBits(hMemDC, m_hBitmap, 0, bRes, buf, &bi, DIB_RGB_COLORS); free(buf); RECT tmpRect = r; tmpRect.right += 16; tmpRect.bottom += 16; InvalidateRect(GetActiveWindow(), &tmpRect, FALSE); }
const TCHAR TABBAR_ACTIVEUNFOCUSEDINDCATOR[64] = TEXT("Active tab unfocused indicator"); const TCHAR TABBAR_ACTIVETEXT[64] = TEXT("Active tab text"); const TCHAR TABBAR_INACTIVETEXT[64] = TEXT("Inactive tabs"); bool TabBarPlus::_doDragNDrop = false; bool TabBarPlus::_drawTopBar = true; bool TabBarPlus::_drawInactiveTab = true; bool TabBarPlus::_drawTabCloseButton = false; bool TabBarPlus::_isDbClk2Close = false; bool TabBarPlus::_isCtrlVertical = false; bool TabBarPlus::_isCtrlMultiLine = false; COLORREF TabBarPlus::_activeTextColour = ::GetSysColor(COLOR_BTNTEXT); COLORREF TabBarPlus::_activeTopBarFocusedColour = RGB(250, 170, 60); COLORREF TabBarPlus::_activeTopBarUnfocusedColour = RGB(250, 210, 150); COLORREF TabBarPlus::_inactiveTextColour = grey; COLORREF TabBarPlus::_inactiveBgColour = RGB(192, 192, 192); HWND TabBarPlus::_hwndArray[nbCtrlMax] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; int TabBarPlus::_nbCtrl = 0; struct CloseButtonZone { CloseButtonZone(): _width(11), _hight(11), _fromTop(5), _fromRight(3){}; bool isHit(int x, int y, const RECT & testZone) const { if (((x + _width + _fromRight) < testZone.right) || (x > (testZone.right - _fromRight))) return false;
///////////////////////////////////////////////////////////////////////////////////////////////// // Method name : DisplayContrast // Arguments : // 1) HDC hMemDC -- Device context // 2) RECT &r -- Rectangle position // 3) int nContrastVal -- Contrast value(Value between 0 to 200) // Return type : void // Description : It have 2 type. 1) Low contrast 2) High contrast // Formula : Color = ((Color-128)*nContrastVal)/100 +128; // Precondition : 1)gdiplus should be intialize 2) Image should be load // Postcondition: ///////////////////////////////////////////////////////////////////////////////////////////////// void CImageProcess::DisplayContrast(HDC hMemDC, RECT &r, int nContrastVal) { BITMAPINFO bi; BOOL bRes; char *buf; // Bitmap header bi.bmiHeader.biSize = sizeof(bi.bmiHeader); bi.bmiHeader.biWidth = m_nWidth; bi.bmiHeader.biHeight = m_nHeight; bi.bmiHeader.biPlanes = 1; bi.bmiHeader.biBitCount = 32; bi.bmiHeader.biCompression = BI_RGB; bi.bmiHeader.biSizeImage = m_nWidth * 4 * m_nHeight; bi.bmiHeader.biClrUsed = 0; bi.bmiHeader.biClrImportant = 0; buf = (char *) malloc(m_nWidth * 4 * m_nHeight); bRes = GetDIBits(hMemDC, m_hBitmap, 0, m_nHeight, buf, &bi, DIB_RGB_COLORS); long nCount=0; for (int i=0; i<m_nHeight; ++i) { for (int j=0; j<m_nWidth; ++j) { long lVal=0; memcpy(&lVal, &buf[nCount], 4); // Get from buffer in reverse order int b = GetRValue(lVal); int g = GetGValue(lVal); int r = GetBValue(lVal); r = ((r-128)*nContrastVal)/100 +128; g = ((g-128)*nContrastVal)/100 +128; b = ((b-128)*nContrastVal)/100 +128; // Red if (r >255) { r = 255; } if (r <0) { r = 0; } // Green if (g>255) { g = 255; } if (g<0) { g = 0; } // Blue if (b >255) { b = 255; } if (b<0) { b = 0; } // Store in reverse order lVal = RGB((int)b, (int)g, (int)r); memcpy(&buf[nCount], &lVal, 4); nCount+=4; } } SetDIBits(hMemDC, m_hBitmap, 0, bRes, buf, &bi, DIB_RGB_COLORS); free(buf); RECT tmpRect = r; tmpRect.right += 16; tmpRect.bottom += 16; InvalidateRect(GetActiveWindow(), &tmpRect, FALSE); }
//初始化函数 BOOL CBankDlg::OnInitDialog() { __super::OnInitDialog(); TCHAR buffer[128], szTip[128]; //贴图 CString s=CBcfFile::GetAppPath ();/////本地路径 CBcfFile f( s + "skin.bcf"); CString key=Glb().m_skin; TCHAR path[MAX_PATH]; CString skinfolder; //skinfolder=f.GetKeyVal(key,"skinfolder","image\\client\\skin0\\"); skinfolder.Format("%s%s", "..\\", f.GetKeyVal(key,"skinfolder","image\\client\\skin0\\")); CGameImage m_bt; wsprintf(path,"%sdialog\\msg_bk.bmp",skinfolder); m_bkimage.SetLoadInfo(path,CGameImageLink::m_bAutoLock); CGameImageHelper ImageHandle(&m_bkimage); int cx,cy; HRGN hRgn=AFCBmpToRgn(ImageHandle,m_bkimage.GetPixel(0,0),RGB(1,1,1)); if (hRgn!=NULL) { SetWindowRgn(hRgn,TRUE); } cx=ImageHandle.GetWidth(); cy=ImageHandle.GetHeight(); SetWindowPos(NULL,0,0,cx,cy,SWP_NOMOVE|SWP_NOZORDER); //wsprintf(path,"%sdialog\\WalletCancle_bt.BMP",skinfolder); //m_bt.SetLoadInfo(path,true); //m_btcancel.LoadButtonBitmap(path,false); // CGameImage m_bt; HRGN hRgn2; wsprintf(path,"%sdialog\\win_close.bmp",skinfolder); m_BtCancel.LoadButtonBitmap(path,false); m_bt.SetLoadInfo(path,CGameImageLink::m_bAutoLock); //hRgn2=AFCBmpToRgn(m_bt,m_bt.GetPixel(0,0),RGB(1,1,1)); //if(hRgn2) // m_BtCancel.SetWindowRgn(hRgn2,true); m_BtCancel.SetWindowPos(NULL,0,0,m_bt.GetWidth()/4,m_bt.GetHeight(),SWP_NOMOVE|SWP_NOZORDER); //wsprintf(path,"%sdialog\\OutMoney_bt.bmp",skinfolder); //m_bt.SetLoadInfo(path,true); wsprintf(path,"%slogon\\button.bmp",skinfolder); m_bt.SetLoadInfo(path,CGameImageLink::m_bAutoLock); // CGameImageHelper bthelp(&m_bt); hRgn2=AFCBmpToRgn(m_bt,m_bt.GetPixel(0,0),RGB(1,1,1)); m_btCheckOut.LoadButtonBitmap(path,false); if(hRgn2) m_btCheckOut.SetWindowRgn(hRgn2,true); //m_btCheckOut.SetWindowPos(NULL,0,0,m_bt.GetWidth()/4,m_bt.GetHeight(),SWP_NOMOVE|SWP_NOZORDER); //wsprintf(path,"%sdialog\\InMoney_bt.bmp",skinfolder); //m_bt.SetLoadInfo(path,true); //m_btCheckIn.LoadButtonBitmap(path,false); //if(hRgn2) // m_btCheckIn.SetWindowRgn(hRgn2,true); m_btQuery.LoadButtonBitmap(path,false); if(hRgn2) m_btQuery.SetWindowRgn(hRgn2,true); //m_btCheckIn.SetWindowPos(NULL,0,0,m_bt.GetWidth()/4,m_bt.GetHeight(),SWP_NOMOVE|SWP_NOZORDER); m_btTransfer.LoadButtonBitmap(path,false); if(hRgn2) m_btTransfer.SetWindowRgn(hRgn2,true); //m_btTransfer.SetWindowPos(NULL,0,0,m_bt.GetWidth()/4,m_bt.GetHeight(),SWP_NOMOVE|SWP_NOZORDER); ZeroMemory(buffer,sizeof(buffer)); GlbGetNumString(buffer, m_BankMoney, Glb().m_nPowerOfGold/*, true*/, Glb().m_bUseSpace, Glb().m_strSpaceChar); SetDlgItemTextA(IDC_EDIT_MONEY,buffer); GlbGetNumString(buffer, m_RoomMoney, Glb().m_nPowerOfGold/*, true*/, Glb().m_bUseSpace, Glb().m_strSpaceChar); SetDlgItemTextA(IDC_EDIT_MONEY_ROOM,buffer); ZeroMemory(buffer,sizeof(buffer)); switch(Glb().m_nPowerOfGold) { case 1: _tcscat( buffer, TEXT("十")); break; case 2: _tcscat( buffer, TEXT("百")); break; case 3: _tcscat( buffer, TEXT("千")); break; case 4: _tcscat( buffer, TEXT("万")); break; } _tcscpy(szTip, "存取最小单位:"); _tcscat(szTip, buffer); _tcscat( buffer, TEXT("金币")); SetDlgItemTextA(IDC_STATIC_TIP, szTip); m_bkBrush=CreateSolidBrush(m_bkimage.GetPixel(32,55)); //_tcscpy( buffer, TEXT("1")); //for (int i=0; i<Glb().m_nPowerOfGold; ++i) //{ // _tcscat( buffer, TEXT("0")); //} //wsprintf( szTip, "X %s", buffer); //SetDlgItemTextA(IDC_UNIT, szTip); return true; }
///////////////////////////////////////////////////////////////////////////////////////////////// // Method name : DisplaySharpness // Arguments : // 1) HDC hMemDC -- Device context // 2) RECT &r -- Rectangle position // Return type : void // Formula : (C1*5) - (C2+C3+C4+C5) // Precondition : 1)gdiplus should be intialize // Postcondition: None ///////////////////////////////////////////////////////////////////////////////////////////////// void CImageProcess::DisplaySharpness(HDC hMemDC, RECT &r) { BITMAPINFO bi; BOOL bRes; char *pOriBuf; // Original buffer // Bitmap header bi.bmiHeader.biSize = sizeof(bi.bmiHeader); bi.bmiHeader.biWidth = m_nWidth; bi.bmiHeader.biHeight = m_nHeight; bi.bmiHeader.biPlanes = 1; bi.bmiHeader.biBitCount = 32; bi.bmiHeader.biCompression = BI_RGB; bi.bmiHeader.biSizeImage = m_nWidth * 4 * m_nHeight; bi.bmiHeader.biClrUsed = 0; bi.bmiHeader.biClrImportant = 0; pOriBuf = (char *) malloc(m_nWidth * 4 * m_nHeight); char *tmpBuf = (char *) malloc(m_nWidth * 4 * m_nHeight); bRes = GetDIBits(hMemDC, m_hBitmap, 0, m_nHeight, pOriBuf, &bi, DIB_RGB_COLORS); long nCount=0; long c1, c2, c3, c4, c5; // Retrive from original buffer // Caluculate the value and store new value into tmpBuf for (int i=0; i<m_nHeight; ++i) { for (int j=0; j<m_nWidth; ++j) { long lVal=0; memcpy(&lVal, &pOriBuf[nCount], 4); int b = GetRValue(lVal); int g = GetGValue(lVal); int r = GetBValue(lVal); c1 = r; // Red if ((nCount < ((m_nHeight-1)*m_nWidth*4l)) && (nCount > (m_nWidth*4))) { memcpy(&lVal, &pOriBuf[nCount-(m_nWidth*4l)], 4); c2 = GetBValue(lVal); memcpy(&lVal, &pOriBuf[nCount+4], 4); c3 = GetBValue(lVal); memcpy(&lVal, &pOriBuf[(nCount+(m_nWidth*4l))], 4); c4 = GetBValue(lVal); memcpy(&lVal, &pOriBuf[nCount-4], 4); c5 = GetBValue(lVal); r = (c1*5) - (c2+c3+c4+c5); } // Green c1 = g; if ((nCount < ((m_nHeight-1)*m_nWidth*4l)) && (nCount > (m_nWidth*4))) { memcpy(&lVal, &pOriBuf[(nCount-(m_nWidth*4l))], 4); c2 = GetGValue(lVal); memcpy(&lVal, &pOriBuf[nCount+4], 4); c3 = GetGValue(lVal); memcpy(&lVal, &pOriBuf[(nCount+(m_nWidth*4l))], 4); c4 = GetGValue(lVal); memcpy(&lVal, &pOriBuf[nCount-4], 4); c5 = GetGValue(lVal); g = (c1*5) - (c2+c3+c4+c5); } // Blue c1 = b; if ((nCount < ((m_nHeight-1)*m_nWidth*4l)) && (nCount > (m_nWidth*4))) { memcpy(&lVal, &pOriBuf[(nCount-(m_nWidth*4l))], 4); c2 = GetRValue(lVal); memcpy(&lVal, &pOriBuf[nCount+4], 4); c3 = GetRValue(lVal); memcpy(&lVal, &pOriBuf[(nCount+(m_nWidth*4l))], 4); c4 = GetRValue(lVal); memcpy(&lVal, &pOriBuf[nCount-4], 4); c5 = GetRValue(lVal); b = (c1*5) - (c2+c3+c4+c5); } // Red if (r >255) { r = 255; } if (r <0) { r = 0; } // Green if (g>255) { g = 255; } if (g<0) { g = 0; } // Blue if (b >255) { b = 255; } if (b<0) { b = 0; } // Store in reverse order lVal = RGB(b, g, r); memcpy(&tmpBuf[nCount], &lVal, 4); nCount+=4; } } // Store tmpBuf SetDIBits(hMemDC, m_hBitmap, 0, bRes, tmpBuf, &bi, DIB_RGB_COLORS); free(pOriBuf); free(tmpBuf); RECT tmpRect = r; tmpRect.right += 16; tmpRect.bottom+= 16; InvalidateRect(GetActiveWindow(), &tmpRect, FALSE); }
void CGuiMiniFrame::OnNcPaint() { CGuiControlBar* pBar=(CGuiControlBar* )GetChildWnd(); if (!pBar) return; if (IsGuiControlBar==TRUE && !pBar->IsAutoHide()) { CMiniDockFrameWnd::OnNcPaint(); return; } //if (!pBar->GetComplete()) return; CRect rcWindow; CRect rcClient; CWindowDC dc(this); CDC m_dc; //contexto de dispositivo en memoria CBitmap m_bitmap; CPen Dark(PS_SOLID,1,GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style)); //la idea es tomar el area de la ventana y area cliente , luego debemos //igualar el area de coordenadas de ventana al cliente GetWindowRect(&rcWindow); GetClientRect(&rcClient); int nSize=rcClient.right; ScreenToClient(rcWindow); rcClient.OffsetRect(-rcWindow.TopLeft()); rcWindow.OffsetRect(-rcWindow.TopLeft()); m_dc.CreateCompatibleDC(&dc); m_bitmap.CreateCompatibleBitmap(&dc,rcWindow.Width(),rcWindow.Height()); CBitmap *m_OldBitmap=m_dc.SelectObject(&m_bitmap); //aqui debe utilizarse la brocha que define GuiDrawLayer, si no hacemos la siguiente //linea usted vera un horrible color negro, a cambio del dibujo. CBrush cb; COLORREF clrBrush; if(IsGuiControlBar!=TRUE ) clrBrush= GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style); else clrBrush=GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style); cb.CreateSolidBrush(clrBrush); m_dc.FillRect(rcWindow, &cb); if (IsGuiControlBar==TRUE && pBar->IsAutoHide()) { CRect m_rc=rcWindow; if (pBar->GetLastDocking() == CBRS_ALIGN_LEFT) { m_rc.left=m_rc.right-1; m_rc.top+=3; cb.DeleteObject(); cb.CreateSolidBrush(RGB(0,0,0)); } if (pBar->GetLastDocking() == CBRS_ALIGN_RIGHT) { m_rc.right=m_rc.left+1; m_rc.top+=2; cb.DeleteObject(); cb.CreateSolidBrush(GuiDrawLayer::GetRGBColorBTNHigh()); } if (pBar->GetLastDocking() == CBRS_ALIGN_TOP) { m_rc.top=m_rc.bottom-1; cb.DeleteObject(); cb.CreateSolidBrush(RGB(0,0,0)); } m_dc.FillRect(m_rc, &cb); } CRect rcCaption=rcClient; rcCaption.InflateRect(1,1); if(IsGuiControlBar!=TRUE ) dc.Draw3dRect(rcCaption,GuiDrawLayer::GetRGBColorBTNHigh(),GuiDrawLayer::GetRGBColorBTNHigh()); DrawGripper(&m_dc,&rcClient); dc.IntersectClipRect(rcWindow); dc.ExcludeClipRect(rcClient);//asi evitamos el parpadeo //rcWindow.InflateRect(1,1); dc.BitBlt(rcWindow.left,rcWindow.top,rcWindow.Width(),rcWindow.Height(),&m_dc,0,0,SRCCOPY); ReleaseDC(&dc); m_dc.SelectObject(m_OldBitmap); m_bitmap.DeleteObject(); m_dc.DeleteDC(); // SetTimer(1,200,NULL); // TODO: Add your message handler code here // Do not call CMiniDockFrameWnd::OnNcPaint() for painting messages }
/*************************************************** OnDraw The Ultimate Grid calls this visual function every time it is drawing a cell. It is up to the individual cell type to properly draw itself. Params: dc - device context to draw the cell with rect - rectangle to draw the cell in col - column that is being drawn row - row that is being drawn cell - cell that is being drawn selected- TRUE if the cell is selected, otherwise FALSE current - TRUE if the cell is the current cell, otherwise FALSE Return <none> ****************************************************/ void CUGCTMailSort::OnDraw(CDC *dc,RECT *rect,int col,long row,CUGCell *cell,int selected,int current) { if (!m_drawThemesSet) m_useThemes = cell->UseThemes(); // Draw background dc->FillSolidRect(rect, RGB(236, 233, 216)); int oldBkMode = dc->SetBkMode(TRANSPARENT); RECT rcLine = *rect; rcLine.top = rcLine.bottom - 3; dc->FillSolidRect(&rcLine, RGB(220, 216, 200)); rcLine.top += 1; dc->FillSolidRect(&rcLine, RGB(210, 207, 190)); rcLine.top += 1; rcLine.bottom += 1; dc->FillSolidRect(&rcLine, RGB(197, 194, 178)); CFont * pOldFont = dc->SelectObject(&m_normalFont); CString output; switch(m_sortOrder) { case sortByAttachments: output = "Arranged By: Attachments"; break; case sortByCategories: output = "Arranged By: Categories"; break; case sortByConversation: output = "Arranged By: Conversation"; break; case sortByDate: output = "Arranged By: Date"; break; case sortByFlag: output = "Arranged By: Flag"; break; case sortByFrom: output = "Arranged By: From"; break; case sortByImportance: output = "Arranged By: Importance"; break; case sortBySize: output = "Arranged By: Size"; break; case sortBySubject: output = "Arranged By: Subject"; break; case sortByTo: output = "Arranged By: To"; break; case sortByType: output = "Arranged By: Type"; break; } CSize szArrBy = dc->GetTextExtent(output); CString sortOrder; switch (m_sortOrder) { case sortByFlag: sortOrder = ((m_sortAscending) ? "Unflagged on top" : "Red on top"); break; case sortByDate: sortOrder = ((m_sortAscending) ? "Oldest on top" : "Newest on top"); break; case sortBySize: sortOrder = ((m_sortAscending) ? "Smallest on top" : "Largest on top"); break; case sortByAttachments: sortOrder = ((m_sortAscending) ? "None on top" : "With on top"); break; default: sortOrder = ((m_sortAscending) ? "Z on top" : "A on top"); break; } CSize szSortText = dc->GetTextExtent(sortOrder); int divider = rect->right - (szSortText.cx + sortByRightMargin); if (divider < szArrBy.cx + 10) divider = szArrBy.cx + 10; if (divider > rect->right - rect->left - 15) divider = rect->right - rect->left - 15; // Now we have all the info we need to draw this string RECT rcLeftText = *rect; rcLeftText.right = rect->left + divider; rcLeftText.top += 2; rcLeftText.left += 2; dc->DrawText(output, &rcLeftText, DT_END_ELLIPSIS); rcLine.left = divider; rcLine.top = rect->top + 2; rcLine.right = divider + 1; rcLine.bottom = rect->bottom - 4; dc->FillSolidRect(&rcLine, RGB(172, 168, 153)); rcLine.left += 1; rcLine.right += 1; dc->FillSolidRect(&rcLine, RGB(255, 255, 255)); rcLine.left += 3; rcLine.right = rect->right - 14; //szSortText.cx; rcLine.top = rect->top + 2; dc->DrawText(sortOrder, &rcLine, DT_END_ELLIPSIS); // Draw arrow CPen * pOldPen = dc->SelectObject(&m_whitePen); if (m_sortAscending) { dc->MoveTo(rect->right - 11, rect->top + 12); dc->LineTo(rect->right - 4, rect->top + 12); dc->LineTo(rect->right - 4, rect->top + 11); dc->LineTo(rect->right - 5, rect->top + 11); dc->LineTo(rect->right - 5, rect->top + 9); dc->LineTo(rect->right - 6, rect->top + 9); dc->LineTo(rect->right - 6, rect->top + 7); dc->LineTo(rect->right - 7, rect->top + 7); dc->LineTo(rect->right - 7, rect->top + 5); dc->SelectObject(&m_arrowPen); dc->MoveTo(rect->right - 8, rect->top + 6); dc->LineTo(rect->right - 8, rect->top + 7); dc->LineTo(rect->right - 9, rect->top + 7); dc->LineTo(rect->right - 9, rect->top + 9); dc->LineTo(rect->right - 10, rect->top + 9); dc->LineTo(rect->right - 10, rect->top + 11); dc->LineTo(rect->right - 11, rect->top + 11); dc->LineTo(rect->right - 11, rect->top + 13); } else { dc->MoveTo(rect->right - 5, rect->top + 7); dc->LineTo(rect->right - 6, rect->top + 7); dc->LineTo(rect->right - 6, rect->top + 9); dc->LineTo(rect->right - 7, rect->top + 9); dc->LineTo(rect->right - 7, rect->top + 11); dc->LineTo(rect->right - 8, rect->top + 11); dc->LineTo(rect->right - 8, rect->top + 12); dc->LineTo(rect->right - 8, rect->top + 13); dc->SelectObject(&m_arrowPen); dc->MoveTo(rect->right - 9, rect->top + 12); dc->LineTo(rect->right - 9, rect->top + 11); dc->LineTo(rect->right - 10, rect->top + 11); dc->LineTo(rect->right - 10, rect->top + 9); dc->LineTo(rect->right - 11, rect->top + 9); dc->LineTo(rect->right - 11, rect->top + 7); dc->LineTo(rect->right - 12, rect->top + 7); dc->LineTo(rect->right - 12, rect->top + 6); dc->LineTo(rect->right - 4, rect->top + 6); } dc->SelectObject(pOldPen); dc->SelectObject(pOldFont); dc->SetBkMode(oldBkMode); }
bool Blit(cSurface* source,cSurface* dest,LPRDATA rdPtr) { //Some quick checks if(rdPtr->b.srcUse && (rdPtr->b.srcW <= 0 || rdPtr->b.srcH <= 0)) return false; if(rdPtr->b.StretchMode && (rdPtr->b.destW <= 0 || rdPtr->b.destH <= 0)) return false; //Some important variables int dx = rdPtr->b.destX; int dy = rdPtr->b.destY; int sx = rdPtr->b.srcUse ? rdPtr->b.srcX : 0; int sy = rdPtr->b.srcUse ? rdPtr->b.srcY : 0; int sw = source->GetWidth(); int sh = source->GetHeight(); //Prepare hot spot int hotX = rdPtr->b.hotX; int hotY = rdPtr->b.hotY; if(rdPtr->b.hotspotMode & 2) { hotX = sw/100.0*hotX; hotY = sh/100.0*hotY; } //Use absolute coords if(rdPtr->useAbs) { if(TargetImg==source) { sx -= rdPtr->rHo.hoRect.left+rdPtr->rHo.hoAdRunHeader->rh3.rh3DisplayX; sy -= rdPtr->rHo.hoRect.top+rdPtr->rHo.hoAdRunHeader->rh3.rh3DisplayY; } if(TargetImg==dest) { dx -= rdPtr->rHo.hoRect.left+rdPtr->rHo.hoAdRunHeader->rh3.rh3DisplayX; dy -= rdPtr->rHo.hoRect.top+rdPtr->rHo.hoAdRunHeader->rh3.rh3DisplayY; } } // stretch flag (used by multiple branches) int strf = 0; //Resampling if(rdPtr->b.StretchMode==2) strf |= STRF_RESAMPLE; else if(rdPtr->b.StretchMode==3) strf |= STRF_RESAMPLE_TRANSP; #ifdef HWABETA /* HWA */ if (rdPtr->isHWA && source->GetType() >= ST_HWA_RTTEXTURE && dest->GetType() >= ST_HWA_SCREEN) { // Use region if necessary if(rdPtr->b.srcUse) { sx = max(0,min(sw,sx)); sy = max(0,min(sh,sy)); sw = max(0,min(rdPtr->b.srcW,sw)); sh = max(0,min(rdPtr->b.srcH,sh)); } if(!sw || !sh) return false; POINT hotspot = {0, 0}; if(rdPtr->b.hotspotMode) { hotspot.x = hotX; hotspot.y = hotY; } float scaleX = 1; float scaleY = 1; if(rdPtr->b.StretchMode) { scaleX = (rdPtr->b.destW * 1.0f) / sw; scaleY = (rdPtr->b.destH * 1.0f) / sh; } float angle = rdPtr->b.angle; // BOP_BLEND expects 0-128 but we can use 0-255 all the time DWORD bop = rdPtr->b.operation; if (bop == BOP_BLEND) bop = BOP_COPY; return source->BlitEx(*dest, dx, dy, scaleX, scaleY, sx, sy, sw, sh, &hotspot, angle, rdPtr->b.mode, (BlitOp)(bop | BOP_RGBAFILTER), rdPtr->b.param, strf); } #endif //Compose alpha if(rdPtr->b.composeAlpha && rdPtr->b.mode == BMODE_TRANSP && source->GetType() < ST_HWA_RTTEXTURE && dest->GetType() < ST_HWA_RTTEXTURE) { //Get dimensions int dw = dest->GetWidth(); int dh = dest->GetHeight(); //Create alpha channel if necessary if(!source->HasAlpha()) { COLORREF transp = source->GetTransparentColor(); source->CreateAlpha(); cSurface* alpha = source->GetAlphaSurface(); for(int x=0;x<sw;x++) for(int y=0;y<sh;y++) if(source->GetPixelFast(x,y)!=transp) alpha->SetPixel(x,y,(COLORREF)0xffffffff); source->ReleaseAlphaSurface(alpha); } if(!dest->HasAlpha()) { COLORREF transp = dest->GetTransparentColor(); dest->CreateAlpha(); cSurface* alpha = dest->GetAlphaSurface(); for(int x=0;x<dw;x++) for(int y=0;y<dh;y++) if(dest->GetPixelFast(x,y)!=transp) alpha->SetPixel(x,y,(COLORREF)0xffffffff); dest->ReleaseAlphaSurface(alpha); } //Source region or not int x1 = sx; int y1 = sy; int x2 = rdPtr->b.srcUse ? (x1+rdPtr->b.srcW) : sw; int y2 = rdPtr->b.srcUse ? (y1+rdPtr->b.srcH) : sh; x1 = max(0,min(sw,x1)); y1 = max(0,min(sh,y1)); x2 = max(0,min(sw,x2)); y2 = max(0,min(sh,y2)); //Nothing to do if(x1 >= x2 || y1 >= y2) return false; //Scale if necessary cSurface scaled; if(rdPtr->b.StretchMode) { scaled.Create(rdPtr->b.destW,rdPtr->b.destH,source); scaled.SetTransparentColor(source->GetTransparentColor()); source->Stretch(scaled,0,0,rdPtr->b.destW,rdPtr->b.destH,x1,y1,x2-x1,y2-y1,BMODE_OPAQUE,BOP_COPY,0,STRF_COPYALPHA|(rdPtr->b.StretchMode-1)); source = &scaled; dx += x1; dy += y1; hotX *= rdPtr->b.destW*1.0f/sw; //(x2-x1) makes hotspot relative to region hotY *= rdPtr->b.destH*1.0f/sh; //(y2-y1) sw = rdPtr->b.destW; sh = rdPtr->b.destH; x1 = 0; y1 = 0; x2 = sw; y2 = sh; } //Nothing to do now if(x1 >= x2 || y1 >= y2) return false; //Rotation is necessary cSurface rotated; if(rdPtr->b.angle != 0) { double angle = rdPtr->b.angle/180.0*PI; cSurface region; region.Create(x2-x1,y2-y1,source); source->Blit(region,-x1,-y1,BMODE_OPAQUE,BOP_COPY,0,BLTF_COPYALPHA); region.CreateRotatedSurface(rotated,rdPtr->b.angle,rdPtr->b.angleResample,source->GetTransparentColor(),FALSE); source = &rotated; //Rotate the hotspot and adjust the rotated bounding box dx += x1; dy += y1; if(rdPtr->b.hotspotMode & 1) RotatePoint(angle,&hotX,&hotY,region.GetWidth(),region.GetHeight(),&dx,&dy); sw = rotated.GetWidth(); sh = rotated.GetHeight(); x1 = 0; y1 = 0; x2 = sw; y2 = sh; } //Apply hot spot if(rdPtr->b.hotspotMode & 1) { dx -= hotX; dy -= hotY; } cSurface* sourceAlpha = source->GetAlphaSurface(); if(!sourceAlpha || !sourceAlpha->IsValid()) return false; LPBYTE sourceBuff = source->LockBuffer(); LPBYTE sourceAlphaBuff = sourceAlpha->LockBuffer(); cSurface* destAlpha = dest->GetAlphaSurface(); if(!destAlpha || !destAlpha->IsValid()) { if(sourceBuff) source->UnlockBuffer(sourceBuff); if(sourceAlphaBuff) source->UnlockAlpha(); return false; } LPBYTE destBuff = dest->LockBuffer(); LPBYTE destAlphaBuff = destAlpha->LockBuffer(); int pitch = source->GetPitch(); int alphaPitch = source->GetAlphaPitch(); //Clip destination x1 = max(sx-dx,min(dw-dx+sx,x1)); y1 = max(sy-dy,min(dh-dy+sy,y1)); x2 = max(sx-dx,min(dw-dx+sx,x2)); y2 = max(sy-dy,min(dh-dy+sy,y2)); //Nothing to do now if(x1 >= x2 || y1 >= y2) return false; float factor = 1.0f; //Use user callback if(rdPtr->b.callback[0]) rdPtr->callback = rdPtr->b.callback; //Use semi-transparency else factor *= ((rdPtr->b.param & 0xff000000) >> 24)/255.0f; for(int x=x1; x<x2; ++x) { int nx = x-sx+dx; for(int y=y1; y<y2; ++y) { int ny = y-sy+dy; //Get color & alpha COLORREF sc = source->GetPixelFast(x,y); int sr = GetRValue(sc); int sg = GetGValue(sc); int sb = GetBValue(sc); float sa = sourceAlpha->GetPixelFast8(x,y)/255.0f*factor; COLORREF dc = dest->GetPixelFast(nx,ny); int dr = GetRValue(dc); int dg = GetGValue(dc); int db = GetBValue(dc); float da = destAlpha->GetPixelFast8(nx,ny)/255.0f; //Output float a; COLORREF c; //Composite (with ink effect) if(!rdPtr->b.callback[0]) { sr *= GetBValue(rdPtr->b.param)/255.0f; sg *= GetGValue(rdPtr->b.param)/255.0f; sb *= GetRValue(rdPtr->b.param)/255.0f; switch(rdPtr->b.operation) { case BOP_ADD: sr = max(0,min(255,sr+dr)); sg = max(0,min(255,sg+dg)); sb = max(0,min(255,sb+db)); break; case BOP_SUB: sr = max(0,min(255,dr-sr)); sg = max(0,min(255,dg-sg)); sb = max(0,min(255,db-sb)); break; case BOP_INVERT: sr = 255-sr; sg = 255-sg; sb = 255-sb; break; case BOP_MONO: sr = (sr+sg+sb)/3; sg = sr; sb = sr; break; case BOP_XOR: sr = dr; sg = dg; sb = db; break; case BOP_AND: sr &= dr; sg &= dg; sb &= db; break; case BOP_OR: sr |= dr; sg |= dg; sb |= db; break; } //Result alpha a = sa+da*(1-sa); //Result color int r = (sr*sa+dr*da*(1-sa))/a; int g = (sg*sa+dg*da*(1-sa))/a; int b = (sb*sa+db*da*(1-sa))/a; c = RGB(r,g,b); } //User callback else { rdPtr->colAlphaSrc = sa*255.0f; rdPtr->colAlphaDest = da; rdPtr->colSrc = sc; rdPtr->colDest = dc; rdPtr->callX = nx; rdPtr->callY = ny; rdPtr->colAlphaRet = false; rdPtr->colRet = false; rdPtr->rRd->GenerateEvent(8); if(rdPtr->colAlphaRet) a = rdPtr->colAlphaNew/255.0f; else a = da; if(rdPtr->colRet) c = rdPtr->colNew; else c = dc; } //Set pixels dest->SetPixelFast(nx,ny,c); destAlpha->SetPixelFast8(nx,ny,a*255); } } source->UnlockBuffer(sourceBuff); sourceAlpha->UnlockBuffer(sourceAlphaBuff); source->ReleaseAlphaSurface(sourceAlpha); dest->UnlockBuffer(destBuff); destAlpha->UnlockBuffer(destAlphaBuff); dest->ReleaseAlphaSurface(destAlpha); return true; }
HBRUSH CDlgAppConfig::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogSK::OnCtlColor(pDC, pWnd, nCtlColor); enum STATIC_BKCOLOR { NULL_COLOR=RGB(255,255,255), TITLE_COLOR=RGB(16,10,245), STATIC_COLOR=RGB(75,101,168), EDIT_COLOR=RGB(207,48,159), LIST_COLOR=RGB(255,0,0), GROUPUP_COLOR=RGB(171,197,232), GROUPDOWN_COLOR=RGB(97,134,183), }; STATIC_BKCOLOR static_BkColor = NULL_COLOR; HBRUSH return_hbr = hbr; switch (pWnd->GetDlgCtrlID()) { case STATIC_TITLE: static_BkColor = TITLE_COLOR; break; case STATIC_SECOND1: case STATIC_SECOND2: case STATIC_RECORD1: case STATIC_RECORD2: case STATIC_REST1: case STATIC_REST2: case STATIC_LINGER1: case STATIC_LINGER2: case STATIC_RUN1: case STATIC_RUN2: static_BkColor = STATIC_COLOR; break; case EDIT_SECOND: case EDIT_RECORD: case EDIT_REST: case EDIT_LINGER: case EDIT_RUN: static_BkColor=EDIT_COLOR; break; case GROUP_CONFIG: static_BkColor=GROUPUP_COLOR; break; default: static_BkColor = NULL_COLOR; break; } switch (static_BkColor) { case TITLE_COLOR: pDC->SetTextColor(static_BkColor); pDC->SelectObject(&m_titlefont); pDC->SetBkMode(TRANSPARENT); return_hbr = (HBRUSH)GetStockObject(NULL_PEN); break; case STATIC_COLOR: pDC->SetTextColor(static_BkColor); pDC->SelectObject(&m_titlefont); pDC->SetBkMode(TRANSPARENT); return_hbr = (HBRUSH)GetStockObject(NULL_PEN); break; case EDIT_COLOR: pDC-> SetBkMode(TRANSPARENT); pDC->SetTextColor(static_BkColor); pDC->SetBkColor(RGB(255,255,255)); return_hbr =hbr;// (HBRUSH)GetStockObject(NULL_PEN); break; case LIST_COLOR: pDC->SetTextColor(static_BkColor); return_hbr = (HBRUSH)GetStockObject(NULL_PEN); break; case GROUPUP_COLOR: pDC->SetTextColor(RGB(89,127,255)); pDC->SetBkColor(static_BkColor); return_hbr = (HBRUSH)GetStockObject(NULL_PEN); break; case GROUPDOWN_COLOR: pDC->SetTextColor(RGB(173,200,255)); pDC->SetBkColor(static_BkColor); return_hbr = (HBRUSH)GetStockObject(NULL_PEN); break; case NULL_COLOR: return_hbr = hbr; break; default: return_hbr = hbr; } return return_hbr; }
BOOL CCollectorDlg::OnInitDialog() { #ifdef _WRITE_LNG_FILE_ _WriteDlgString(this,"DialogCollector"); this->OnCancel(); return TRUE; #endif LOADDLG("DialogCollector"); CDialog::OnInitDialog(); m_txt.SetLimitText(MAX_COLLECTOR); m_output.SetLimitText(MAX_COLLECTOR); m_script.SetLimitText(MAX_COLLECTOR); if (!m_ToolBar.CreateEx(this)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } // set up toolbar properties CImageList img; img.Create(16, 16, ILC_COLORDDB|ILC_MASK, 8, 1); HBITMAP hbmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_COLLECTOR_TOOL)); ImageList_AddMasked(img.GetSafeHandle(), hbmp, RGB(255,0,255)); DeleteObject(hbmp); m_ToolBar.GetToolBarCtrl().SetImageList(&img); img.Detach(); // m_ToolBar.SetButtons(NULL, 12); m_ToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT| TBSTYLE_TOOLTIPS ); m_ToolBar.ModifyStyleEx(0, WS_EX_TOOLWINDOW); m_ToolBar.SetBarStyle(m_ToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED); // set up each toolbar button CString str; LOADSTR(str ,ID_COLLECTOR_TXT); m_ToolBar.SetButtonInfo(0, ID_COLLECTOR_TXT, TBSTYLE_BUTTON, 0); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_COLLECTOR_TXT); LOADSTR(str ,ID_COLLECTOR_OUTPUT); m_ToolBar.SetButtonInfo(1, ID_COLLECTOR_OUTPUT, TBSTYLE_BUTTON, 1); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_COLLECTOR_OUTPUT); LOADSTR(str ,ID_COLLECTOR_SCRIPT); m_ToolBar.SetButtonInfo(2, ID_COLLECTOR_SCRIPT, TBSTYLE_BUTTON, 2); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_COLLECTOR_SCRIPT); m_ToolBar.SetButtonInfo(3, 0, TBSTYLE_SEP, 0); LOADSTR(str ,ID_COLLECTOR_SAVE); m_ToolBar.SetButtonInfo(4, ID_COLLECTOR_SAVE, TBSTYLE_BUTTON, 4); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_COLLECTOR_SAVE); LOADSTR(str ,ID_COLLECTOR_CLEAR); m_ToolBar.SetButtonInfo(5, ID_COLLECTOR_CLEAR, TBSTYLE_BUTTON, 3); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_COLLECTOR_CLEAR); m_ToolBar.SetButtonInfo(6, 0, TBSTYLE_SEP, 0); LOADSTR(str ,ID_COLLECTOR_TRANS); m_ToolBar.SetButtonInfo(7, ID_COLLECTOR_TRANS, TBSTYLE_BUTTON, 5); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_COLLECTOR_TRANS); m_ToolBar.SetButtonInfo(8, 0, TBSTYLE_SEP, 0); LOADSTR(str ,ID_RUN_SCRIPT); m_ToolBar.SetButtonInfo(9, ID_RUN_SCRIPT, TBSTYLE_BUTTON, 6); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_RUN_SCRIPT); LOADSTR(str ,ID_OPEN_SELECTED_TEXT); m_ToolBar.SetButtonInfo(10, ID_OPEN_SELECTED_TEXT, TBSTYLE_BUTTON, 7); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_OPEN_SELECTED_TEXT); LOADSTR(str ,ID_OPEN_CURSOR_LINE); m_ToolBar.SetButtonInfo(11, ID_OPEN_CURSOR_LINE, TBSTYLE_BUTTON, 8); m_ToolBar.GetToolBarCtrl().GetToolTips()->UpdateTipText(str, &m_ToolBar, ID_OPEN_CURSOR_LINE); m_nOldMode = 255; if (pmf->m_nCollectorTrans<255) CollectorTrans(pmf->m_nCollectorTrans); m_edit = 0; OnCollectorTxt(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
#ifdef DEBUG_MODE int cxMetrics; int cyMetrics; int cxOverTypeCaret; int xPos; int xPosLast; int CaretWidth; // insert/overtype mode caret width WCHAR ConvertLine[CVMAX]; unsigned char ConvertLineAtr[CVMAX]; WCHAR DispTitle[] = TEXT(" Console Handle"); DWORD CompColor[ 8 ] = { RGB( 0, 0, 0 ), // ATTR_INPUT RGB( 0, 0, 255 ), // ATTR_TARGET_CONVERTED RGB( 0, 255, 0 ), // ATTR_CONVERTED RGB( 255, 0, 0 ), // ATTR_TARGET_NOTCONVERTED RGB( 255, 0, 255 ), // ATTR_INPUT_ERROR RGB( 0, 255, 255 ), // ATTR_DEFAULT RGB( 255, 255, 0 ), // ATTR_DEFAULT RGB( 255, 255, 255 ) };// ATTR_DEFAULT VOID DisplayConvInformation( HWND hWnd ) { RECT Rect; HDC lhdc;
void BHeader::Paint() { CRect cr; GetClientRect(&cr); CPaintDC dc(this); CDC* pDC = &dc; CDC* pParsedDC = pDC; CDC MemDC; CBitmap MemBM; MemBM.CreateCompatibleBitmap(pParsedDC,cr.Width(),cr.Height()); MemDC.CreateCompatibleDC(pParsedDC); MemDC.SelectObject(&MemBM); pDC = &MemDC; //umple backgroundul CRect fillRect; fillRect.SetRect(0,0,cr.Width(),cr.Height()); pDC->FillSolidRect(&fillRect, RGB(220,220,220)); // cr.left = 0; // cr.right = LabelWidth; // pDC->FillSolidRect(&cr,RGB(255,0,0)); pDC->DrawEdge(&cr,BDR_RAISEDINNER,BF_RECT); //pDC->SetBkMode(TRANSPARENT); // pDC->SetBkColor(RGB(240,240,240)); pDC->SelectObject(&simpleFont); CRect textRext; textRext.SetRect(cr.left+5,cr.Height()/2 - 7,cr.right-20,cr.Height()); pDC->SetTextColor(RGB(0,0,0)); pDC->DrawText(label,-1,textRext,DT_LEFT); // fillRect.left =cr.right+SPACE_BETWEEN_ELEMENT; // fillRect.right = 500; // pDC->FillSolidRect(&fillRect,RGB(255,0,0)); //deseneaza buotnul de plus //CRect plusButton; if(collapsed) { CRect collapseButton; collapseButton.SetRect(cr.right-15,5,cr.right-4,16); pDC->DrawEdge(&collapseButton,BDR_RAISEDINNER,BF_RECT); collapseButton.SetRect(cr.right-13,4,cr.right-7,15); pDC->SelectObject(&smallFont); pDC->MoveTo(cr.right-12,10); pDC->LineTo(cr.right-7,10); if(collapsed == ITEM_COLLAPSED) { pDC->MoveTo(cr.right-10,8); pDC->LineTo(cr.right-10,13); } } //-------------------------- // flicker //-------------------------- //pDC->SetViewportOrg(0,0); //MemDC.SetViewportOrg(0,0); pParsedDC->BitBlt( 0 , 0 , cr.Width() , cr.Height() , &MemDC , 0 , 0 , SRCCOPY ); }
DTool Type; RECT rt; unsigned short Flag; short LineWidth; COLORREF LineColor; COLORREF PlaneColor; }; DObject **arObj; int arSize; int arNum; int arGrowBy; int NowSel; DObject dObj; int SizeCorner; DObject Opt; COLORREF arColor[]={-1,RGB(0,0,0),RGB(255,255,255),RGB(255,0,0),RGB(0,255,0), RGB(0,0,255),RGB(255,255,0),RGB(255,0,255),RGB(0,255,255),RGB(64,64,64), RGB(128,128,128),RGB(192,192,192)}; HBITMAP hBackBit; int GridX, GridY; BOOL bGrid; int GridLineX, GridLineY; BOOL bGridLine; HWND hToolBar; // 함수 원형 LRESULT Main_OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam); LRESULT Main_OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam); LRESULT Main_OnSize(HWND hWnd,WPARAM wParam,LPARAM lParam); LRESULT Main_OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam); LRESULT Main_OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam);
static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static HTREEITEM *hTreeItems; static HIMAGELIST hImageList; HWND hwndCombo1 = GetUIItem(IDC_COMBO1); HWND hwndTree1 = GetUIItem(IDC_TREE1); extern HWND g_SectionHack; section *sections=g_sections; int *install_types=g_header->install_types; if (uMsg == WM_INITDIALOG) { int doLines=0; HTREEITEM Par; HBITMAP hBMcheck1; int x, lastGoodX, i, noCombo=2; g_SectionHack=hwndDlg; hTreeItems=(HTREEITEM*)my_GlobalAlloc(sizeof(HTREEITEM)*num_sections); hBMcheck1=LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); oldTreeWndProc=SetWindowLong(hwndTree1,GWL_WNDPROC,(long)newTreeWndProc); hImageList = ImageList_Create(16,16, ILC_COLOR32|ILC_MASK, 6, 0); ImageList_AddMasked(hImageList,hBMcheck1,RGB(255,0,255)); TreeView_SetImageList(hwndTree1, hImageList, TVSIL_STATE); #ifndef TVM_SETITEMHEIGHT #define TVM_SETITEMHEIGHT (TV_FIRST + 27) #endif #ifndef TVM_GETITEMHEIGHT #define TVM_GETITEMHEIGHT (TV_FIRST + 28) #endif if (SendMessage(hwndTree1, TVM_GETITEMHEIGHT, 0, 0) < 16) SendMessage(hwndTree1, TVM_SETITEMHEIGHT, 16, 0); DeleteObject(hBMcheck1); for (i = 0; i < NSIS_MAX_INST_TYPES+1; i++) { if (install_types[i]) { int j; if (i != NSIS_MAX_INST_TYPES) noCombo = 0; GetNSISString(g_tmp,install_types[i]); j=SendMessage(hwndCombo1,CB_ADDSTRING,0,(LPARAM)g_tmp); SendMessage(hwndCombo1,CB_SETITEMDATA,j,i); if (i == g_exec_flags.cur_insttype) SendMessage(hwndCombo1, CB_SETCURSEL, j, 0); } } SetUITextFromLang(IDC_TEXT1,this_page->parms[1+noCombo]); SetUITextFromLang(IDC_TEXT2,this_page->parms[2+noCombo]); Par=NULL; for (lastGoodX = x = 0; x < num_sections; x ++) { section *sec=sections+x; if (sec->name_ptr) { TVINSERTSTRUCT tv; tv.hParent=Par; tv.hInsertAfter=TVI_LAST; tv.item.mask=TVIF_PARAM|TVIF_TEXT|TVIF_STATE; tv.item.lParam=x; tv.item.pszText=GetNSISStringTT(sec->name_ptr); tv.item.stateMask=TVIS_STATEIMAGEMASK|TVIS_EXPANDED|TVIS_BOLD; { int l=1; // Sf_SELECTED == 1 l += sec->flags & SF_SELECTED; //if (sec->flags & SF_SELECTED) l++; if (sec->flags & SF_RO) l+=3; tv.item.state=INDEXTOSTATEIMAGEMASK(l); } //if (sec->flags&SF_BOLD) { // SF_BOLD << 1 == 16 == TVIS_BOLD tv.item.state|=(sec->flags&SF_BOLD)<<1; } if (sec->flags&SF_SUBSEC) { tv.item.mask|=TVIF_CHILDREN; tv.item.cChildren=1; //if (sec->flags&SF_EXPAND) // TVIS_EXPANDED == SF_EXPAND tv.item.state|=sec->flags&SF_EXPAND; Par = hTreeItems[x] = TreeView_InsertItem(hwndTree1,&tv); doLines=1; } else if (sec->flags&SF_SUBSECEND) { SetParentState(hwndTree1,hTreeItems[lastGoodX]); Par=TreeView_GetParent(hwndTree1,Par); } else { lastGoodX = x; hTreeItems[x] = TreeView_InsertItem(hwndTree1,&tv); } } } if (!doLines) { SetWindowLong(hwndTree1,GWL_STYLE,GetWindowLong(hwndTree1,GWL_STYLE)&~(TVS_LINESATROOT)); } SendMessage(hwndTree1,WM_VSCROLL,SB_TOP,0); if (!noCombo) { ShowWindow(hwndCombo1, SW_SHOW); SetActiveCtl(hwndDlg, hwndCombo1); } else SetActiveCtl(hwndDlg, hwndTree1); uMsg = g_exec_flags.insttype_changed ? WM_NOTIFY_INSTTYPE_CHANGE : WM_IN_UPDATEMSG; } if (uMsg == WM_NOTIFY_SECTEXT) // update text { int x=wParam; int ns=lParam; TVITEM tv; if (tv.hItem=hTreeItems[x]) { tv.mask=TVIF_TEXT; tv.pszText=GetNSISStringTT(ns); TreeView_SetItem(hwndTree1,&tv); } } if (uMsg == WM_NOTIFY_SECFLAGS) // change flags { int flags = sections[wParam].flags; TVITEM tvItem; if (!(tvItem.hItem = hTreeItems[wParam])) return 0; tvItem.mask = TVIF_STATE; tvItem.stateMask = TVIS_BOLD; tvItem.state = 0; //if (flags&SF_BOLD) tvItem.state |= TVIS_BOLD; // SF_BOLD << 1 == 16 == TVIS_BOLD tvItem.state|=(flags&SF_BOLD)<<1; TreeView_SetItem(hwndTree1, &tvItem); TreeView_Expand(hwndTree1, tvItem.hItem, flags & SF_EXPAND ? TVE_EXPAND : TVE_COLLAPSE); if ((flags & (SF_PSELECTED | SF_SELECTED)) != SF_PSELECTED) { CheckTreeItem(hwndTree1, tvItem.hItem, flags & SF_SELECTED); } } if (uMsg == WM_NOTIFY || uMsg == WM_TREEVIEW_KEYHACK) { LPNMHDR lpnmh = (LPNMHDR) lParam; if (uMsg == WM_TREEVIEW_KEYHACK || lpnmh->idFrom == IDC_TREE1) { if (!(g_flags&CH_FLAGS_NO_CUSTOM) && (uMsg == WM_TREEVIEW_KEYHACK || lpnmh->code == NM_CLICK)) { TVITEM tvItem; if (uMsg != WM_TREEVIEW_KEYHACK) tvItem.hItem=TreeHitTest(hwndTree1); else tvItem.hItem=TreeView_GetSelection(hwndTree1); if (tvItem.hItem) { int iState; tvItem.mask = TVIF_STATE|TVIF_PARAM; TreeView_GetItem(hwndTree1, &tvItem); iState = tvItem.state >> 12; if (iState < 4) // not RO { if (iState == 2) // already checked { sections[tvItem.lParam].flags&=~SF_SELECTED; CheckTreeItem(hwndTree1,tvItem.hItem,0); } else { sections[tvItem.lParam].flags|=SF_SELECTED; CheckTreeItem(hwndTree1,tvItem.hItem,1); } lParam = 0; wParam = 1; uMsg = WM_IN_UPDATEMSG; } // not ro } // was valid click } // was click or hack
INT_PTR CALLBACK MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_COMMAND: { switch(LOWORD(wParam)) { case IDCANCEL: if(g_bSuccess) RunLaunch(); PostQuitMessage(0); break; case IDOK: HMENU hMenu = ::GetSystemMenu(hwndDlg, FALSE); ::EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); ::EnableWindow(::GetDlgItem(hwndDlg, IDOK), FALSE); ::EnableWindow(::GetDlgItem(hwndDlg, IDCANCEL), FALSE); if(g_hBeginHandle) SetEvent(g_hBeginHandle); break; } } break; case WM_MSG_ENTERFAULT: _enterFaultMode(); break; case WM_MSG_SETPROGRESS: { UINT nPosOld = (UINT)::SendDlgItemMessage(hwndDlg, IDC_PROGRESS_MAIN, PBM_GETPOS, 0, 0); UINT nPosNow = (UINT)wParam; if(nPosNow != nPosOld) { ::SendDlgItemMessage(hwndDlg, IDC_PROGRESS_MAIN, PBM_SETPOS, nPosNow, 0); } } break; case WM_MSG_SUCCESS: { HMENU hMenu = ::GetSystemMenu(hwndDlg, FALSE); ::EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND|MF_ENABLED); ::EnableWindow(::GetDlgItem(hwndDlg, IDOK), FALSE); ::EnableWindow(::GetDlgItem(hwndDlg, IDCANCEL), TRUE); ::SetDlgItemText(hwndDlg, IDCANCEL, "确定"); ::CloseHandle(g_hBeginHandle); g_hBeginHandle=0; ::SendDlgItemMessage(hwndDlg, IDC_PROGRESS_MAIN, PBM_SETPOS, 100, 0); char szTemp[MAX_PATH] = {0}; _snprintf(szTemp, MAX_PATH, "《天龙八部》成功更新到%s!", g_szVersionTo); MessageBox(g_hMainWnd, szTemp, "《天龙八部》", MB_OK|MB_ICONINFORMATION); g_bSuccess = TRUE; } break; case WM_INITDIALOG: { g_hMainWnd = hwndDlg; //Center main window CenterDlg(hwndDlg); //设置图标 HICON hMainIcon = LoadIcon(g_hInst, (LPCTSTR)IDD_DIALOG_MAIN); ::SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hMainIcon); ::SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hMainIcon); //set status ::SetDlgItemText(hwndDlg, IDC_STATIC_STATUS, "读取版本信息..."); ::SendDlgItemMessage(hwndDlg, IDC_PROGRESS_MAIN, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); g_hBeginHandle = ::CreateEvent(0, TRUE, FALSE, 0); ::ResetEvent(g_hBeginHandle); //create work thread UINT nThreadID; g_hWorkThread = (HANDLE)::_beginthreadex(NULL, 0, _WorkThread, 0, CREATE_SUSPENDED|THREAD_QUERY_INFORMATION, &nThreadID ); if(g_hWorkThread == NULL) { ::SetDlgItemText(hwndDlg, IDC_STATIC_STATUS, "创建线程失败"); _enterFaultMode(); break; } //go! ::ResumeThread(g_hWorkThread); //not care ::CloseHandle(g_hWorkThread); g_hWorkThread=0; } break; case WM_CTLCOLORSTATIC: { HWND hStatic = (HWND)lParam; if(g_bFaultMode && hStatic == GetDlgItem(hwndDlg, IDC_STATIC_STATUS)) { HBRUSH hBrush = (HBRUSH)(INT_PTR)::DefWindowProc(hwndDlg, WM_CTLCOLORSTATIC, wParam, lParam); SetTextColor((HDC)wParam, RGB(255, 0, 0)); return (BOOL)(INT)(INT_PTR)hBrush; } else return FALSE; } break; case WM_CLOSE: PostQuitMessage(0); break; default: break; } return FALSE; }