728x90
300x250
[MFC] 윈도우 프로그래밍 기초 - 윈도우 클래스 만들기

 

WinMain 함수에서 첫 번째 단계가 윈도우 클래스를 만드는 과정입니다.

~RegisterClass( & ...... ) 까지 만드는 과정을 윈도우 클래스를 구현한다고 보시면 됩니다.

 

Winuser.h 파일에 윈도우 클래스 생성을 위한 구조체 구조를 소개하겠습니다.

 


1. WNDCLASS 구조체

 

typedef struct tag WNDCLASS{
     UINT style;

     WNDPROC lpfnWndProc;

     int cbClsExtra;

     int cbWndExtra;

     HINSTANCE hInstance;

     HICON hIcon;

     HCURSOR hCursor;

     HBRUSH hbrBackground;

     LPCSTR lpszMenuName;

     LPCSTR lpszClassName;

 winuser.h의 구조체

 

* 클래스를 생성하는 원리만 이해하면 되므로, 현재의 코드는 암기하시거나 할 필요는 없습니다.

 


2. 구현(Implements)

 

 

 #include <Windows.h>
 #include <tchar.h>

 

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

 LPTSTR lpszClass = _T("TestApp");

 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParameter, int nCmdShow){

 

      HWND hWnd;
      MSG Message;

      WNDCLASS WndClass;

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

      RegisterClass(&WndClass);

}


LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam){

 

       // 이 영역은 다음에 언급하겠습니다.

 

}

 

 

반응형
728x90
300x250
[Java] 상속에 관한 방법

 

상속 방법 1)

 

class Account{
     String accountNo;
     String ownerName;
     int balance;
  
     void deposit(int amount){
          balance += amount;
     }
 
     int withdraw(int amount) throws Exception{
  
     if ( balance < amount )
           throw new Exception("잔액이 부족합니다.");
     else
           balance -= amount;
  
     return amount;
     }

 

Account.java

 

class CheckingAccount extends Account{

      String cardNo;
 
      int pay ( String cardNo, int amount ) throws Exception{
      if ( !cardNo.equals(this.cardNo) || (this.balance < amount ) )
           throw new Exception("지불이 불가능합니다.");
      return withdraw(amount);
     

      }

 

CheckingAccount.java

 

class InheritanceExample{                                                                              
                                                                                                    
      public static void main(String args[]) 

     {                                                            

          CheckingAccount obj;

          obj = new CheckingAccount();                                                   
          obj.accountNo = "110-22-333333";                                                          
          obj.ownerName = "홍길동";                                                                     
          obj.cardNo = "5555-6666-7777-8888";                 
          obj.deposit(100000);                                                                           
                                                                                                 
          try{                                                                                           

                 int paidAmount = obj.pay("5555-6666-7777-8888", 47000);
                 System.out.println("지불액:" + paidAmount);                          
                 System.out.println("잔액:" + obj.balance);                 
                                                                                            
          } catch(Exception e)                                                                           
          {                                                                                             
                  System.out.println(e.getMessage());            

 

           }              
                             
      }                                                                                                                                               
}                                                                                                     

 

InheritanceExample.java

 

상속 방법 2)

 

class Account{
      String accountNo;
      String ownerName;
      int balance;
  
      void deposit(int amount){
            balance += amount;
      }
 
      int withdraw(int amount) throws Exception{
  
             if (balance < amount)
                   throw new Exception("잔액이 부족합니다.");
             else
                   balance -= amount;
  
             return amount;

       }
 

 

 

Account.java

 

class CheckingAccount extends Account{

       String cardNo;

       CheckingAccount(String accountNo, String ownerName, int balance, String cardNo){
           this.accountNo = accountNo;
           this.ownerName = ownerName;
           this.balance = balance;
           this.cardNo = cardNo;

      }
 
       int pay(String cardNo, int amount) throws Exception{

 

       if ( !cardNo.equals(this.cardNo) || (this.balance < amount))
                  throw new Exception("지불이 불가능합니다.");
  

       return withdraw(amount);

 

  }
 

 

CheckingAccount.java

 

class InheritanceExample{                                                                                                                                                                                                                                          
     public static void main(String args[])

