2010년 12월 30일 목요일

custom view 꾸미기

http://sdw8001.tistory.com/tag/CustomView

2010년 12월 20일 월요일

그들이 사는 세상..

이제야 보게된다.
그사세..

여친이 보라고 했었는데.. 6개월이나 지나서 보는구나..

한동안 이거 좀 봐야겠다.

2010년 12월 12일 일요일

안드로이드 drawable 리소스

http://androiddrawableexplorer.appspot.com/

2010년 11월 26일 금요일

에뮬레이터 스킨을 바꾸어보아용~

이클립스에서 보통 기본값으로 나오는 에뮬레이터가 아닌 다른 스킨으로

에뮬레이터를 돌려보는 방법입니다. 매우 간단해요~

어딘가 사이트를 보고 저도 한거 였는데.....기억이 나질 않아 패스하고 간략하게 설명하겠습니다 (__)

안드로이드를 설치하면 설치한 폴더가 어디있는지 아시죠??

저같은 경우는 "   C:\Android   "    <-- 요기에 있어요

폴더에 들어가시면



이런식으로 구성이 되어 있을텐데용  "  Platforms " 라는 곳에 들어갑니다

들어가게되면 아래와 같이 화면이 나옵니다.



현재 자신이 진행하고 있는 프로젝트 버전에 맞게 들어갑니다. 전 android-2.0버전이라 2.0으로 들어갈께용



화면을 보시면 Skins 라고 있지요? 그 화면에 들어가서 제가 올려놓은 압축파일을 풀기만 하면 됩니다.

완전 쉽죠??

그럼 이제 이클립스상에서 세팅하는 방법에 대해 보겠습니다.

이클립스 에뮬레이터 구동하기!!!



이클립스를 구동시키면 핸드폰 모양의 에뮬레이터기를 눌러 새롭게 추가를 합니다.

좌측 팝업창의 New 를 누르면 우측 팝업창이 나오는데


Name     :  여긴 구동하는 에뮬레이터의 이름을 씁니다. (아무거나 상관없어용)

Target    :  여긴 아까 스킨을 넣은 버전을 선택합니다. 전 2.0이었으니 2.0선택

SD Card  :  sd카드선택하기 (각자 해당하는 위치를 지정)

Skin       :  여기서 눌러보면 저처럼 NEXUS-ONE 이라는 영역이 하나 추가가 되어 있을꺼에요 요거 선택

마지막으로 Create AVD를 누르시면 생성이 되실 꺼에요

생성 후 실행해보기



좌측 팝업창에서 생성되어 있는 에뮬레이터를 선택하시고 Start를 누르시면

우측창과 같이 디스플레이 옵션이 나오는데용 보통 Screen Size는 3 Monitor dpi는 80으로

되어 있더라구용 근데 그렇게 하니까 너무 작게 나오는거 같아서 저는 6 에 80 으로 하는데

이건 사용자 취향에 따라 적당히 조절해서 쓰시면 될꺼 같습니다.

별거 없는 내용인데....이미지만 괜히 많아서 스크린 압박이 심하겠는데요 ㅎㅎ

이쁘게 잘 쓰시구용~~

마지막으로 인증샷~!



그림판 실력이라 사진이 후지네용 ㅋㅋ 그래도 깔끔하지용?

아... 가로 세로 바꾸는건  Ctrl+F11 키인거 아시죠?? [이 게시물은 카이로님에 의해 2010-03-22 07:31:48 강좌/학습에서 이동 됨]

2010년 10월 31일 일요일

델파이와 c++의 데이터 타입표

delphi data type c++ data type bytes range of value
Byte unsigned __int8 (1byte: unsigned) 0 to 255
ShortInt __int8 (1byte: signed) -127 to 127
Word unsigned __int16 (2byte, unsigned) 0 to 65,535
SmallInt
__int16
(2byte: signed) -32,768 to 32,767
LongWord
unsigned __int32
(4byte: unsigned) 0 to 4,294,967,295
unsigned int
unsigned long
Cardinal
unsigned __int32
LongInt
__int32
(4byte: signed) -2,147,483,648 to 2,147,483,647
int
unsigned long
Integer
__int32
Int64 __int64
(8byte: signed) -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
long long

2010년 10월 28일 목요일

std::map 에서 key를 내가 원하는 놈으로 쓰기

