간단한 win api 프로그래밍 질문 있습니다.

kyuho6942의 이미지

프로그램 실행 중 동적으로 윈도우의 제목을 바꾸고 싶습니다. CreateWindow에서 두번째 인자를 변수로 주고
다른 부분에서 wsprintf(변수, TEXT("바꿀제목이름"), 바꿀제목이름길이);로 바꾸면 될 줄알았는데 실행이 안되고 가만히 있는데 어떻게 가능하게 하는지 궁금합니다. 혹시 몰라서 코드도 같이 올립니다..

//======================================================================
// Win32 API Example - Timer Event 2
//
//======================================================================
#include <windows.h>                 // 윈도우 관련 정의
#include "TimerEvent_2.h"          // 프로그램 관련 정의
#include <math.h>
//----------------------------------------------------------------------
// Timer 식별자
//
#define ID_TIMER	1
 
//----------------------------------------------------------------------
// 전역 데이터
//
static const LPCWSTR szAppName = TEXT("TimerEvent2");   // 프로그램 이름
LPWSTR AppName = TEXT("시험");
HINSTANCE hInst;								// 프로그램 인스턴스 핸들
HWND hwndMain;									// 메인 윈도우 핸들
 
//======================================================================
// 프로그램 시작점
//
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nCmdShow)
{
    MSG msg;
    int rc = 0;
 
    // 어플리케이션 초기화
    if( !InitApplication(hInstance) )
		return 0;
 
    // 인스턴스 초기화
    if( !InitInstance(hInstance, lpCmdLine, nCmdShow) )
		return 0;
 
    // 메시지 루프
    while (GetMessage (&msg, NULL, 0, 0)) {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    }
 
    // 인스턴스 소거
    return TermInstance (hInstance, msg.wParam);
}
 
//----------------------------------------------------------------------
// InitApp - 어플리케이션 초기화
//
BOOL InitApplication (HINSTANCE hInstance)
{
    WNDCLASS wc;
 
    // 전역 변수에 인스턴스 핸들 보관
    hInst = hInstance;
 
    // 주 윈도우 클래스 등록
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; // 윈도우 스타일
    wc.lpfnWndProc = MainWndProc;             // 윈도우 프로시저
    wc.cbClsExtra = 0;                        // 추가 클래스 데이터
    wc.cbWndExtra = 0;                        // 추가 윈도우 데이터
    wc.hInstance = hInstance;                 // 소유자 핸들
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);   // 프로그램 아이콘
    wc.hCursor = LoadCursor (NULL, IDC_ARROW);// 기본 커서
    wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
    wc.lpszMenuName =  NULL;                  // 메뉴 이름
    wc.lpszClassName = (LPWSTR)szAppName;     // 윈도우 클래스 이름
 
    if (!RegisterClass(&wc) )
		return FALSE;
 
    return TRUE;
}
 
//----------------------------------------------------------------------
// InitInstance - 인스턴스 초기화
//
BOOL InitInstance (HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd;
 
    // 주 윈도우 생성
    hwndMain = CreateWindowEx (WS_EX_APPWINDOW,
						 szAppName,           // 윈도우 클래스
                         AppName,     // 윈도우 타이틀
                         // 스타일 플래그
                         WS_OVERLAPPEDWINDOW,  //WS_VISIBLE | WS_SYSMENU | WS_CAPTION,
                         CW_USEDEFAULT,       // x 좌표
                         CW_USEDEFAULT,       // y 좌표
                         CW_USEDEFAULT,       // 초기 너비
                         CW_USEDEFAULT,       // 초기 높이
                         NULL,                // 부모 윈도우 핸들
                         NULL,                // 메뉴 (NULL로 설정)
                         hInstance,           // 응용프로그램 인스턴스
                         NULL);               // 생성 매개변수 포인터
 
    if (!IsWindow (hwndMain))
		return FALSE;  // 윈도우 생성 실패시 작동 실패
 
    // 윈도우 표시 및 갱신
    ShowWindow (hwndMain, nCmdShow);
    UpdateWindow (hwndMain);
    return TRUE;
}
 
