示例#1
0
BOOL CStreamDlg::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	CRect rect;
	GetWindowRect(&rect);
	GetClientRect(&m_rect);
	CDC memdc;     //定义一个显示设备对象 
	CBitmap bmp;       //定义一个位图对象 
	memdc.CreateCompatibleDC(pDC);     //建立与屏幕显示兼容的内存显示设备 
	bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//建立一个与屏幕显示兼容的位图
	memdc.SetBkMode(TRANSPARENT);
	CBitmap* pOldBmp = memdc.SelectObject(&bmp);            //将位图选入到内存显示设备中		
	
	DWORD style = DT_CENTER|DT_SINGLELINE|DT_VCENTER;
	CBrush bru(RGB(239,255,255));
	CRect cr(0,0,rect.Width(),rect.Height());
	memdc.FillRect(&cr,&bru); 	//填充背景色

/*	m_DlgPic.Load(IDR_JPG_DIALOG1);
	if(m_DlgPic != NULL)
		m_DlgPic.Render(&memdc,m_rect);*/

	m_DlgPic.Load(IDR_JPG_BTN1);
	if(m_DlgPic != NULL)
		m_DlgPic.Render(&memdc,m_rtbutton);

	m_DlgPic.Load(IDR_JPG_BTN1);
	if(m_DlgPic != NULL)
		m_DlgPic.Render(&memdc,m_rtbutton1);

	m_DlgPic.Load(IDR_JPG_BTN1);
	if(m_DlgPic != NULL)
		m_DlgPic.Render(&memdc,m_rtbutton2);

	m_DlgPic.Load(IDR_JPG_BTN1);
	if(m_DlgPic != NULL)
		m_DlgPic.Render(&memdc,m_rtclose);
	m_DlgPic.Load(IDR_JPG_BTN1);
	if(m_DlgPic != NULL)
		m_DlgPic.Render(&memdc,m_rtbutton3);
	
	m_DlgPic.Load(IDR_JPG_BTN1);
	if(m_DlgPic != NULL)
		m_DlgPic.Render(&memdc,m_rtbutton4);
	
	m_DlgPic.Load(IDR_JPG_BTN1);
	if(m_DlgPic != NULL)
		m_DlgPic.Render(&memdc,m_rtbutton5);
	switch(m_numbtn)
	{
		case 0:

			break;
		case 1:		m_DlgPic.Load(IDR_JPG_BTN1_1);
					if(m_DlgPic != NULL)
							m_DlgPic.Render(&memdc,m_rtbutton);
		break;
		case 2:		m_DlgPic.Load(IDR_JPG_BTN1_1);
					if(m_DlgPic != NULL)
						m_DlgPic.Render(&memdc,m_rtclose);
			break;
		case 3:		m_DlgPic.Load(IDR_JPG_BTN1_1);
					if(m_DlgPic != NULL)
						m_DlgPic.Render(&memdc,m_rtbutton1);
			break;
		case 4:		m_DlgPic.Load(IDR_JPG_BTN1_1);
					if(m_DlgPic != NULL)
						m_DlgPic.Render(&memdc,m_rtbutton2);
			break;
		case 5:		m_DlgPic.Load(IDR_JPG_BTN1_1);
						m_DlgPic.Render(&memdc,m_rtbutton3);
			break;
		case 6:		m_DlgPic.Load(IDR_JPG_BTN1_1);
						m_DlgPic.Render(&memdc,m_rtbutton4);
			break;
		case 7:		m_DlgPic.Load(IDR_JPG_BTN1_1);
						m_DlgPic.Render(&memdc,m_rtbutton5);
			break;
		default:
			break;
	}

	CFont font;
	font.CreateFont(14, 0, 0, 0 ,40,
            FALSE, FALSE, 0,
            ANSI_CHARSET,
            OUT_DEFAULT_PRECIS,
            CLIP_DEFAULT_PRECIS,
            DEFAULT_QUALITY,
            DEFAULT_PITCH|FF_SWISS,
            "Verdana");
	CFont   *pOldfont = (CFont *)memdc.SelectObject(&font); 
    memdc.SetTextColor(RGB(0, 0, 0)); 
	//memdc.SetBkColor(TRANSPARENT);*/
	memdc.DrawText(m_strLanguage[4],m_rtbutton,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	memdc.DrawText(m_strLanguage[0],m_rtbutton1,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	memdc.DrawText(m_strLanguage[0],m_rtbutton2,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	memdc.DrawText(m_strLanguage[0],m_rtclose,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	memdc.DrawText(m_strLanguage[1],m_rtbutton3,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	memdc.DrawText(m_strLanguage[1],m_rtbutton4,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	memdc.DrawText(m_strLanguage[1],m_rtbutton5,DT_CENTER | DT_VCENTER | DT_SINGLELINE);

	pDC->BitBlt(0,0,m_rect.Width(),m_rect.Height(),&memdc,0,0,SRCCOPY);
	bmp.DeleteObject();
	memdc.DeleteDC();
	ReleaseDC(pDC);
	return true;
}
示例#2
0
void run(double *accum, int *cur_loc, mem_array mem) {
  int prg_counter = 0,   // mem cell location of the command being executed
    next_loc = 0,        // mem cell location of the next command to be executed
    run_flag = CONTINUE; // flag for when to stop the execution of the
                         // user's program.  Values are CONTINUE, STOP
                         // and RUN_ERR

  char cmdtrans[80];     // an English translation of the current command
  enum speed run_speed;  // the run mode

  hidemouse();

  // if they want to run
  if(get_speed(&run_speed) == CONTINUE) {
    // set up screen for running
    put_accum(accum);
    clear_monitor();
    clear_keyboard();
    clear_keys();

    /* user's program loop */
    do {
      // execute at the next location
      prg_counter = next_loc;

      // THF patch, was +2
      put_prg_counter(prg_counter + 1);
      put_instruct(mem[prg_counter]);
      bright_cell(prg_counter, mem[prg_counter]);

      // case statement for run mode
      switch(run_speed) {
        case SLOW:
          delay(SLOW_DELAY_TIME);
          break;

        case FAST:
          delay(FAST_DELAY_TIME);
      }

      /// if there is a command in the cell
      if(mem[prg_counter].entry_type == CMD) {
        // command type case statement
        switch(mem[prg_counter].cmd_type) {
          case LDC:
            run_flag = ldc(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case ADC:
            run_flag = adc(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case LDA:
            run_flag = lda(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case STA:
            run_flag = sta(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case ADD:
            run_flag = add(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case SUB:
            run_flag = sub(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case MUL:
            run_flag = mul(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case DIV:
            run_flag = div(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case INP:
            run_flag = inp(mem, cmdtrans, prg_counter, &next_loc);
            break;

          case OUT:
            run_flag = out(mem, cmdtrans, prg_counter, &next_loc);
            break;

          case BPA:
            run_flag = bpa(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case BNA:
            run_flag = bna(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case BZA:
            run_flag = bza(accum, mem, cmdtrans, prg_counter, &next_loc);
            break;

          case BRU:
            run_flag = bru(mem, cmdtrans, prg_counter, &next_loc);
            break;

          case STP:
            run_flag = stp(cmdtrans, prg_counter, &next_loc);

            if(run_speed == CYCLE) {
              display_cmdtrans(cmdtrans);
            }

            break;

          default:
            run_err_message("ERROR: Unkown command at this location.");
            run_flag = RUN_ERR;
            break;
        }
      } else {
        run_err_message("ERROR: Unkown command at this location.");
        run_flag = RUN_ERR;
      }

      // check to see if the user wants to stop
      if(kbhit()) {
        if(getch() == EscKey) {
          run_flag = STOP;
        }
      }

      if((run_speed == CYCLE) && (run_flag == CONTINUE)) {
        run_flag = display_cmdtrans(cmdtrans);
      }

      dim_cell(prg_counter, mem[prg_counter]);

    } while((run_flag == CONTINUE) && (mem[prg_counter].cmd_type != STP));

    // clear the registers when program is done
    clear_instruct();
    clear_prg_counter();
  }

  showmouse();

  if(run_flag == RUN_ERR) {
    *cur_loc = prg_counter;
  }

  display_keys();
}