유돌이

calendar

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 31

Notice

2009. 5. 26. 20:22 델파이

델파이6 기준으로 TexcelApplication,
TExcelWorkbook, TExcelWorksheet, TexcelChart 올려놓고 실행하면 됩니다.

uses절에 Activex 추가하시고 다음과 같이 코딩하면 됩니다.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, excel2000, OleServer, Activex;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ExcelApplication1: TexcelApplication;
    ExcelWorkbook1: TexcelWorkbook;
    ExcelWorksheet1: TexcelWorksheet;
    ExcelChart1: TexcelChart;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  LCID,i : Integer;
  Sheet, Selection : Variant;
  Format : OleVariant;
  //차트용
  ChObj: ChartObject;
  SheetType: OleVariant;
  Rnge, ChType: OleVariant;
  Ax: Axis;
begin
  excelApplication1.Connect; //엑셀을 가동한다.(InVisible 상태)
  ExcelWorkbook1.connectto(excelApplication1.workbooks.add(TOleEnum(xlWBATWorksheet), LCID));
  ExcelWorksheet1.connectto(excelWorkbook1.worksheets.item['Sheet1'] as _worksheet );

  //워크시트 이름 변경
  excelWorksheet1.Name := '날 죽여라';
  excelApplication1.DisplayAlerts[LCID] := False;
  excelApplication1.Visible[LCID] := true;
  Sheet := ExcelApplication1.WorkBooks[ExcelApplication1.Workbooks.Count].WorkSheets[excelWorkbook1.Worksheets.Count];
  Sheet.Cells[1,1] := '엑셀서식';
  excelApplication1.Range['A1','A1'].borders.lineStyle := 1;
  excelApplication1.Range['A1','A1'].borders.Color := clNavy;
  excelApplication1.Range['A1','A1'].Interior.Color := clYellow;


  //폰트변경
  excelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].font.bold := true;
  excelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].font.Size := 20;
  excelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].font.Name := '±A¼­';

  //우측정렬(가로정렬)
  excelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].HorizontalAlignment := xlHAlignRight;


  //가운데정렬(세로정렬)
  excelApplication1.Range['B1','B1'].VerticalAlignment := xlHAlignCenter;

  //범위로 찍을 경우
  excelApplication1.Range['B1','C2'].Value := '123456789';

  //숫자형 포맷
  Format := '_-* #,##0.0_-;-* #,##0.0_-;_-* "-"???_-;_-@_-';

  '@'; //  테스트형식

  #,##0.0 // 숫자형식
  excelApplication1.Range['B1','B1'].NumberFormatLocal := Format;

  Sheet.Range['B2', 'C2'].Interior.Color := RGB(223, 123, 123);
  excelApplication1.Range['B4', 'C4'].Interior.Color := clSilver;

  //날짜 찍기
  Sheet.Cells[5,1] := '2002/5/6';
  Sheet.Cells[5,2] := '2002/5/6';

  //숫자형
  Sheet.Cells[5,3] := '12345';
  Sheet.Cells[5,4] := '12345';

  //날짜포맷
  Format := 'yyyy-mm-dd';
  excelWorksheet1.Range[Sheet.Cells[5,1], Sheet.Cells[5,1]].NumberFormat := Format;

  Format := 'mmmm d, yyyy';
  excelWorksheet1.Range[Sheet.Cells[5,2], Sheet.Cells[5,2]].NumberFormat := Format;

  // 스트링형으로 변경
  Format := '@';
  excelWorksheet1.Range[Sheet.Cells[5,3], Sheet.Cells[5,3]].NumberFormat := Format;

  excelWorksheet1.Range['B11','B11'].VerticalAlignment := xlHAlignCenter;
  excelWorksheet1.Range['B11','B11'].HorizontalAlignment := xlHAlignRight;
  excelWorksheet1.Range['B11','B11'].Value := '셀병합후 가운데(세로) 정렬';
  excelWorksheet1.Range['B11','B13'].MergeCells := true;
  excelWorksheet1.Range['B11','B13'].borders.LineStyle := 2;

  excelWorksheet1.Range['B15','B15'].borders.lineStyle := 0;
  excelWorksheet1.Range['B15','B15'].HorizontalAlignment := xlHAlignRight;
  excelWorksheet1.Range['B15','B15'].Value := '셀병합후 우측(가로) 정렬';
  excelWorksheet1.Range['B15','D15'].MergeCells := true;
  excelWorksheet1.Range['B15','D15'].borders.LineStyle := 1;

  excelWorksheet1.Range['F15','G20'].MergeCells := true;
  excelWorksheet1.Range['F15','F15'].Value := '다중셀병합';
  excelWorksheet1.Range['F15','G20'].MergeCells := true;
  excelWorksheet1.Range['F15','F15'].HorizontalAlignment := xlHAlignCenter;
  excelWorksheet1.Range['F15','F15'].VerticalAlignment   := xlHAlignCenter;
  excelWorksheet1.Range['F15','G20'].borders.Weight := 4;

  //라인 스타일
  for i := 0 to 13 do
  begin
    excelWorksheet1.Range['B'+inttostr((2*i)+16),'B'+inttostr((2*i)+16)].borders.lineStyle := i;
    excelWorksheet1.Range['B'+inttostr((2*i)+16),'B'+inttostr((2*i)+16)].Value := 'borders.lineStyle := '+inttostr(i);
  end;

  //border Weight
  for i := 1 to 4 do
  begin
    excelWorksheet1.Range['B'+inttostr((2*i)+42),'B'+inttostr((2*i)+42)].borders.lineStyle := 1;
    excelWorksheet1.Range['B'+inttostr((2*i)+42),'B'+inttostr((2*i)+42)].borders.Weight := 1;
    excelWorksheet1.Range['B'+inttostr((2*i)+42),'B'+inttostr((2*i)+42)].Value := 'borders.Weight := '+inttostr(i);
  end;

  //라인 위치
  excelWorksheet1.Range['D18','D18'].borders.Item[1].LineStyle := 1;
  excelWorksheet1.Range['D18','D18'].Value := 'borders.Item[1].LineStyle := 1';
  excelWorksheet1.Range['D20','D20'].borders.Item[2].LineStyle := 1;
  excelWorksheet1.Range['D20','D20'].Value := 'borders.Item[2].LineStyle := 1';
  excelWorksheet1.Range['D22','D22'].borders.Item[3].LineStyle := 1;
  excelWorksheet1.Range['D22','D22'].Value := 'borders.Item[3].LineStyle := 1';
  excelWorksheet1.Range['D24','D24'].borders.Item[4].LineStyle := 1;
  excelWorksheet1.Range['D24','D24'].Value := 'borders.Item[4].LineStyle := 1';

  //패턴 변경
  for i := 1 to 18 do
  begin
    excelWorksheet1.Range['D'+inttostr(i+24),'D'+inttostr(i+24)].Interior.Pattern := i;
    excelWorksheet1.Range['E'+inttostr(i+24),'E'+inttostr(i+24)].Value := 'Interior.Pattern := '+inttostr(i);
  end;

