GetOpenFileName

¿øÇü

BOOL GetOpenFileName(LPOPENFILENAME lpofn);

MFC ¿øÇü

ÇØ´çÇÏ´Â ÇÔ¼ö ¾øÀ½

Àμö

¢ºlpofn : ÆÄÀÏ ¿­±â °øÅë ´ëÈ­»óÀÚ ÃʱâÈ­¿¡ »ç¿ëµÉ OPENFILENAME ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. ÀÌ ±¸Á¶Ã¼ÀÇ ´ëÈ­»óÀÚÀÇ ¿É¼ÇÀ» ¼³Á¤ÇÑ ÈÄ GetOpenFileName ÇÔ¼ö¸¦ È£ÃâÇÏ¸ç »ç¿ëÀÚÀÇ ¼±Åà °á°úµµ ÀÌ ±¸Á¶Ã¼·Î ¸®ÅϹ޴´Ù.

¸®ÅÏ

»ç¿ëÀÚ°¡ È®ÀÎ(OK) ¹öÆ°À» ´­·¯ ÆÄÀÏÀ» ¼±ÅÃÇßÀ¸¸é 0ÀÌ ¾Æ´Ñ °ªÀÌ ¸®ÅϵǸç ÆÄÀÏ ¼±ÅÃÀ» Ãë¼ÒÇ߰ųª ¿¡·¯°¡ ¹ß»ýÇßÀ¸¸é 0ÀÌ ¸®ÅϵȴÙ. ¿¡·¯ ¹ß»ý½Ã CommonDlgExtendedError ÇÔ¼ö·Î ¿¡·¯ Äڵ带 Á¶»çÇÒ ¼ö ÀÖÀ¸¸ç ´ÙÀ½ ¿¡·¯ Áß Çϳª°¡ ¸®ÅϵȴÙ.

CDERR_DIALOGFAILURE
CDERR_FINDRESFAILURE
CDERR_NOHINSTANCE
CDERR_INITIALIZATION
CDERR_NOHOOK
CDERR_LOCKRESFAILURE
CDERR_NOTEMPLATE
CDERR_LOADRESFAILURE
CDERR_STRUCTSIZE
CDERR_LOADSTRFAILURE
FNERR_BUFFERTOOSMALL
CDERR_MEMALLOCFAILURE
FNERR_INVALIDFILENAME
CDERR_MEMLOCKFAILURE
FNERR_SUBCLASSFAILURE

¼³¸í

ÆÄÀÏ ÀÔÃâ·ÂÀ» Çϱâ Àü¿¡ ´ë»ó ÆÄÀÏÀ» ÀԷ¹ޱâ À§ÇØ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ ÇÔ¼ö´Â lpofn ±¸Á¶Ã¼ÀÇ ¼³Á¤´ë·Î ÆÄÀÏ ¿­±â °øÅë ´ëÈ­»óÀÚ¸¦ ¿­¾î ÁÖ¸ç »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ÆÄÀÏÀÇ ¿ÏÀü °æ·Î¸¦ ±¸Á¶Ã¼·Î ´Ù½Ã ¸®ÅÏÇØ ÁØ´Ù. ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ¸ÕÀú ±¸Á¶Ã¼¿¡ ÃʱⰪÀ» ÀûÀýÇÏ°Ô ¼³Á¤ÇØ ÁÖ¾î¾ß ÇÏ¸ç ¸®ÅÏ°ª°ú ±¸Á¶Ã¼ÀÇ °á°ú°ªÀ¸·Î »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ÆÄÀϸíÀ» ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ÀԷ¹ÞÀº ÆÄÀϸíÀº ÀÌÈÄ CreateFile µîÀÇ ÇÔ¼ö·Î ¿­¾î¼­ ÀÔÃâ·Â¿¡ »ç¿ëÇÑ´Ù.

¿¹Á¦ 1

