달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

다이얼로그 기반 프로그램에서 DoModal 호출로 윈도우가 보이게 된다

ShowWindow(SW_HIDE)를 써도 안먹히기는 마찬가지....

OnInitDialog()에 아래와 같이 ShowWindowEx() 메소드를 넣어주면 된다

    ShowWindowEx(SW_HIDE);

그리고 윈도우 메시지 헨들러 중 WM_WINDOWPOSCHANGING을 추가하여 넣어주면 된다

아래는 원문...

-----------------------------------------------------------------------------------------------------

아래와 같이 WM_WINDOWPOSCHANGING 메시지 핸들러에서 들어오는 구조체의 플래그를 설정하면 DoModal()로 설정하더라도

윈도우가 보이는 것을 방지할 수 있다.

일단 m_bShowFlag 값에 따라서 변경하면 되고... m_bShowFlag 값은 ShowWindowEx() 함수를 다시 만들어서 그안에서 설정하도록 하면 됩니다. ShowWindow() 함수가 가상함수가 아니라서 어쩔 수 없이 새로 정의한 함수를 사용해야 합니다.

void CHidDlgDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) 
{
CDialog::OnWindowPosChanging(lpwndpos);

// TODO: Add your message handler code here
if(m_bShowFlag)
lpwndpos->flags |= SWP_SHOWWINDOW;
else
lpwndpos->flags &= ~SWP_SHOWWINDOW;

}

BOOL CHidDlgDlg::ShowWindowEx(int nCmdShow)
{
m_bShowFlag = (nCmdShow == SW_SHOW);
return (GetSafeHwnd()) ? ShowWindow(nCmdShow) : TRUE;
}
출처: http://www.gosu.net/GosuWeb/Article-detail.aspx?ArticleCode=473
출처: 데브피아
그럼 이만...
:
Posted by Lunaness

제목은 거창합니다만....

알고보면 간단한거라는 -ㅂ-ㅋ

 

   1: void CFileSearch::GetFileList( CString strFolder)
   2: {
   3:  
   4:   // 파일 탐색 필터 정의 - Ini에서 확인 - 변경할 것
   5:     CString strMusicFilter = ".MP3.OGG.WMA.WAV";
   6:     CString strMovieFilter = ".AVI.WMV.MKV.MPEG.MPG";
   7:     CString strImageFilter = ".JPEG.JPG.BMP.PNG.GIF";
   8:     CString strDocumentFilter = ".TXT";
   9:  
  10:     CFileFind file;
  11:     BOOL b = file.FindFile(strFolder + "\\*.*");
  12:     CString strFolderItem, strFileExt, strTempString;
  13:  
  14:     CString strTempPath;
  15:     strTempPath = GetSpecialFolderPath(CSIDL_HISTORY);
  16:     strTempPath = strTempPath.Left(strTempPath.ReverseFind('\\')) + "\\Temp";
  17:  
  18:     while(b)
  19:     {
  20:         b = file.FindNextFile();
  21:  
  22:         if(file.IsDirectory() && !file.IsDots())
  23:         {
  24:  
  25:             strFolderItem = file.GetFilePath();
  26:  
  27:             // 사용하지 않는 시스템 폴더들은 탐색에서 제외한다
  28:              if (
  29:                  strFolderItem.Find(GetSpecialFolderPath(CSIDL_WINDOWS))                > -1            ||
  30:                  strFolderItem.Find(GetSpecialFolderPath(CSIDL_INTERNET_CACHE))        > -1        ||
  31:                  strFolderItem.Find(GetSpecialFolderPath(CSIDL_HISTORY))                > -1            ||
  32:                 strFolderItem.Find(GetSpecialFolderPath(CSIDL_COOKIES))                > -1             ||
  33:  
  34:                  strFolderItem.Find(GetSpecialFolderPath(CSIDL_COMMON_APPDATA))        > -1           ||
  35:                 strFolderItem.Find(GetSpecialFolderPath(CSIDL_APPDATA))                > -1   ||
  36:                  strFolderItem.Find(GetSpecialFolderPath(CSIDL_LOCAL_APPDATA))        > -1         ||
  37:  
  38:                  strFolderItem.Find(GetSpecialFolderPath(CSIDL_PROGRAM_FILES))        > -1        ||
  39:                 
  40:                 strFolderItem.Find(strTempPath)                                        > -1    )
  41:              {
  42:                 
  43:                 TRACE("제외 : %s\n", strFolderItem);
  44:                 continue;
  45:              }    
  46:  
  47:             //하위폴더를 검색하는 조건이면 재귀호출 발생
  48:             if (m_bSearchSubFolder)
  49:                 GetFileList(strFolderItem);
  50:         }
  51:  
  52:         strFolderItem = file.GetFilePath();
  53:         strFileExt = strFolderItem.Mid(strFolderItem.ReverseFind('.'));
  54:         strFileExt.MakeUpper();
  55:         
  56:         // 파일 탐색 필터 정의에따라 해당 StringList에 추가
  57:         if (strMusicFilter.Find( strFileExt , 0) > -1 && !file.IsDots())
  58:         {
  59:             m_strlistMusic.AddTail(strFolderItem);
  60:         }
  61:         else if (strMovieFilter.Find( strFileExt , 0) > -1 && !file.IsDots())
  62:         {
  63:             m_strlistMovie.AddTail(strFolderItem);
  64:         }
  65:         else if (strImageFilter.Find( strFileExt , 0) > -1 && !file.IsDots())
  66:         {
  67:             m_strlistImage.AddTail(strFolderItem);
  68:         }
  69:         else if (strDocumentFilter.Find( strFileExt , 0) > -1 && !file.IsDots())
  70:         {
  71:             m_strlistDocument.AddTail(strFolderItem);
  72:         }
  73:     }
  74: }

 