{ 이미지를 삽입할 경우 실제파일을 기록해야 되기 때문에 주석처리
  실제 파일과 경로명 기록하고 주석푸시고 싱행해보세요
  //백그라운드 이미지
  //excelWorksheet1.SetBackgroundPicture('C:\My Documents\My Pictures\couplevssolo(6).jpg');


  //이미지 입력
  Selection := Sheet.Pictures.Insert('C:\My Documents\My Pictures\302492_2.jpg');


  //이미지 위치 조절
  Selection.ShapeRange.IncrementLeft(243);
  Selection.ShapeRange.IncrementTop(605);
}

  //수식 입력
  Format := '#,##0.00_ ;-#,##0.00;_-* "-"???_-;_-@_-';
  excelApplication1.Range['F3','H8'].NumberFormatLocal := Format;

  excelWorksheet1.Range['F3', 'H8'].Formula := '=RAND()*10';
  excelWorksheet1.Range['F9', 'F9'].Formula := '=SUM(F3:F8)';
  excelWorksheet1.Range['G9', 'G9'].Formula := '=SUM(G3:G8)';
  excelWorksheet1.Range['H9', 'H9'].Formula := '=SUM(H3:H8)';
  excelWorksheet1.Range['I9', 'I9'].Formula := '=SUM(F9:H9)';


  excelWorksheet1.Range['F2', 'F2'].Value := '1학년';
  excelWorksheet1.Range['G2', 'G2'].Value := '2학년';
  excelWorksheet1.Range['H2', 'H2'].Value := '3학년';

  excelWorksheet1.Range['E3', 'E3'].Value := '1년';
  excelWorksheet1.Range['E4', 'E4'].Value := '2년';
  excelWorksheet1.Range['E5', 'E5'].Value := '3년';
  excelWorksheet1.Range['E6', 'E6'].Value := '4년';
  excelWorksheet1.Range['E7', 'E7'].Value := '5년';
  excelWorksheet1.Range['E8', 'E8'].Value := '6년';
  excelWorksheet1.Range['E3', 'E8'].HorizontalAlignment := xlHAlignRight;

  //차트용 오브젝트 생성
  ChObj := (excelWorksheet1.ChartObjects(EmptyParam, lcid) as ChartObjects).Add(600, 10, 400, 250);
  excelChart1.ConnectTo(ChObj.Chart as _Chart);


  //데이터 범위(데이터뿐만 아니라 가로축 세로축에 찍힐 주석값까지 포함)
  Rnge := excelWorksheet1.Range['E2','H8']; // the data range, including titles


  //차트타입
  ChType := TOleEnum(xl3DColumn);
  excelChart1.ChartWizard(Rnge, ChType, EmptyParam, xlColumns, 1, 1, True,
                          excelWorksheet1.Range['A1', 'A1'].Text, // The chart title
                          '번호', '점수', EmptyParam, lcid);
  Ax := excelChart1.Axes(xlValue, xlPrimary, lcid) as Axis;
  Ax.AxisTitle.Font.FontStyle := '굴림체';

  //자동 컬럼 폭 맞춤
