C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[36200] [질문] api 공부하는데요 방법찾았심(매크로 함수를 따로)
초야 [secretdeeper] 1628 읽음    2004-07-10 08:24
C++ 빌더X에서 컴파일 시꼈을때는 이런 메시지가 떳고요
iVscrollPos=max(0,min(iVscrollPos,NUMLINES - 1));
//"Unit1.cpp": E2268 Call to undefined function 'max' in function __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) at line 103

케헹 stdlib.h 헤더 파일을 추가해도 안 돼서 -_-;;;
define으로 매크로함수로 지정했더니 돼는군요
#define max(a,b) ((a)>(b) ? (a):(b))
#define min(a,b) ((a)<(b) ? (a):(a))
이렇게 말이지요


똑같은 비주얼 씨++에서 했더니 잘 돼더라고요 왜 그런지 아시는 분은 좀 알려주세요


소스첨부할께요 찰스펫조드 프로그래밍윈도우즈 챕터4에 sysmets2.c란 거예요



#define NUMLINES ((int) (sizeof sysmetrics / sizeof sysmetrics[0]))

struct
{
  int iIndex;
  TCHAR *szLabel;
  TCHAR *szDesc;
}
sysmetrics[]=
{
  SM_CXSCREEN,    TEXT("SM_CXSCREEN"),
                  TEXT("Screen width in pixels"),
  SM_CYSCREEN,    TEXT("SM_CYSCREEN"),
                  TEXT("Screen height in pixels"),
  SM_CXVSCROLL,   TEXT("SM_CXVSCROLL"),
                  TEXT("Vertical scroll width"),
  SM_CYHSCROLL,   TEXT("SM_CYHSCROLL"),
                  TEXT("Horizontal scroll height"),
  SM_CYCAPTION,   TEXT("SM_CYCAPTION"),
                  TEXT("Caption bar height"),
  SM_CXBORDER,    TEXT("SM_CXBORDER"),
                  TEXT("Window border height"),
  SM_CXFIXEDFRAME,TEXT("SM_CXFIXEDFRAME"),
                  TEXT("Dialog window frame width"),
  SM_CYFIXEDFRAME,TEXT("SM_CYFIXEDFRAME"),
                  TEXT("Dialog windwo frame  height"),
  SM_CYVTHUMB,    TEXT("SM_CYVTHUMB"),
                  TEXT("Vertical scroll thumb height"),
  SM_CXHTHUMB,    TEXT("SM_CXHTHUMB"),
                  TEXT("Horizontal scroll thumb width"),
  SM_CXICON,      TEXT("SM_CXICON"),
                  TEXT("Icon width"),
  SM_CYICON,      TEXT("SM_CYICON"),
                  TEXT("Icon height"),
  SM_CXCURSOR,    TEXT("SM_CXCURSOR"),
                  TEXT("Cursor width"),
  SM_CYCURSOR,    TEXT("SM_CYCURSOR"),
                  TEXT("Cursor height"),
  SM_CYMENU,      TEXT("SM_CYMENU"),
                  TEXT("Menu bar height"),
  SM_CXFULLSCREEN,TEXT("SM_CXFULLSCREEN"),
                  TEXT("Full screen client area width"),
  SM_CYFULLSCREEN,TEXT("SM_CYFULLSCREEN"),
                  TEXT("Full screen client area width"),
  SM_CYKANJIWINDOW,TEXT("SM_CYKANJIWINDOW"),
                  TEXT("Kanji window height"),
  SM_MOUSEPRESENT,TEXT("SM_MOUSEPRESENT"),
                  TEXT("Mouse present flag"),
  SM_CYVSCROLL,   TEXT("SM_CYVSCROLL"),
                  TEXT("Vertical scroll arrow height"),
  SM_CXHSCROLL,   TEXT("SM_CXHSCROLL"),
                  TEXT("Horizontal scroll arrow width"),
  SM_DEBUG,       TEXT("SM_DEBUG"),
                  TEXT("Debug version flag"),
  SM_SWAPBUTTON,  TEXT("SM_SWAPBUTTON"),
                  TEXT("Mouse buttons swapped flag"),
  SM_CXMIN,       TEXT("SM_CXMIN"),
                  TEXT("Minimum window width"),
  SM_CYMIN,       TEXT("SM_CYMIN"),
                  TEXT("Minimum window height"),
  SM_CXSIZE,      TEXT("SM_CXSIZE"),
                  TEXT("Min/Max/Close button width"),
  SM_CYSIZE,      TEXT("SM_CYSIZE"),
                  TEXT("Min/Max/Close button height"),
  SM_CXSIZEFRAME, TEXT("SM_CXSIZEFRAME"),
                  TEXT("Window sizing frame width"),
  SM_CYSIZEFRAME, TEXT("SM_CYSIZEFRAME"),
                  TEXT("Min/Max/Close button height"),
  SM_CXMINTRACK,  TEXT("SM_CXMINTRACK"),
                  TEXT("Minimum window tracking width"),
  SM_CXDOUBLECLK, TEXT("SM_CXDOUBECLK"),
                  TEXT("Double click x tolerance"),
  SM_CYDOUBLECLK, TEXT("SM_CYDOUBECLK"),
                  TEXT("Double click y tolerance"),
  SM_CXICONSPACING,TEXT("SM_CXICONSPACING"),
                  TEXT("Horizontal icon spacing"),
  SM_CYICONSPACING,TEXT("SM_CYICONSPACING"),
                  TEXT("Vertical icon spacing"),
  SM_MENUDROPALIGNMENT,TEXT("SM_MENUDRAPALIGNMENT"),
                  TEXT("Left or right menu drop"),
  SM_DBCSENABLED, TEXT("SM_DBCSENABLED"),
                  TEXT("Doubl-Byte Char set enabled"),
  SM_PENWINDOWS,  TEXT("SM_PENWINDOWS"),
                  TEXT("Pen extensions installed"),
  SM_CMOUSEBUTTONS,TEXT("SM_CMOUSEBUTTONS"),
                  TEXT("Numer of mouse button"),
  SM_SECURE,      TEXT("SM_SECURE"),
                  TEXT("Security present flag"),
  SM_CXEDGE,      TEXT("SM_CXEDGE"),
                  TEXT("3-D border width"),
  SM_CYEDGE,      TEXT("SM_CYEDGE"),
                  TEXT("3-D border height"),
  SM_CXMINSPACING,TEXT("SM_CXMINSPACING"),
                  TEXT("Minimized window spacing width"),
  SM_CYMINSPACING,TEXT("SM_CYMINSPACING"),
                  TEXT("Minimized window spacing height"),
  SM_CXSMICON,    TEXT("SM_CXSMICON"),
                  TEXT("Small Icon widht"),
  SM_CYSMICON,    TEXT("SM_CYSMICON"),
                  TEXT("Small Icon height"),
  SM_CYSMCAPTION, TEXT("SM_CYSMCAPTION"),
                  TEXT("Small caption height"),
  SM_CXSMSIZE,    TEXT("SM_CYSMSIZE"),
                  TEXT("Small caption button width"),
  SM_CYSMSIZE,    TEXT("SM_CYSMSIZE"),
                  TEXT("Small caption button heihgt"),
  SM_CXMENUSIZE,  TEXT("SM_CXMENUSIZE"),
                  TEXT("Menu bar button width"),
  SM_CYMENUSIZE,  TEXT("SM_CYMENUSIZE"),
                  TEXT("Menu bar button height"),
  SM_ARRANGE,     TEXT("SM_ARRANGE"),
                  TEXT("How minimized windows arranged"),
  SM_CXMINIMIZED, TEXT("SM_CXMINIMIZED"),
                  TEXT("Minimized window width"),
  SM_CYMINIMIZED, TEXT("SM_CYMINIMIZED"),
                  TEXT("Minimized window height"),
  SM_CXMAXTRACK,  TEXT("SM_CXMAXTRACK"),
                  TEXT("Maximum draggable width"),
  SM_CYMAXTRACK,  TEXT("SM_CYMAXTRACK"),
                  TEXT("Maximum draggable height"),
  SM_CXMAXIMIZED, TEXT("SM_CXMAXIMIZED"),
                  TEXT("Width of maximized window"),
  SM_CYMAXIMIZED, TEXT("SM_CYMAXIMIZED"),
                  TEXT("Height of maximized window"),
  SM_NETWORK,     TEXT("SM_NETWORK"),
                  TEXT("Network present flag"),
  SM_CLEANBOOT,   TEXT("SM_CLEANBOOT"),
                  TEXT("How systm was booted"),
  SM_CXDRAG,      TEXT("SM_CXDRAG"),
                  TEXT("Avoid drag x tolerance"),
  SM_CYDRAG,      TEXT("SM_CYDRAG"),
                  TEXT("Avoid drag y tolerance"),
  SM_SHOWSOUNDS,  TEXT("SM_SHOWSOUNDS"),
                  TEXT("Present sounds visually"),
  SM_CXMENUCHECK, TEXT("SM_CXMEUNCHECK"),
                  TEXT("Meun check-mark width"),
  SM_CYMENUCHECK, TEXT("SM_CYMENUCHECK"),
                  TEXT("Menu check-mark height"),
  SM_SLOWMACHINE, TEXT("SM_SHOWMACHINE"),
                  TEXT("Slow processor flag"),
  SM_MIDEASTENABLED,TEXT("SM_MIDEASTENABLED"),
                  TEXT("Hebrew and Arabic enabled flag"),
  SM_MOUSEWHEELPRESENT,TEXT("SM_MOUSEWHEELPRESENT"),
                  TEXT("Mouse wheel present flag"),
  SM_XVIRTUALSCREEN,TEXT("SM_XVIRTUALSCREEN"),
                  TEXT("Virtual screen x orign"),
  SM_YVIRTUALSCREEN,TEXT("SM_YVIRTUALSCREEN"),
                  TEXT("Virtual screen y origh"),
  SM_CXVIRTUALSCREEN,TEXT("SM_CXVIRTUALSCREEN"),
                  TEXT("Virtual screen width"),
  SM_CYVIRTUALSCREEN,TEXT("SM_CYVIRTUALSECREEN"),
                  TEXT("Virtual screen height"),
  SM_CMONITORS,   TEXT("SM_CMONITORS"),
                  TEXT("Number of monitors"),
  SM_SAMEDISPLAYFORMAT,TEXT("SM_SAMEDISPLAYFORMAT"),
                  TEXT("Same color fomat flag")
};


