반응형

안녕하세요. 애드소프트 입니다.

 

오랜기간 윈도우 프로그램을 개발해보지 못해서 바뀐게 있는지 확인하고 공부해 보고자

데이크톱용 개발을 해 볼까해서 프로젝트를 만들고 있는데 MFC항목이 보이지 않습니다. ㅎㅎ

SDK를 설치 해야하는건지 설치할때 빼먹었나봐요.

그래서 찾다보니 Windows 데이크톱 마법사라고 있어 궁금함을 참지 못하고 사용해보면서 기록을 남겨볼까 합니다.

 

프로젝트를 생성하기 위해 다은 Windows 데이크톱 마법사를 선택하니 다음과 같은 화면이 보입니다.

데스크톱 어플리케이션을 만들어 볼까 했으니 선택하고 확인을 눌러볼께요.

MFC해더가 여기에서 추가 가능하도록 바뀌었나봅니다.

데스크톱 어플리케이션을 선택하니 MFC가 비활성화 되는것을 보니 SDK를 따로 설치해야할 듯 합니다.

아니면 MFC 프로젝트로 생성되는것일지 모르겠습니다.

빈프로젝트는 말그대로 빈프로젝트 일거라 생각이 됩니다.

미리 컴파일된 헤더는 Visual Studio 2017 이하의 버전에서 MFC를 사용할 경우 stdafx.h 해드파일을 include 하여 사용했던 기억이 납니다.

여기에 포함되는 내용은 vector, map 등 std::를 붙여쓰는 함수들이 었던것으로 생각합니다.

미리 컴파일된 해더만 선택해서 만들어 보았습니다.

 

프로젝트가 생성된 코드를 보니 stdafx.h 파일이 pch.h파일로 바뀐듯합니다.

솔루션 탐색기과 해더 파일을 보니 MFC 프로젝트가 자동으로 생성되는것을 보니 MFC라는 이름이 바뀐것으로 생각되네요.

 

 

예전엔 stdafx.h 포함되었던 내용이 framework.h 파일로 변경된 것 같습니다.

리소스도 같단히 확인해 본 후 실행해 보도록 하겠습니다.

기본적으로 만들어 지는 내용을 확인해 볼까 합니다.

Accelerator는 단축키 정보인듯 합니다.

나머지는 이름과 같이 생성되는것 같습니다.

메뉴와 다른 항목들도 눌러봤는데 별건 없습니다.

 

Dialog의 IDD_ABOUTBOX를 눌러봤는데 생각보다 무거워졌나봅니다.

열리는데 상당한 시간이 소요되었습니다.

MFC의 문법은 많이 변하지 않았습니다.

 

오랜만에 보니 윈도우창 디자인을 어디에 구성했는지 기억이 안납니다 ㅎㅎ

실행해보니 화면은 구성되지 않은채 실행되는것을 보니 따로 추가해야할 것으로 생각됩니다.

 

공부를 조금한 후 다음 포스팅에서 화면 추가 방법을 다뤄보겠습니다.

(다음 포스팅에서 폼뷰를 넣기 위해 여러 좌절 후 프로젝트를 다시 생성했습니다. ㅎㅎ)

 

Windows 데트크톱 마법사는 무엇일까에 대한 답은 MFC의 변경된 이름인듯 합니다.

 

MFC에서 변경된 것인줄 알았는데 다음 포스팅을 작성하면서

알게되었는데 이 프로젝트는 WinAPI 프로젝트 입니다. ㅠ.ㅠ

 

감사합니다.

 

반응형
반응형

안녕하세요. 애드소프트입니다.

 

오늘은 안드로이드 개발을 하다보면 많은 액티비티(Activity)를 새롭게 호출할때가 많습니다.

 

액티비티에 대해 간단히 알아 보도록 하겠습니다.

액티비티의 개념은 화면에 표시되는 UI구성을 위해 가장 기본이 되는 요소입니다. 안드로이드 앱은