excelWorksheet1.Range[ XL.Cells[1, 1], XL.Cells[ir, 9]].Select;

excelWorksheet1.Columns.AutoFit;
end;

end

 

 

 

출처 :: Posted by 내멋대로 코딩 나비 (http://skql.tistory.com/tag/Delphi%20Excel)

posted by 유돌이
2009. 5. 19. 21:12 PHP/Java Script/html

[strtotime 함수]

 

1. 형식
- strtotime("+1 day"); 하루후 타임스탬프
- strtotime("-1 day"); 하루전
- strtotime("+1 week"); 일주일후
- strtotime("+1 month"); 한달후
- strtotime("+1 year"); 일년후

 

2. 예제

- date("Y-m-d",strtotime ("+1 day")); => 오늘날짜 부터 하루 뒤의 날짜


posted by 유돌이
2009. 5. 19. 21:11 PHP/Java Script/html

1. explode
: 문자열을 주어진 문자열을 기준으로 분리한다.

형식 => array explode ( string separator, string string [, int limit])

예제 => $str ="1/2/3/4/5/6/6/6/7/7/7/7/7/8/8/8/8/9/9/9/9/96897/465/345/";
        $str = explode ("/", $str);

        for($num = 0; $num < count($str); $num++) {
           echo $str[$num] ."\n";
        }

2. trim
: 문자열의 처음과 끝에 있는 공백문자를 제거하고 이 문자열을 반환한다.
(공백문자 :  "\n", "\r", "\t", "\v", "\0"..)

형식 => string trim ( string str)

예제 => $str ="1/2/3/4/5/6/6/6/7/7/7/7/7/8/8/8/8/9/9/9/9/96897/465/345/";
        $str = explode ("/", $str);

        for($num = 0; $num < count($str); $num++) {
           $str_2 =$str[$num]."\n";
           $str_2 = trim($str_2);
           echo $str_2;
        }

3. substr
: 문자열을 문자단위로 잘라서 배열에 담는다.

형식 => string substr ( string string, int start [, int length])

예제 =>  $string  =  "abcde";
        
         echo substr($string, 1);

posted by 유돌이
2009. 5. 19. 21:03 비법전수

시작-->실행-->dxdiag--> 확인(엔터)

 

실행하시면 다이렉트X 진단 도구 창으 뜨면서

 

컴퓨터 성능을 확인 하실 수 있습니다.

 

단, 다이렉트X가 설치되어 있어야 겟죠? ㅎㅎ

 

다이렉트X는 원도우 설치시 설치되시깐 사용하시는 O/S가

 

윈도우신 분들은 위와같이 확인  하실 수 있습니다.

 

그럼..

'비법전수' 카테고리의 다른 글

[네이트 이벤트] 실천해요! 초록절전생활.  (0) 2009.12.08
컴퓨터 성능 확인.  (0) 2009.05.26
형태소 분석기..  (0) 2009.01.05
MS툴 무료 제공 및 설치  (0) 2008.12.20
sticky tag를 제거 방법.  (0) 2008.12.20
posted by 유돌이
2009. 5. 18. 13:17 C/C++/MFC
childNodes
  현재 노드의 자식 노드를 배열로 돌려준다.

firstChild
  현재 노드의 첫 번째 자식 노드를 참조한다.

lastChild
  현재 노드의 마지막 자식 노드를 참조한다.

nextSibling
  현재 노드의 바로 다음의 노드를 반환한다.

nodeName
  노드의 qualified name을 반환한다.

nodeType
  노드의 XML DOM 노드 형식을 지정한다.

nodeValue
  해당 노드의 값을 참조한다.

ownerDocument
  해당 노드를 포함하는 루트 엘레먼트를 반환한다.

parentNode
  해당 노드의 부모 노드를 반환한다.

previousSibling
  현재 노드 바로 앞에 오는 노드를 반환 한다.

xml
  현재 노드와 자식노드의 XML을 문자열로 반환한다.(IE 전용)

text
  현재 노드와 자식노드 들의 텍스트를 연결한 콘텐트를 반환 한다.(IE 전용)

2.DOM 메소드

getElementById(idName)
  도큐먼드에서 idName의 id로 정의된 요소를 찾아 반환한다.

getElementsByTagName(tagName)
  tagName을 가진 태그들의 노드 객체를 찾아 배열로 반환한다.
 
document.createElement(tagName)
  tagName 으로된 엘리먼트를 생성한다.

document.createTextNode(text)
  정적 텍스트를 담고 있는 노드를 생성한다.

<element>.appendChild(childNode)
  childNode를 에레먼트의 자식 노드로 추가 한다.

<element>.getAttribute(name)
  에레먼트에서 name에 해당하는 어트리뷰트 값을 반환한다.

<element>.setAttribute(name, value)
  엘레먼트에 name 속성에 value 값을 할당한다.

<element>.insertBefore(newNode, tartgetNode)
  엘레먼트의 자식노드 중 tartgetNode 전에 newNode를  삽입한다.

<element>.removeAttribute(name)
  엘리먼트에서 name 어트리뷰트을 제거한다.

<element>.removeChild(childNode)
  엘레먼트에서 자식 childNode 노드를 제거한다.

<element>.replaceChild(newNode, oldNode)
  엘레먼트에서 oldNode 를 newNode 로 치환한다.

<element>.hasChildNodes()
  엘레먼트가 자식 노드를 포함하는 경우 true, 자식요소가 없는 경우 false를 반환한다.

자세한 내용 : Traversing an HTML table with JavaScript and DOM Interfaces 
posted by 유돌이
2009. 5. 18. 13:15 PHP/Java Script/html
1. charset의 의미
charset = "coded character set"
charset은 "컴퓨터에서 문자를 표현하기 위해, 각 문자를 정수값에 대응시켜 놓은 체계"를 의미합니다.

예를 들어, euc-kr charset이라면, 영숫자와 한글 그리고 일부 특수문자와 한자들을 정수값에 대응해 놓은 것입니다.
euc-kr환경에서 한글을 입력하면, 컴퓨터는 euc-kr charset에서 각 문자별로 지정한 정수값을 쓰게 됩니다.

2. charset이 달라진다면..
각 charset별로, 표현하고자하는 문자와 대응하는 정수값이 달라질 수 있습니다.
예를들어 euc-kr은 태국문자를 위한 정수값을 정의하지 않았으므로, 태국문자는 표현하거나 입력할 수 없습니다.

그리고, euc-kr charset에 맞춰 한글로 어떤 내용을 작성했는데,
이것을 iso-8859-1 charset 환경에서 열어본다면, 한글 대신에 엉뚱한 특수문자쌍들을 보게 될 것입니다.

이런 문제 때문에, 문자 데이터를 주고 받을 때는 서로 간에 charset을 일치시킬 필요가 있습니다. 그렇지
않으면, 원래 생각했는 내용 대신 "깨진 문자들"을 보게 될테니까요.
( 가끔 charset은 일치되었는데, 사용하는 폰트에 대응하는 문자가 없어서 깨져보이는 경우도 있습니다. )

서블릿 코딩시에, content type의 일부로 charset을 명시하는 것은 웹 브라우저에게 사용하는 charset을
알려주어 오해하지 않게 하기 위해서입니다.

3. 한글을 표현할 수 있는 charset
한글을 표현할 수 있도록 설계된 charset은 euc-kr외에도, ksc5601, cp933, cp949 등등 꽤 많습니다.
그리고, 전세계 모든 문자를 표현할 목적으로 설계된 unicode역시 한글을 지원합니다.
그러나, 한글을 지원하는 charset을 사용하더라도, 문서를 만들 때 사용한 charset과 읽을 때 사용하는
charset이 다르다면, 제대로 그 내용을 볼 수 없을 것입니다. 이 경우에는 따로 conversion로직을 사용하여
원하는 charset에 맞춰 데이터를 가공해야 할 것입니다.
( euc-kr, ksc5601 같은 경우는 거의 차이가 없어 호환가능합니다. )

3. 영문 OS에서 한글 표현
charset에 맞추어 문자데이터를 처리하는 것은 OS나 DBMS, 미들웨어 등 플랫폼이므로, 플랫폼에서
제공해주지 않는 charset을 사용할 수는 없습니다.
다행히도, 최근의 플랫폼 SW들은 다양한 charset 지원을 포함하고 있습니다. 만약 어떤 OS가 euc-kr모드로
작동하고 있다면, 설령 영문OS라 하더라도, 한글 처리에 문제가 없다고 볼 수 있습니다.
문제가 있다면 euc-kr모드로 작동하고 있는 것이 아니겠죠.

저 같은 경우, 영문 OS를 설치하고, 그 위에서 한글을 사용해 본 적이 있습니다.

4. encoding
charset과 비슷한 의미로 사용하는 단어로 encoding이 있습니다.
charset이 문자에 대해 정수값을 지정한 것이라면,
encoding은 "문자를 표현하는 정수값을 어떤 bit배열로 표현할 것"인지를 의미합니다.

대부분의 경우, charset과 encoding을 구별할 필요가 없습니다. 왜냐하면 정수값을 bit배열로 표현하는 방법은
하나만 있을테니까요. 그러나 unicode 경우에는 UTF-8, UTF-16 같이 몇 가지 다른 encoding을 사용합니다.
charset이 같다면, 그 charset을 지원하는 어떤 encoding을 사용하든지, 각 문자에 대응하는 논리적인 정수값은 동일합니다.
그러나 실제로 기록되는 bit배열은 encoding에 따라 달라질 수 있습니다. 이 경우, 제대로 데이터를 주고 받으려면, charset뿐 아니라 encoding까지도 맞춰야 합니다.


posted by 유돌이
2009. 5. 18. 13:14 PHP/Java Script/html
*PHP 에서 자주 쓰이는 그리고 유용한 문자열 처리 함수*

- nl2br() : 문자열에 있는 개행문자 앞에 <br/>태그를 삽입한다.
- echo() : 문자열을 출력한다.
- print() : 문자열을 출력한다.
- sscanf() : 지정한 형식에 따라 문자열을 파싱하여 변수의 값을 설정한다.
- explode() : 문자열을 구분자로 분할한다.
- strcmp() : 두 개의 문자열을 비교한다.
- strcasecmp() : 두 개의 문자열을 비교하되 대소문자를 구분하지 않는다.
- strncmp() : 두 개의 문자열을 지정한 길이까지만 비교한다.
- strlen() : 문자열의 길이를 반환한다.
- strtolower() : 문자열을 소문자로 변경한다.
- strtoupper() : 문자열을 대문자로 변경한다.
- ucfirst() : 문자열의 첫 글자를 대문자로 변경한다.
- ucwords() : 인자로 전달받은 문자열에 있는 모든 단어의 첫 글자를 대문자로 변경한다.
- trim() : 문자열의 앞뒤에 있는 공백문자를 제거한다.
- ltrim() : 문자열의 엪에 있는 공백문자를 제거한다.
- ord() : 문자의 ASCll코드 값을 반환한다.
- chr() : ASCll코드 값에 해당하는 문자를 반환한다.
- strip_tags() : 문자열에서 HTML 태그나 PHP태그를 모두 제거한다.
- crypt() : 인자로 전달받은 문자열을 암호화 한다.
- htmlspecialchars() : 특수 문자를 HTML엔티티로 변환한다.
- htmlentities() : 변환 가능한 모든 특수 문자를 HTML 엔티티로 변환한다. 
posted by 유돌이
2009. 5. 18. 13:14 PHP/Java Script/html

예 1. strip_tags() 예제

<?php
$text
=
'
<p>테스트 문단.</p>
<!-- 주석 -->
다른 텍스트'
;

echo
strip_tags($text
);

echo
"\n\n--------\n"
;

// <p>를 허용.
echo strip_tags($text, '<p>'
);
?>

위 예제의 출력은:

테스트 문단.

다른 텍스트

--------

<p>테스트 문단.</p>

다른 텍스트
posted by 유돌이
2009. 3. 21. 11:34 C/C++/MFC

멤버변수를 추가 합니다.

CBitmapButton m_btnButton;

 

OnInitDialog() 함수에 아래와 같이 초기화 합니다.

 

m_btnButton.Create(NULL, WS_CHILD|WS_VISIBLE|BS_OWNERDRAW, CRect(230,50,0,0), this, 1000);

CRect(230,50,0,0) 는 위치와 크기

1000은 적용시킬 버튼의 리소스 아이디 입니다. 

만약 1로 하면 확인버튼의 기능을 동일하게 사용합니다.

 

 

m_btnButton.LoadBitmaps(IDB_BTNFRAME,IDB_BTNFRAME_FOC,IDB_BTNFRAME_SEL,IDB_BTNFRAME);

사용할 리로스 , 버튼이 선택되었을때의 리소스,

버튼이 포커스 돼었을때의 리소스, 해제되었을때의 리소스

 

 

m_btnButton.SizeToContent();

리소스의 크기에 맞게 버튼을 설정해주는 함수입니다.

 

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

 

* CBitmapButton 만드는 법_1

CBitmapButton으로 만든 버튼은 push button 형식이다.
1) 먼저 Form에 버튼을 만들고 Style에서 Owner Draw를 꼭 체크
2) 버튼의 캡션을 간단하게 지정(중요)