´ÙÀ½ ¿¹Á¦´Â ÇϳªÀÇ ÆÄÀϸíÀ» ÀԷ¹޴ °¡Àå ÀϹÝÀûÀÎ ÆÄÀÏ ¿­±â ¿¹Á¦ÀÌ´Ù.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	OPENFILENAME OFN;
	char lpstrFile[MAX_PATH]="";
	char str[256];
	char Mes[]="¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´©¸£½Ê½Ã¿À";

	switch(iMessage) {
	case WM_LBUTTONDOWN:
		memset(&OFN, 0, sizeof(OPENFILENAME));
		OFN.lStructSize = sizeof(OPENFILENAME);
		OFN.hwndOwner=hWnd;
		OFN.lpstrFilter="Every File(*.*)\0*.*\0Text File\0*.txt;*.doc\0";
		OFN.lpstrFile=lpstrFile;
		OFN.nMaxFile=256;
		if (GetOpenFileName(&OFN)!=0) {
			wsprintf(str,"%s ÆÄÀÏÀ» ¼±ÅÃÇß½À´Ï´Ù.",OFN.lpstrFile);
			MessageBox(hWnd,str,"ÆÄÀÏ ¿­±â ¼º°ø",MB_OK);
		}
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

OPENFILENAME ±¸Á¶Ã¼¸¦ ¼±¾ðÇÏ°í ÀÌ ±¸Á¶Ã¼ÀÇ ¸ðµç ¸â¹ö¸¦ 0À¸·Î ÃʱâÈ­ÇØ ÁØ ÈÄ ÇʼöÀûÀ¸·Î ÇÊ¿äÇÑ ¸â¹ö¿¡¸¸ °ªÀ» ´ëÀÔÇØ ÁÖ¾ú´Ù. lpstrFile ¸â¹ö¿¡´Â »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ÆÄÀϸíÀ» ¸®ÅϹޱâ À§ÇÑ ÃæºÐÇÑ ±æÀÌÀÇ ¹öÆÛ Æ÷ÀÎÅ͸¦ ¹Ýµå½Ã ´ëÀÔÇØ ÁÖ¾î¾ß ÇÔÀ» À¯ÀÇÇϵµ·Ï ÇÏÀÚ. »ç¿ëÀÚ°¡ ÆÄÀÏÀ» ¼±ÅÃÇßÀ¸¸é lpstrFile ¸â¹ö¸¦ ÀÐ¾î ¾î¶² ÆÄÀÏÀ» ¼±ÅÃÇß´ÂÁö ¸Þ½ÃÁö ¹Ú½º·Î º¸¿©ÁØ´Ù. ÀÌ ¸â¹ö·Î ¸®ÅϵǴ °æ·Î´Â CreateFile ÇÔ¼ö¿¡ °ð¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÀÌ ´ëÈ­»óÀÚ·Î º¹¼ö°³ÀÇ ÆÄÀϸíÀ» ÀԷ¹ްíÀÚ ÇÒ ¶§´Â OFN_ALLOWMULTISELECT Ç÷¡±×¸¦ ÁÖµÇ ÀÌ ¶§ OFN_EXPLORER Ç÷¡±×¸¦ °°ÀÌ ÁÖ¾î¾ß Ž»ö±â Çü½ÄÀÇ ´ëÈ­»óÀÚ°¡ ¿­¸°´Ù. ¼±ÅÃµÈ ÆÄÀϵéÀº lpstrFile ¹öÆÛ¿¡ ³Î ¹®ÀÚ·Î ±¸ºÐµÇ¾î Â÷·Ê´ë·Î ±â·ÏµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ ¹öÆÛ¸¦ °è¼Ó ÀÐÀ¸¸é µÈ´Ù. lpstrFile ¹öÆÛÀÇ ¼±µÎ¿¡´Â ÆÄÀϵéÀÇ Æú´õ°¡ ÀÖÀ¸¸ç µÎ¹ø° ÀÌÈÄ¿¡ ¼±ÅÃÇÑ ÆÄÀÏÀÇ À̸§¸¸ ³ª¿­µÈ´Ù. º¹¼ö ¼±ÅÃµÈ ÆÄÀϵéÀ» ¸ðµÎ ÀúÀåÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ±æÀÌÀÇ ¹öÆÛ¸¦ Á¦°øÇØ¾ß Çϴµ¥ NT 4.0°ú 2000ÀÌ»óÀÇ ANSI ¹öÀü¿¡¼­´Â 32KÀÇ ¹öÆÛ ÇÑ°è°¡ ÀÖ´Ù.

¿¹Á¦ 2

´ÙÀ½ ¿¹Á¦´Â ÆÄÀÏ ¿­±â ´ëÈ­»óÀÚ·Î º¹¼ö°³ÀÇ ÆÄÀÏÀ» ¼±ÅÃ¹Þ¾Æ ¼±ÅÃÇÑ ÆÄÀϸíÀ» º¸¿©ÁØ´Ù.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	char Mes[]="¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´©¸£½Ê½Ã¿À";
	OPENFILENAME OFN;
	char str[32000]="";
	char lpstrFile[10000]="";
	char *p;
	char Name[MAX_PATH];
	char szTmp[MAX_PATH];
	int i=1;

	switch(iMessage) {
	case WM_LBUTTONDOWN:
		memset(&OFN, 0, sizeof(OPENFILENAME));
		OFN.lStructSize = sizeof(OPENFILENAME);
		OFN.hwndOwner=hWnd;
		OFN.lpstrFilter="¸ðµç ÆÄÀÏ(*.*)\0*.*\0";
		OFN.lpstrFile=lpstrFile;
		OFN.nMaxFile=10000;
		OFN.Flags=OFN_EXPLORER | OFN_ALLOWMULTISELECT;
		if (GetOpenFileName(&OFN)!=0) {
			p=lpstrFile;
			strcpy(Name, p);
			if (*(p+strlen(Name)+1)==0) {
				wsprintf(str,"%s ÆÄÀÏ Çϳª¸¸ ¼±ÅÃÇß½À´Ï´Ù",Name);
			} else {
				wsprintf(str,"%s µð·ºÅ丮¿¡ ÀÖ´Â ´ÙÀ½ ÆÄÀϵéÀÌ ¼±ÅõǾú½À´Ï´Ù"
					"\r\n\r\n", Name);

				for (;;) {
					p=p+strlen(Name)+1;
					if (*p==0)
						break;
					strcpy(Name,p);
					wsprintf(szTmp,"%d¹ø° ÆÄÀÏ = %s \r\n",i++,Name);
					strcat(str,szTmp);
				}
			}
			MessageBox(hWnd,str,"¼±ÅÃÇÑ ÆÄÀÏ",MB_OK);
		} else {
			if (CommDlgExtendedError()==FNERR_BUFFERTOOSMALL) {
				MessageBox(hWnd,"¹öÆÛ Å©±â°¡ ³Ê¹« ÀÛ½À´Ï´Ù","¿¡·¯",MB_OK);
			}
		}
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,strlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

lpstrFile ¹öÆÛ¿¡´Â 10000¹ÙÀÌÆ® Á¤µµÀÇ ºñ±³Àû ÃæºÐÇÑ ±æÀ̸¦ ÁÖ¾úÀ¸³ª ¸¹Àº ¼öÀÇ ÆÄÀÏÀ» ¼±ÅÃÇßÀ» °æ¿ì´Â ¸Þ¸ð¸® ºÎÁ· ¿¡·¯°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ ¿¡·¯´Â ¹Ýµå½Ã ó¸®ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

Âü°íÇÔ¼ö

SHBrowseForFolder : ÆÄÀÏ À̸§ ´ë½Å Æú´õ °æ·Î¸¦ ÀԷ¹޴´Ù.
GetSaveFileName : ÀúÀåÀ» À§ÇÑ ÆÄÀϸíÀ» ÀԷ¹޴´Ù.

Ç÷§Æû

95ÀÌ»ó

ÂüÁ¶

 


written by http://www.winapi.co.kr