//----------------------------------------------------------------------
// TermInstance - 프로그램 소거
//
int TermInstance (HINSTANCE hInstance, int nDefRC)
{
    return nDefRC;
}
 
//======================================================================
// 주 윈도우를 위한 메시지 처리 핸들러
//
//----------------------------------------------------------------------
// MainWndProc - 주 윈도우의 콜백 함수
//
LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
    int i;
    //
    // 메시지 분배 테이블을 검사하여 해당 메시지를 처리할지 확인한 후
    // 해당 메시지 핸들러를 호출
    //
    for (i = 0; i < dim(MainMessages); i++) {
        if (wMsg == MainMessages[i].Code)
            return (*MainMessages[i].Fxn)(hWnd, wMsg, wParam, lParam);
    }
    return DefWindowProc (hWnd, wMsg, wParam, lParam);
}
 
//----------------------------------------------------------------------
// DoCreateMain - WM_CREATE 메시지 처리
//
LRESULT DoCreateMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
	SetTimer( hWnd, ID_TIMER, 100, NULL );
        wsprintf(AppName,TEXT("제목변경"));
    return 0;
}
 
//----------------------------------------------------------------------
// DoPaintMain - WM_PAINT 메시지 처리
//
//----------------------------------------------------------------------
// DoPaintMain - WM_PAINT 메시지 처리
//
LRESULT DoPaintMain(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	RECT rect;
	HDC hdc;
	int static movePoint = 20;
	int static point = 40;
 
	GetClientRect(hWnd, &rect);
	hdc = BeginPaint(hWnd, &ps);
 
	const int SIZE = 20;
	const int SPEED = 50;
 
	HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
	HBRUSH ub = (HBRUSH)SelectObject(hdc, brush);
	POINT s;
	static POINT curr;
 
	static int xDistance = 0;
	static int yDistance = 0;
 
	if (xDistance == 0 && yDistance == 0) //처음 시작부분
	{
 
		s.x = (rect.left + rect.right) / 2;
		s.y = (rect.top + rect.bottom) / 2;
 
		int random = 0;
 
		curr = s;
 
		srand(time(NULL));
		xDistance = rand() % (SPEED + 1); //랜덤 함수 
		yDistance = sqrt(pow(SPEED, 2) - pow(xDistance, 2)); //랜덤함수 사용해서 위치 계산
 
		random = rand() % 2; //랜덤 값 재 계산
 
		if (random == 1)
			xDistance *= -1;
 
		random = rand() % 2;
 
		if (random == 1)
			yDistance *= -1;
	}
 
	Ellipse(hdc, curr.x - SIZE, curr.y - SIZE, curr.x + SIZE, curr.y + SIZE);
 
	if (curr.x < rect.left || curr.x > rect.right || curr.y < rect.top || curr.y > rect.bottom) {
		xDistance = 0;
		yDistance = 0;
	}
 
	const int gap_TopBottom = 20;
 
	if (curr.y + SIZE + yDistance < rect.top + gap_TopBottom || curr.y - SIZE + yDistance > rect.bottom - gap_TopBottom) {
		yDistance *= -1;
	}
	else if (curr.x - SIZE + xDistance < rect.left || curr.x + SIZE + xDistance > rect.right) {
		xDistance *= -1;
	}
 
	curr.x += xDistance;
	curr.y += yDistance;
 
	EndPaint(hWnd, &ps);
	return 0;
}
 
//----------------------------------------------------------------------
// DoTimerMain - WM_TIMER 메시지 처리
//
LRESULT DoTimerMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
	InvalidateRect( hWnd, NULL, TRUE );
    return 0;
}
 
//----------------------------------------------------------------------
// DoDestroyMain - WM_DESTROY 메시지 처리
//
LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
	KillTimer( hWnd, ID_TIMER );
    PostQuitMessage (0);
    return 0;
} 

바꿀 변수의 이름은 LPWSTR 타입의 AppName으로 했고, 제목 변경 코드는 DoCreateMain 함수에 wsprintf(AppName,TEXT("제목변경")); 로 집어넣었습니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.