예를 들어 캡션이 "ONE"이라면..

3) 이제 리소스에 버튼 그림들을 추가합니다.

이때 추가 하는 리소스 이름은
2번에서 지정한 캡션의 이름뒤에 "D" "F" "U" "X" 를 붙입니다
이를테면 "ONED" "ONEF" "ONEU" "ONEX" 같은 식으로 말입니다.
"U"=UP/ "D"=Down/ "F"=포커스/ "X"=disable 의 뜻

4) CBitmapButton 객체를 멤버변수로 만듭니다.

CBitmapButton m_ButtonOne;

5) OnInitialUpdate() 에 다음과 같이 씁니다

m_ButtonOne.AutoLoad(IDC_BUTTON_ONE,this);


* CBitmapButton 만드는 법_2

방법 1과 크게 다르지 않고, 맵 연결 방법에서 차이가 있다.
1) 버튼의 속성중에 property -> style 에서 Owner draw 꼭 check !!
2) 비트맵으로 씌울 그림들을 프로젝트의 Bit 멥 부분에 Insert 시킴

(정적인 느낌을 피하기 위해 그림은 두개를 준비)

3) 해당 다이알로그 박스의 버튼에 해당하는 변수를 추가시켜 줌(물론 해드에 변수를 정의)
.h 파일 부분에서 public 부분에 만들어 주시고