    {                                                                             
        CheckingAccount obj;

        obj = new CheckingAccount("113-333-333333", "홍길동", 100000, "5555-6666-7777-8888");
                                                                                              
       try {
             int paidAmount = obj.pay("5555-6666-7777-8888",47000);
             System.out.println("지불액:" + paidAmount);
             System.out.println("잔액:" + obj.balance);
       } catch(Exception e) {
             System.out.println(e.getMessage());

       } 
   }
}

 

InheritanceExample.java

반응형
728x90
300x250

[Networks] TCP/IP A,B,C 클래스 네트워크

안녕하세요. 오랜만에 글을 써보게 되었습니다. 이번 글은 TCP/IP의 A,B,C 클래스 네트워크에 대한 개론을 설명하겠습니다. IANA 또는 ISP는 기업의 규모에 따라 IP 주소 블록을 할당하며, 이 주소 블록은 통상 네트워크라 불립니다. 서브넷은 할당된 주소 세트를 분할한 하부 구조이기에 서브넷(Sub-Net)이라 불려지게 된 것입니다. 대규모 기업들은 A 클래스 네트워크(모두 할당되었기에 남은 것이 없다)를 얻고, 중간규모의 기업들은 B 클래스 네트워크(아직 남아있기는 하지만 거의 없다)를 얻게 되며, 나머지는 C클래스 네트워크(여유분이 남아있다)를 얻습니다. IP주소의 종류에는 5가지의 종류가 존재합니다.

 클래스 A주소  0 ~ 126
 예약된 루프백 주소  127
 클래스 B주소  128~191
 클래스 C주소  192~223
 멀티케스트 주소  224~239
 예약된 연구용 주소  240~255

1) A 클래스 네트워크
대규모 네트워크의 첫 8bi는 NIC에서 설정하기 때문에 내부 네트워크 관리자는 나머지 24bit를 설정할 수 있습니다. 가장 왼쪽의 8bit는 0 ~ 126 사이의 값을 가질 수 있으므로 총 127개의 A 클래스 네트워크가 존재할 수 잇따. IBM과 같은 기업들이 A 클래스를 할당받았으며 이 주소는 전부 127개뿐이다. 8bit만 고정되고 24bit가 남았다는 것은 A 클래스 네트워크가 최대 2의 24승, 즉 대량 1,600만 개에 이르는 수의 호스트를 가질 수 있음을 의미한다. A 클래스 네트워크는 General Electric(3.x.y.z), BBN(4), IBM(9), Xerox(13), Hewlett-Packard(15), DEC(16), Apple(17), MIT(18), Ford(19), Eli Lily(40), DuPont(52), Merck(54), Boeing(55), the U.S. Postal Service(56) 그리고 여러 방위 그룹들(누가 이것을 만들었는 지 생각을 해보시기 바랍니다)이 속해 있습니다.
(A 클래스 네트워크만으로도 2주정도의 회의를 할 수 있습니다)

또한, 45.x.y.z 네트워크 세트를 가지는 Networld+Interop과 U.K Department of Social Security(51), Norsk Informasjonsteknologi(32) 같은 할당이 예상되지 않았던 그룹들도 있습니다.

2) B 클래스 네트워크
중간 규모 네트워크에는 가장 왼쪽 16bit가 미리 할당되며, 나머지 16bit를 로컬에서 사용할 수 잇다. B 클래스 주소는 첫번째 쿼드에 항상 128 ~ 191 사이의 값을 가지고, 두번째 쿼드에는 0 ~ 255 사이의 값을 가진다. 그러므로 B 클래스에는 최대 16,384개의 호스트가 존재 할 수 있다. B 클래스 네트워크를 할당 받은 업체로는 Microsoft와 Exxon 같은 업체가 있습니다.(Apple과 IBM은 A 클래스를 할당받았지만, Microsoft는 B클래스 네트워크를 할당 받았습니다. 물론 이것 때문에 빌게이츠가 밤잠을 설칠 것이라는 생각은 하지 않습니다.)

3) C 클래스 네트워크
소규모 네트워크에는 가장 왼쪽 24bit가 미리 지정되어 있으며, 오직 8bit만을 로컬 관리에 활용할 수 있습니다(이는 C 클래스 네트워크가 단지 254개의 호스트만을 가질 수 있음을 의미합니다).
그러나 NIC가 24bit 부분을 처리하기 때문에 C 클래스 네트워크 주소는 할당하기가 쉽다는 이점을 가지고 있습니다. C 클래스 주소는 192 ~ 223 사이의 값으로 시작하고 두번째와 세번째 쿼드는 0 ~ 255 사이의 값을 가질 수 있으므로 전체 C 클래스 네트워크의 수는 2,097,152개에 이른다고 합니다.
마지막으로 할당되는 C 클래스 네트워크는 223.255.255.z일 것이며, 이 네트워크의 소유자는 오직 z만을 제어할 수 있습니다.

예약된 주소 : 일부 주소는 멀티케스트와 연구 목적으로 예약이 되어 있으며, 이들은 네트워크에 할당하여 사용할 수 없는 주소들이다. 이 중에서 224.0.0.0 범위의 주소는 네트워크에서 여러 그룹의 컴퓨터들로 데이터를 전송하기 위한 멀티캐스트 용도로 예약이 되어있습니다.

반응형

+ Recent posts