//---------------------------------------------------------------------------
// Unit1.cpp
//---------------------------------------------------------------------------

#include <windows.h>
#include "Unit1.h"

LRESULT CALLBACK WndProc(HWND, UINT , WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
  static TCHAR szAppName[] = TEXT("SysMets2");
  HWND hwnd;
  MSG msg;
  WNDCLASS wndclass;

  wndclass.style = CS_HREDRAW | CS_VREDRAW ;
  wndclass.lpfnWndProc = WndProc;
  wndclass.cbClsExtra = 0;
  wndclass.cbWndExtra = 0;
  wndclass.hInstance = hInstance;
  wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
  wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
  wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  wndclass.lpszMenuName = NULL;
  wndclass.lpszClassName = szAppName;

  if(!RegisterClass(&wndclass))
  {
    MessageBox(NULL,TEXT("This program requires windows NT!"),szAppName,MB_ICONERROR);
    return 0;
  }

  hwnd = CreateWindow(szAppName,
                      TEXT("Get System Metrics No.2"),
                      WS_OVERLAPPEDWINDOW | WS_VSCROLL,
                      CW_USEDEFAULT,CW_USEDEFAULT,
                      CW_USEDEFAULT,CW_USEDEFAULT,
                      NULL,NULL,hInstance,NULL);

  ShowWindow(hwnd,iCmdShow);
  UpdateWindow(hwnd);

  while(GetMessage(&msg,NULL,0,0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  static int cxChar,cxCaps,cyChar,cyClient,iVscrollPos;
  HDC hdc;
  int i,y;
  PAINTSTRUCT ps;
  TCHAR szBuffer[10];
  TEXTMETRIC tm;

  switch(message)
  {
    case WM_CREATE:
          hdc = GetDC(hwnd);

          GetTextMetrics(hdc,&tm);
          cxChar = tm.tmAveCharWidth;
          cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
          cyChar = tm.tmHeight + tm.tmExternalLeading;

          ReleaseDC(hwnd,hdc);

          SetScrollRange(hwnd,SB_VERT,0,NUMLINES - 1,FALSE);
          SetScrollPos(hwnd,SB_VERT,iVscrollPos,TRUE);
          return 0;

    case WM_SIZE:
          cyClient = HIWORD(lParam);
          return 0;

    case WM_VSCROLL:
          switch (LOWORD(wParam))
          {
            case SB_LINEUP:
                  iVscrollPos -= 1;
                  break;
            case SB_LINEDOWN:
                  iVscrollPos += 1;
                  break;
            case SB_PAGEUP:
                  iVscrollPos -= cyClient / cyChar;
                  break;
            case SB_PAGEDOWN:
                  iVscrollPos += cyClient / cyChar;
                  break;
            case SB_THUMBPOSITION:
                   iVscrollPos = HIWORD(wParam);
                   break;
            default:
                   break;
          }

          iVscrollPos=max(0,min(iVscrollPos,NUMLINES - 1)); //이 부분이예욧

          if(iVscrollPos != GetScrollPos(hwnd,SB_VERT))
          {
            SetScrollPos(hwnd,SB_VERT,iVscrollPos,TRUE);
            InvalidateRect(hwnd,NULL,TRUE);
          }
          return 0;
    case WM_PAINT:
          hdc = BeginPaint(hwnd,&ps);
          for(i = 0; i < NUMLINES ; i++)
          {
            y = cyChar * (i - iVscrollPos);

            TextOut(hdc,0,y,
                    sysmetrics[i].szLabel,
                    lstrlen(sysmetrics[i].szLabel));

            TextOut(hdc,22 * cxCaps,y,
                    sysmetrics[i].szDesc,
                    lstrlen(sysmetrics[i].szDesc));

            SetTextAlign(hdc,TA_RIGHT | TA_TOP);

            TextOut(hdc,22 * cxCaps + 40 * cxChar,y,szBuffer,
                    wsprintf(szBuffer,TEXT("%5"),
                             GetSystemMetrics(sysmetrics[i].iIndex)));

            SetTextAlign(hdc, TA_LEFT | TA_TOP);
          }
          EndPaint(hwnd, &ps);
          return 0;

    case WM_DESTROY:
          PostQuitMessage(0);
          return 0;
  }
  return DefWindowProc(hwnd,message,wParam,lParam);
}


+ -

관련 글 리스트
36200 [질문] api 공부하는데요 방법찾았심(매크로 함수를 따로) 초야 1628 2004/07/10
36203     Re:[질문] api 공부하는데요 김상면 1282 2004/07/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.