예제 #1
0
/*
 * StatsMainRedraw:  Called when the main window needs to be redrawn.
 */
void StatsMainRedraw(void)
{
   list_type l;
   HDC hdc;
   AREA a, b;
   object_node *obj;   // Fake object node for DrawObject

   hdc = GetDC(cinfo->hMain);

   obj = ObjectGetBlank();

   a.x    = stat_x;
   a.cx   = STAT_ICON_HEIGHT;

   for (l = main_stats; l != NULL; l = l->next)
   {
      Statistic *s = (Statistic *) (l->data);

      a.y    = s->y;
      a.cy   = s->cy;

      obj->icon_res = s->name_res;

      OffscreenWindowBackground(NULL, a.x, a.y, a.cx, a.cy);
      DrawStretchedObjectDefault(hdc, obj, &a, NULL); 
      GdiFlush();

      b.x  = stat_bar_x;
      b.cx = stat_width;
      b.y  = a.y + STATS_MAIN_SPACING;
      b.cy = s->cy - 4 * STATS_MAIN_SPACING;
      InterfaceDrawBarBorder(NULL, hdc, &b);
   }

   ObjectDestroyAndFree(obj);
   ReleaseDC(cinfo->hMain, hdc);
}
예제 #2
0
/*
 * AboutInitDialog:  Handle WM_INITDIALOG messages.
 */ 
BOOL AboutInitDialog(HWND hDlg, HWND hwndFocus, LPARAM lParam) 
{
   int i,sideBuffer,xEdge,yEdge;
   POINT pt;
   HWND hwndScroll = GetDlgItem(hDlg, IDC_SCROLL);
   RECT r, rcScrollClient, rcScroll, rcDlg, rcDlgClient;
   char buffer[80];
   char format[80];

   /* Load credits from bgf file */
   if (DibOpenFile(credits_filename, &credits_b))
      credits_pdib = BitmapsGetPdibByIndex(credits_b, credits_page);
   else debug(("AboutInitDialog unable to load file %s\n", credits_filename));

   GetWindowRect(hwndScroll, &r);
   OffsetRect(&r, -r.left, -r.top);

   GetWindowRect(hDlg, &rcDlg);
   GetWindowRect(hwndScroll, &rcScroll);
   GetClientRect(hwndScroll, &rcScrollClient);
   sideBuffer = rcScroll.left - rcDlg.left;
   xEdge = (rcScroll.right-rcScroll.left) - rcScrollClient.right;
   yEdge = (rcScroll.bottom-rcScroll.top) - rcScrollClient.bottom;

   scroll_width  = DibWidth(credits_pdib);
   scroll_height = rcScrollClient.bottom;
   SetWindowPos(hwndScroll,NULL,0,0,xEdge + scroll_width,rcScroll.bottom - rcScroll.top,SWP_NOZORDER|SWP_NOMOVE);
   SetWindowPos(hDlg,NULL,0,0,xEdge + sideBuffer*2 + scroll_width,rcDlg.bottom - rcDlg.top,SWP_NOZORDER|SWP_NOMOVE);

   GetWindowRect(hDlg, &rcDlg);
   GetClientRect(hDlg, &rcDlgClient);

   // Center windows horizontally
   CenterDlgItem(hDlg, IDC_NUMBER);
   CenterDlgItem(hDlg, IDC_SPECIAL1);
   CenterDlgItem(hDlg, IDC_SPECIAL2);
   CenterDlgItem(hDlg, IDC_SCROLL);
   CenterDlgItem(hDlg, IDOK);
   
   hAboutDlg = hDlg;
   CenterWindow(hDlg, GetParent(hDlg));

   GetDlgItemText(hDlg, IDC_NUMBER, format, 80);
   sprintf(buffer, format, MAJOR_REV*100+MINOR_REV);
   SetDlgItemText(hDlg, IDC_NUMBER, buffer);

   if (config.technical)
   {
	sprintf(buffer, "Client Software Version %d:%d", MAJOR_REV, MINOR_REV);
	SetDlgItemText(hDlg, IDC_SPECIAL1, buffer);

	sprintf(buffer, "Server Host Address %s:%d",
		(LPCTSTR)config.comm.hostname, config.comm.sockport);
	SetDlgItemText(hDlg, IDC_SPECIAL2, buffer);
   }

   GetWindowRect(GetDlgItem(hDlg,IDC_SPECIAL2),&r);
   pt.x = r.left + (r.right-r.left)/2 - DUDE_AREA_WIDTH/2;
   pt.y = r.bottom + 10;
   ScreenToClient(hDlg,&pt);

   scroll_y = 0;
   dude_x = pt.x;
   dude_y = pt.y;

   gbits_width  = max(scroll_width, DUDE_AREA_WIDTH);
   gbits_height = max(scroll_height, DUDE_MAX_HEIGHT);

   gDC = CreateMemBitmap(gbits_width, gbits_height, &gOldBitmap, &gBits);
   if (gDC == 0)
      debug(("AboutInitDialog couldn't create DC!\n"));

   timer_id = SetTimer(hDlg, TIMER_ABOUT, ABOUT_INTERVAL, NULL);

   if (state == STATE_GAME)
   {
      // Set up animated characters
      for (i=0; i < NUM_DUDES; i++)
      {
	 object_node *obj;
	 
	 obj = dudes[i].obj = ObjectGetBlank();	
	 obj->icon_res = ABOUT_RSC;
	 obj->animate->animation = ANIMATE_NONE;
	 
	 if (i == 0)
	 {
	    dudes[i].angle = 3 * NUMDEGREES / 4;
	    dudes[i].x = DUDE_X1;
	 }
	 else 
	 {
	    dudes[i].angle = NUMDEGREES / 4;
	    dudes[i].x = DUDE_X2;
	 }
      }
   }
   
   CenterWindow(hDlg, GetParent(hDlg));
   return TRUE;
}