map이란 놈이 조금 당혹스러운 면이 있다..

 

find 메소드에서 내가 원하는 결과를 얻을려면..

 

operator< 를 구현해줘야 하는데..

 

딴 operator가 없으니 가령.. "==" operator..

 

serial한 값을 넣어서 비교 해줘야 하는것 같다..

 

내가 능력이 딸려서 그런지는 모르겠지만..

 


 


struct net_event_key
{
 DWORD _type;
 WORD _lParam;
 WORD _wParam;

 explicit net_event_key( DWORD type, WORD lparam, WORD wparam ) {
  _type = type;
  _lParam = lparam;
  _wParam = wparam;
 }


 bool operator<( const net_event_key& param ) const {
  unsigned __int64 lvalue = 0;
  lvalue = (unsigned __int64 ) _type << (4 * 8);
  lvalue |= _lParam << ( 2 * 8 );
  lvalue |= _wParam;

  unsigned __int64 rvalue = 0;
  rvalue = (unsigned __int64 ) param._type << (4 * 8);
  rvalue |= param._lParam << ( 2 * 8 );
  rvalue |= param._wParam;

  return lvalue < rvalue;
 }

};


이런 식으로 해주니 된다..

2010년 10월 19일 화요일

delphi의 TDateTime

새로 입사한 회사에서 쓰는거라 delphi를 쓰긴 쓰지만..

 

이건 머.. ㅡㅡa

 

아놔..

 

사족은 닥치고.. TDateTime은 1899년 12월 30일 12:00 AM부터 날짜와 시간을 담고 있다.

1은 하루이고 소숫점이 시간값이다.

 

24시간 = 1

1시간 = 0.04166666666667

1분 = 6.944444444444e-4

1초 = 1.157407407407e-5

 

짜증난다 정말.. -_-;;

 

 

2010년 10월 12일 화요일

coherent

그룹관리 시스템 제목..

진짜 간단하게 아무런 셋팅 없이 쓸수 있는 사내 메신저 및 일정관리 프로그램을 만드는 것을 목표로 만들어야 겠다.

채팅부분을 뺀 나머지는 web-service 형태로 이 웹 서버도 단독 서버형태로 최대한 사용자가 쉽게 쓸수 있게 하는 것을 목표로 하겠다.

포트폴리오 목적도 있고, 사내 메신저가 끝나면 android와 아이폰용으로 client를 개발하고 여기다 넣어 놔야겠다.

오늘부터 스타트...

2010년 8월 31일 화요일

TList 사용

델파이에서 리스트 사용시 tlist tobjectlist 사용
Published with Blogger-droid v1.5.8

2010년 8월 30일 월요일

내 폰에 스마트 키보드 깔았눈데 은근히 이거 재밌고 계속 쓰고 싶네

조합형으로 취급하는 듯 ㅎㅎ
좋다 !
스마트 폰으로 장문을 쓸일은 없을것 같았능데 이거 설치하닌깐 은근히 타이핑하고 싶네~~
ㅎㅎ
Published with Blogger-droid v1.5.8

2010년 8월 20일 금요일

친구가 오늘 소개팅 한다고 자랑질 한다

짜잉나~~
Published with Blogger-droid v1.5.4

2010년 8월 8일 일요일

폰에서 블로그하기

앱이 생각보다 별로다 ㅋㅋ
스마트폰에서는 블로그보단 페이스북이 나은것 같다
ㅋㅋ
다음 주는 좀 바쁠 것 같네 ㅋㅋ
Published with Blogger-droid v1.4.10

2010년 8월 6일 금요일

boost 설치 완료

이제 좀 공부 해봐야긋다..

ㅋㅋ

2010년 3월 10일 수요일

바깥 테두리 투명 처리

SetWindowRgn 란 함수로 처리한단다..

간단하게 예제로 보면

 //원형 시계

//ExClock.c
#include <windows.h>
#include <stdlib.h>
#include <time.h>