화면에 UI를 표시하기 위해 최소하나 이상의 Activity를 가져야합니다.

앱 실행시 AndroidManifest.xml을 통해 최초 실행될 Activity를 지정할 수도 있습니다.

간단히 설정하자면 현재 화면상에 표시되는 활성화된 창이라고 할 수 있습니다.

 

액티비티의 상태 변화 라이프 사이클은 다음과 같이 표시됩니다.

타원은 상태를 표시하며, 직사각형은 상태를 변경하기 위한 콜백 함수를 표시합니다.

 

출저 : 구글 Developer

 

오늘은 이 Activity를 표시하거나 종료하는 방법을 알아볼까 합니다.

 

Activity를 호출하기 위해서는 다음 두 함수를 이용합니다.

1. startActivity - 액티비티를 호출 할때 사용합니다.

2. startActivityForResult - 액티비티가 시작 될때 코드값를 전송합니다.

 

다음 함수는 Intent를 통해 제공됩니다.

 

Activity를 활성화 하기 위한 간단한 코드를 작성해 보겠습니다.

Intent newIntent = new Intent(context, JavaActivityClass.class);

//key = 문자열키, value = 문자열 값 입력
intent.puExtra(key, value);

startActivity(intent);

파라미터를 받는 쪽에서는 다음과 같이 구현됩니다.

Intent intent = getIntent();
String value = intent.getExtras().getString("key");

 

startActivityForResult를 사용하여 새로운 Activity를 사용한다면 다음과 같이 사용하시면 됩니다.

Intent newIntent = new Intent(context, JavaActivityClass.class);
startActivityForResult(intent, newIntent, requestCode.LOGIN_RESULT);

코드를 사용하기위해서는 다음 함수를 구현 하시면 됩니다.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	super.onActivity(requestCode, resultCode, data);
    case RequestCode.LOGIN_RESULT:
    	if(resultCode == RESULT_OK && !data) {
        	//로그인 성공시
        }else if(requestCode == RESULT_CANCELED) {
        	// 로그인 결과가 CANCEL 할 때 할일
        }
        break;
      default:
        break;
}

본 예제들은 가상으로 코딩한 내용입니다. 오타와 문법이 조금씩 다를 수 있는점 가만해 주세요 ^^;

본 예제는 새로운 Activity를 실행하면서 두가지 방법으로 간단한 결과나 파라미터를 전송하는 방법을 구현한 내용입니다.

 

 

 

 

 

 

 

 

 

반응형
반응형

안녕하세요. 애드소프트 입니다.

오늘은 LinearLayout을 소개해 볼까 합니다.

 

안드로이드 앱을 만들려면 레이아웃을 기반으로 위젯을 배치해 개발을 하게 됩니다.

제일 기본이 되는 레이아웃 중 사용하기도 편하고 설정할 것이 많지 않아 간단하게 

배치할때 사용하게 됩니다.

 

LinearLayout은 가로또는 세로의 단일 방향으로 정렬을 해주는 스택 방식의 뷰 그룹입니다.

정렬 방향은 android:origentation 속성을 사용하여 레이아웃 방향을 지정할 수 있습니다.

 

분홍색 처럼 가로로 배열 하거나 연두색 처럼 세로로 정렬하여야 할 때 많이 사용됩니다.

위젯을 균등하게 분할 할때도 유용하게 사용하 실 수 있습니다.

균등하게 분할하기 위해서는 

layout_width나 layout_height를 0dp또는 wrap_content 속성을 주어야합니다.

android:layout_weight 속성에 모두 1을 설정하면 위젯을 수에따라 균등하게 분할 됩니다.

 

다음 예제를 통해 확인해 보시기 바랍니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/btn1" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="@string/btn2" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="@string/btn3" />
</LinearLayout>

 

위와같이 코딩을 하시면 다음과 같이 배치가 될 것입니다.

글자 크기와 보더는 다르지만 정렬 방식만 참고하세요.

 