프로그램을 진행하다 보니 특정 파일들을 검색하는 일이 생겼는데..

CFileFind를 이용하면 무척이나 편하다 'ㅂ'b

:
Posted by Lunaness
유니코드에서 한 문자가 Little-Endian또는 Big-Endian으로 정의 되는 것을 볼 수 있다
이는 시스템상의 사용하는 문제로 가끔 변환해 줄 필요가 있는데....

네트워크 관련 API가 있지만, 해더 파일을 넣어줘야 한다는 이유 하나만으로 쓰기가 싫어졌다 -ㅂ-ㅋ

void Trans_Endian(WCHAR *uni)
{
    int nSize = WideCharToMultiByte(CP_UTF8, 0, uni, -1, NULL, 0, NULL, NULL);

    for (int n = 0; n<nSize; n++)
     {
        // UTF-16 little Endian -> Big Endian
        WCHAR high_bit = 0x0000, low_bit = 0x0000;
        high_bit = (*(uni+n) & 0xFF00) >> 8;
        low_bit = (*(uni+n) & 0x00FF)  << 8;

        WCHAR p = low_bit | high_bit;
            
        if (p == 0x00cd) break;
        *(uni+n) = _T(p);
            
     }

}

이것으로 간단하게 해결~!



:
Posted by Lunaness


MP3 ID3v2 Tag 읽기 및 편집을 위한 라이브러리 및 예제 이다
일단 시험중이니..  완성되면 다시 포스팅해야겠다...
:
Posted by Lunaness

리스트 컨트롤에서 Multi Selection후 삭제를 할라보니 몇개가 남는다...

뭥미;;

찾아보니 뒤에서부터 지워라, 인덱스를 만들어 지워라 등등 많았는데...

가장 깔끔하게 해결하는 방법을 Liverpool님께서 블로그에 올려두신 것을 보았으니..

오호 통제라..


POSITION pos = m_LstSelectList.GetFirstSelectedItemPosition();
if(pos == NULL)return;


//처음부터 선택된 값을 해제 한다.
while(pos){
     int index = m_LstSelectList.GetNextSelectedItem(pos);
     m_LstSelectList.DeleteItem(index);
     pos = m_LstSelectList.GetFirstSelectedItemPosition();
}

위치를 초기화 시켜주는 것으로 한방에 해결~!  멋진걸.

출처 :  http://choiks.tistory.com/89

:
Posted by Lunaness