본문 바로가기

Development

[VC++] SystemParametesInfo(각종시스템정보조사)

- GetSystemMetrics함수는 16비트 윈도우즈부터 지원되는 함수였다. 그런데 32비트 윈도우즈에서는 설정 사항들이 더 많아지고

   복잡해져서 이 함수만으로는 모든 설정 사항을 조사할 수 없게 되었다. 더구나 이 함수는 정수형을 리턴하기 때문에 좀 더

   복잡한 형태의 정보는 리턴할 수 없으며 설정 정보를 변경하는 기능도 가지고 있지 않다. 그래서 95부터는 좀 더 많은

   설정 정보를 다룰 수 있는 함수가 나오게 됨.

 

BOOL SystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);

uiAction : 동작을 지정하는 값 무려 140여개.

두번째, 세번째 인수 : uiAction에 따라 의미가 달라지는데 설정 정보를 돌려받기 위한 용도나 또는 설정정보를 전달하기 위한

                        용도로 사용된다.

fWinIni : 이 함수가 설정을 변경했을 때 WM_SETTINGCHANGE 메시지를 모든 탑레벨 윈도우에게 보낼 것인가 아닌가 결정.

       이 메시지를 보내면 다른 윈도우들이 즉시 변화를 감지할 수 있으며 또현 변경된 설정이 레지스트리에도 저장된다.

       다음 세 플래그의 조합을 지정하거나 0을 지정할 수도 있다.

   SPIF_UPDATEINIFILE           사용자 프로필에 변경사항을 기록

   SPIF_SENDCHANGE=           모든 탑 레벨 윈도우에게 WM_SETTINGCHAGE

   SPIF_SENDWININICHANGE    메시지를 보낸다.

 

=================================================================================================================

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;
 BOOL bDrag;
 static TCHAR Mes[255]="마우스 버튼을 누르면 '마우스로 끄는 동안 창 내용 표시'"
  "효과를 토글합니다.'";

 switch (iMessage) {
 case WM_LBUTTONDOWN:
  SystemParametersInfo(SPI_GETDRAGFULLWINDOWS,0,&bDrag,0);
  SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,!bDrag,NULL,0);
  if (!bDrag==TRUE) {
   lstrcpy(Mes,"마우스로 끄는 동안 창 내용 표시함");
  } else {
   lstrcpy(Mes,"마우스로 끄는 동안 창 경계선만 표시함");
  }
  InvalidateRect(hWnd,NULL,TRUE);
  return 0;
 case WM_PAINT:
  hdc=BeginPaint(hWnd, &ps);
  TextOut(hdc,50,50,Mes,lstrlen(Mes));
  EndPaint(hWnd, &ps);
  return 0;
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}