#define CLOCKTIMER 1
#define CLOCKSIZE 100

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
VOID CALLBACK TimeProc(HWND hwnd,UINT iMsg,UINT wParam,DWORD lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
				   PSTR szCmdLine, int iCmdShow)
{
	static char szAppName[] = "ExClock";
	HWND        hwnd;
	MSG         msg;
	WNDCLASSEX  wndclass;
	int cx,x;

	wndclass.cbSize        = sizeof(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;
	wndclass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

	RegisterClassEx(&wndclass);
	//스크린의 가로 크기를 얻는다.
	cx=GetSystemMetrics(SM_CXFULLSCREEN);
	x=cx-CLOCKSIZE;

	hwnd = CreateWindow(szAppName,
						"원형시계 예제:ExClock",
						WS_POPUP | WS_VISIBLE,
						x,
						0,
						CLOCKSIZE,
						CLOCKSIZE,
						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 iMsg, WPARAM wParam, LPARAM lParam)
{
	HDC         hdc;
	PAINTSTRUCT ps;
	HBRUSH hBrush,oldBrush;
	HPEN   hPen,oldPen;
	HRGN rgn;
	switch(iMsg)
	{
	case WM_CREATE:
		SetTimer(hwnd,CLOCKTIMER,100,(TIMERPROC)TimeProc);
		rgn=CreateRoundRectRgn(0,0,CLOCKSIZE,CLOCKSIZE,CLOCKSIZE,CLOCKSIZE);
		SetWindowRgn(hwnd,rgn,FALSE);
		return 0;
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);
		hBrush=CreateSolidBrush(RGB(0,0,200));
		hPen=CreatePen(PS_SOLID,3,RGB(200,200,91));
		oldBrush=SelectObject(hdc,hBrush);
		oldPen=SelectObject(hdc,hPen);

		RoundRect(hdc,0,0,CLOCKSIZE,CLOCKSIZE,CLOCKSIZE,CLOCKSIZE);

		SelectObject(hdc,CreateSolidBrush(RGB(0,0,0)));
		RoundRect(hdc,15,30,85,60,20,20);
		SelectObject(hdc,oldBrush);
		SelectObject(hdc,oldPen);
		DeleteObject(hBrush);
		DeleteObject(hPen);
		EndPaint (hwnd, &ps) ;
		return 0;
	case WM_DESTROY:
		KillTimer(hwnd,CLOCKTIMER);
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

VOID CALLBACK TimeProc(HWND hwnd,UINT iMsg,UINT wParam,DWORD lParam)
{
	time_t curtime;
	struct tm cur;
	char curdate[80];
	HDC hdc;
	time(&curtime);
	cur=*localtime(&curtime);
	wsprintf(curdate,"%02d:%02d:%02d",cur.tm_hour,cur.tm_min,cur.tm_sec);
	hdc=GetDC(hwnd);
	SetBkColor(hdc,RGB(0,0,0));
	SetTextColor(hdc,RGB(255,255,0));
	TextOut(hdc,20,37,curdate,strlen(curdate));
	ReleaseDC(hwnd,hdc);
}
 

2010년 3월 8일 월요일

Dialog를 작업표시줄(task bar)에서 숨기려면

Dialog기반 프로그램을 작업표시줄에서 감추고 싶다면, 간단하게 Window Style을 수정해 주면 된다.

  1. LRESULT CMainDlg::OnInitDialog(  
  2.     UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)  
  3. {  
  4.     ...  
  5.     ModifyStyleEx( WS_EX_APPWINDOW,WS_EX_TOOLWINDOW,0 );  
  6.     return TRUE;  
  7. }  

문제는!!
이렇게 되면 Alt+Tab으로는 이 window를 선택할 수 없다는 점이다. 어쩌다 포커스를 잃게되면, window를 다시 찾기 상당히 귀찮아진다.

두시간의 삽질-_-을 통해 꽁수를 부려봤다. 좀 더 좋은 방법이 있다면 알려주시길~
WTL기반으로 작업했지만, MFC라도 약간만 응용하면 적용할 수 있다. (오히려 더 쉽게)

한줄요약: 작업표시줄에서는 나타나지 않으면서, Alt + Tab을 통해 활성화 되는 Dialog를 만들어 보자.

1. 바보-_- 윈도를 하나 만들자. (MFC라면 CWnd를 쓰면 되므로 이 과정은 생략)

  1. class CInvisibleWnd : public CWindowImpl<CInvisibleWnd >  
  2. {  
  3. public:  
  4.     DECLARE_WND_CLASS(NULL);  
  5.  
  6.     BEGIN_MSG_MAP(CInvisibleWnd)  
  7.     END_MSG_MAP()  
  8. };  

2. WTL이라면 Run함수에서 Dialog를 생성할 것이다. (MFC라면 CWinApp::InitInstance)
이때, Dialog의 부모로 바보윈도를 설정해 준다. 눈치 채셨겠지만, 이 꽁수의 핵심은 Dialog의 부모로 설정한 바보윈도는 화면에 표시되면 안된다는 점이다.

  1. int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT)  
  2. {  
  3.     ...  
  4.  
  5.     CInvisibleWnd wndInvisible;  
  6.     wndInvisible.Create( NULL, 0, NULL, WS_OVERLAPPEDWINDOW );  
  7.     CMainDlg dlgMain;  
  8.     if ( dlgMain.Create( wndInvisible ) == NULL )  
  9.     {  
  10.         ATLTRACE(_T("Main dialog creation failed!\n"));  
  11.         return 0;  
  12.     }  
  13.  
  14.     dlgMain.ShowWindow(nCmdShow);  
  15.     int nRet = theLoop.Run();  
  16.     _Module.RemoveMessageLoop();  
  17.  
  18.     if ( wndInvisible.IsWindow() )  
  19.         wndInvisible.DestroyWindow();  
  20.  
  21.  
  22.     return nRet;  
  23. }  

그렇다. 바보 윈도는 화면에 표시되지 않고 있으니 작업표시줄에 나타나지 않지만, 인스턴스가 있으므로 Alt + Tab을 치면 나타난다! 그 인스턴스를 활성화 시켜주면 자식윈도로 등록된 Dialog가 활성되는 원리.
중요한점은, 프로그램 종료 시점에서 바보윈도또한 소멸시켜 줘야 한다는 거!

MFC라면 좀 더 쉽다. CDialog를 생성할때, 바보 윈도를 생성자의 parameter로 넘겨주기만 하면된다.
(물론, 소멸은 신경써줘야 한다.)

  1. BOOL CComaApp::InitInstance()  
  2. {  
  3.     ...  
  4.  
  5.     CWnd wndInvisible;  
  6.     LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);  
  7.  
  8.     if (!wndInvisible.CreateEx(0,   
  9.                             pstrOwnerClass,   
  10.                             _T(""),  
  11.                             WS_OVERLAPPEDWINDOW ,   
  12.                             CW_USEDEFAULT,  
  13.                             CW_USEDEFAULT,  
  14.                             CW_USEDEFAULT,  
  15.                             CW_USEDEFAULT,  
  16.                             NULL,   
  17.                             0 ))  
  18.     {  
  19.         TRACE(_T("failed to create invisible window"));  
  20.         return FALSE;  
  21.     }  
  22.  
  23.     CMainDlg dlg(&wndInvisible);  
  24.     
  25.     m_pMainWnd = &dlg;  
  26.     dlg.DoModal();  
  27.  
  28.     if (wndInvisible.m_hWnd != NULL)  
  29.         wndInvisible.DestroyWindow();  
  30. }  

3. 이제 OnInitDialog에서 ModifyStyleEx( WS_EX_APPWINDOW,0 ); 해주면 된다.

꽁수 끄읏!

2010년 3월 4일 목요일

com 모듈을 웹에서 사용하는 방법

웹에서 com모듈을 바로 불러쓰는 형태는 바람직한 형태는 아닌거 같지만

ActiveX의 형태를 벗어나고, 크로스 브라우징의 측면에서 보면 꽤 괜찮은 선택인 것 같다..

우선 com모듈을 오류없이 불러 쓸려면 레지스터리 조작이 필수적이다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Ext\PreApproved


이 위치에 키값을 저장시키면 된다.


그리고 com모듈을 만들때 IObjectSafety interface를 추가해줘야 한다.
MFC와 ATL 방식이 있는데.. 난 ATL을 쓰므로 MFC는 패스~

 #include <atlctl.h>


class ATL_NO_VTABLE {customclass} :

...

public IObjectSafetyImpl<{customclass},

INTERFACESAFE_FOR_UNTRUSTED_CALLER |

INTERFACESAFE_FOR_UNTRUSTED_DATA>

....


BEGIN_COM_MAP({customclass})

...

COM_INTERFACE_ENTRY(IObjectSafety)

END_COM_MAP()

 이렇게 하면 된다

참!! com project에서 바로 레지스터리에 추가하는 것도 좋은 방법인거 같다.