반응형
반응형

안녕하세요. 애드소프트 입니다.

 

오늘은 토스트 사용법에 대해 알아 보겠습니다.

 

토스트(Toast)는 사용자에게 짧은 메시지 형식으로 팝업과 비슷한 형태의 오버레이 창에 메시지를 표시합니다.

메시지 전달을 위해 사용하고 일정시간 지나면 자동으로 사라집니다. 쉽게 말해 단순한 의사전달 팝업 정도로 이해하시면 될 것 같습니다.

 

android developer 발췌

 

 

Toast(토스트) 사용하기

 

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        TextView content;
        public ViewHolder(View view) {
            super(view);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast alertToast = Toast.makeText(view.getContext(), getContentTextView().getText(), Toast.LENGTH_SHORT );
                    alertToast.show();
                }
            });

            title = view.findViewById(R.id.item_tv_title);
            content = view.findViewById(R.id.item_tv_content);
        }

        public TextView getContentTextView() {
            return content;
        }
    }

 

상단 예제는 RecylerView의 아이템을 눌렀을 경우 토스트 메시지를 표시하는 샘플 코드입니다.

 

이 예는 대부분의 토스트 메시지 알림에 필요한 모든 것을 보여주며, 이 외에 필요한 것은 거의 없습니다. 그러나 토스트 메시지의 위치를 다르게 지정하거나 단순한 SMS 대신 자체 레이아웃을 사용하는 것이 좋습니다.

 

토스트 메시지 위치 지정

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);

위치를 오른쪽으로 살짝 이동하려면 두 번째 매개변수의 값을 올리고, 아래로 조금 이동하려면 마지막 매개변수의 값을 올립니다.

 

맞춤 토스트 메시지 뷰 만들기

단순한 텍스트 메시지로 충분하지 않다면 토스트 메시지 알림용으로 맞춤설정된 레이아웃을 만들 수 있습니다. 맞춤 레이아웃을 만들려면 XML 또는 애플리케이션 코드에 뷰 레이아웃을 정의하고 루트 View 객체를 setView(View) 메서드에 전달합니다.

다음 스니펫에는 토스트 메시지 알림용으로 맞춤설정된 레이아웃이 포함되어 있습니다(layout/custom_toast.xml로 저장됨).

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/custom_toast_container"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="8dp"
              android:background="#DAAA"
              >
    <ImageView android:src="@drawable/droid"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginRight="8dp"
               />
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textColor="#FFF"
              />
</LinearLayout>

LinearLayout 요소의 ID는 'custom_toast_container'임을 확인하세요. 다음과 같이 이 ID와 XML 레이아웃 파일 'custom_toast'의 ID를 사용하여 레이아웃을 확장해야 합니다.

 

LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast,
                (ViewGroup) findViewById(R.id.custom_toast_container));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("This is a custom toast");

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

 

먼저 getLayoutInflater()(또는 getSystemService())를 사용하여 LayoutInflater를 가져온 다음 inflate(int, ViewGroup)

사용하여 XML에서 레이아웃을 확장합니다.

첫 번째 매개변수는 레이아웃 리소스 ID이고 두 번째는 루트 뷰입니다.

이 확장된 레이아웃을 사용하여 레이아웃에서 더 많은 뷰 객체를 찾을 수 있으므로 이제 ImageView와 TextView 요소의 콘텐츠를 캡처하고 정의할 수 있습니다.

마지막으로 Toast(Context)를 사용하여 새 토스트 메시지를 만들고 토스트 메시지의 일부 속성(예: 중력 및 지속 시간)을 설정합니다.

그런 다음 setView(View)를 호출하고 확장된 레이아웃을 전달합니다.

이제 show()를 호출하여 맞춤 레이아웃으로 토스트 메시지를 표시할 수 있습니다.

 

참고 : developer.android.com/guide/topics/ui/notifiers/toasts

반응형

+ Recent posts