CBitmapButton m_OK;
CBitmapButton m_Cancel;

.cpp 부분에

void CADD_AND_DEL_FRIEND::DoDataExchange(CDataExchange* pDX)
{

CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CADD_AND_DEL_FRIEND)
...
DDX_Control(pDX, IDOK, m_OK); // 변수를 해당 아이디와 연결 시켜준다.
DDX_Control(pDX, IDCANCEL, m_Cancel);
//}}AFX_DATA_MAP

}

4) 다이알로그가 생성되는 초기화 부분에서 버튼과 이미지를 연결시켜준다.

BOOL CADD_AND_DEL_FRIEND::OnInitDialog()
{

CDialog::OnInitDialog();
// 버튼이 눌러지기전 이미지와 눌렸을때 이미지를 설정해 준다.
m_OK.LoadBitmaps( IDB_OKU, IDB_OKD );
m_Cancel.LoadBitmaps( IDB_CancelU, IDB_CancelD );

// 버튼을 이미지 크기에 맞춰서 씌워준다.
m_OK.SizeToContent();
m_Cancel.SizeToContent();
return true;

}


posted by 유돌이
2009. 3. 21. 11:34 C/C++/MFC

다이얼로그 해더 부분에 추가

 

 CBitmap m_bmpMainBG; 

 int m_nMainWidth;
 int m_nMainHeight;

 

 

OnInitDialog() 부분에 추가

 

BITMAP bmpInfo; // 비트맵 정보

m_bmpMainBG.LoadBitmap(IDB_BKIMG2); // Main 배경 이미지 Load
m_bmpMainBG.GetBitmap(&bmpInfo); // Main 배경 비트맵 정보 읽기

m_nMainWidth = 280;//bmpInfo.bmWidth; // Main 윈도우 폭

m_nMainHeight = 140;//bmpInfo.bmHeight; // Main 윈도우 높이
SetWindowPos( NULL, 0, 0, m_nMainWidth, m_nMainHeight,SWP_NOZORDER | SWP_NOMOVE);

 

 

OnPaint() 부분에 추가

 

 CDC cdc;
 cdc.CreateCompatibleDC(&dc);
 cdc.SelectObject(m_bmpMainBG);
 dc.BitBlt(0, 0, m_nMainWidth, m_nMainHeight, &cdc, 0, 0, SRCCOPY);
 cdc.DeleteDC(); 


posted by 유돌이