반응형
Dialog를 사용하였을때, 우리는 위의 표시줄을 없앤채로 사용할 수 있다.
그 경우에는 다이얼로그의 위치를 옮기게 만드는데 상당히 문제가 있다.
따라서, 다음과 같은 작업으로 테두리 드래그를 통해 다이얼로그를 옮길 수 있다.

클레스 마법사에서 메세지중, ON_NCHITTEST에 해당하는 것을 추가하고 다음과 같은 내용을 해주면 된다.

아래코드는
Board의 윗부분을 클릭했을 때,
System 함수를 클릭한것과 같은 Return값을 보여주게 된다.

LRESULT SizeWindowDlg::OnNcHitTest(CPoint point)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    UINT nHitTest = CDialog::OnNcHitTest( point );

    return ( nHitTest == HTTOP  ) ? HTCAPTION : nHitTest;
}

MSDN에서 HTTOP과 HTCAPTION을 검색하면, 다른 Dialog위치들에 대한 수정도 가능하다.
반응형
반응형
Dialog 에 OnInitDialog()함수내에 다음과 같은 구문을 추가하면 된다.

BOOL SizeWindowDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    typedef BOOL(WINAPI *SLWA)(HWND,COLORREF,BYTE,DWORD);
    SLWA pSetLayeredWindowAttributes = NULL;
    HINSTANCE hmodUSER32 = LoadLibrary(_T("USER32.DLL"));
   
    pSetLayeredWindowAttributes =    (SLWA)GetProcAddress(hmodUSER32,"SetLayeredWindowAttributes");

    HWND hwnd = this->m_hWnd;
    SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd,GWL_EXSTYLE) | WS_EX_LAYERED);
    BYTE byAlpha = 70; //투명도 설정
    COLORREF cr = GetSysColor(COLOR_BTNFACE);
    SetLayeredWindowAttributes( cr, byAlpha, LWA_COLORKEY );

return TRUE;
}


마지막의 LWA_COLORKEY 옵션의 변경을 통하여 여러 형태의 Dialog가 가능하다.

나머지는 MSDN을 참고하여 수정가능함
반응형
반응형
1. Fseek
Fopen으로 얻은 파일포인터 내에서 위치를 이동한다.
int fseek ( FILE * stream, long int offset, int origin );

stream - 작업을 수행할 스트림의 FILE 객체를 가리키는 포인터
offset - orgin 으로 부터 얼마나 떨어진 곳에 설정할 지에 대한 값
origin -

<stdio.h> 에 정의된 다음과 같은 상수들을 이용한다.
SEEK_SET 파일의 시작
SEEK_CUR 현재 파일 포인터의 위치
SEEK_END 파일의 끝

예제)
#include "stdio.h"
FILE *fp = fopen("test.txt","r");
fseek(fp, 0, SEEK_SET);


2. Feof
파일포인터 내에서 파일의 끝까지, 탐색하는 함수

Return
인자로 전달된 스트림의 파일 끝 지시자가 설정되어 있다면 0 이 아닌 값을 리턴한다.
그렇지 않을 경우 0 이 리턴된다.

int feof ( FILE * stream );

while(!feof(fp)){
    fscanf(fp,"%c",&temp);
}

반응형
반응형
아래 예제는 대문자에서 소문자로 변화해주는 예제 입니다.

ASCII Code표의 대문사 소문자 값의 차이를 이용해 구현하는 것으로

대문자는 ASCII 코드 65에서 90번 사이의 값을 갖습니다.

아스키코드표
http://ko.wikipedia.org/wiki/Ascii

char *small_letter(char *input){
  char *temp = (char*)malloc(sizeof(char)*256);
  for(unsigned int i = 0 ;; i++){
      if((input[i]>=65) && (input[i] <= 90)){
          temp[i] = (input[i] + 32);
      }
      else {
          temp[i] = input[i];
      }
      if(input[i] == '\0') break;
      if(input[i] == '\n') break;
  }
  return temp;
}

반응형
반응형
scandir을 이용하여, 파일리스트와 폴더리스트를 불러오는 방법이다

필수적으로,

참고 Link
fstat : http://codewiki.wikidot.com/c:system-calls:fstat
s_islnk: http://www.freepascal.org/docs-html/rtl/oldlinux/s_islnk.html

요구 include Files
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>

long_t getFileList(const str_t dir, str_t*& list)
{
     /* Scan directory */
     struct dirent** pp_item;
     struct stat fstat;

// scandir 함수를 이요해서 파일과 디렉토리 내용을 가져온다
     long_t item_cnt = scandir(".", &pp_item, NULL, alphasort);

     /* Count files */
     long_t file_cnt = 0;
//파일 개수만큼 loop를 돌린다.
     for(long_t i = 0; i < item_cnt; i++) {

//현재 폴더와 이전폴더는 무시하고
         if(!strcmp(pp_item[i]->d_name, ".") || !strcmp(pp_item[i]->d_name, "..")) continue;

         lstat(pp_item[i]->d_name, &fstat);
//Regular file과 Simbolic Link file일 경우
         if(S_ISREG(fstat.st_mode) || S_ISLNK(fstat.st_mode)) file_cnt++;
     }

     /* Allocate memory */
     str_t* pp_list;
     pp_list = new str_t [file_cnt];

     /* Copy the filenames to list */
     long_t index = 0;
     for(long_t i = 0; i < item_cnt; i++) {
         if(!strcmp(pp_item[i]->d_name, ".") || !strcmp(pp_item[i]->d_name, "..")) {
             free(pp_item[i]);
             continue;
         }

         lstat(pp_item[i]->d_name, &fstat);
         if(S_ISREG(fstat.st_mode) || S_ISLNK(fstat.st_mode)) {
             pp_list[index] = new char_t [strlen(pp_item[i]->d_name) + 1];
             strcpy(pp_list[index], pp_item[i]->d_name);

             index++;
         }
         free(pp_item[i]);
     }
     free(pp_item);

     list = pp_list;

     return file_cnt;
}
반응형

+ Recent posts