블로그 이미지
평강왕자

카테고리

분류 전체보기 (35)
Programming Lv1 (32)
Programming LV2 (0)
취미 (3)
Total
Today
Yesterday

달력

« » 2024.5
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

공지사항

최근에 올라온 글

저번에 Xaml코드에서 Style을 입혀서 수정 하는 방법을 기제했다.

Blend를 사용하니 Xaml코드를 사용하여 하는 방법은 불편하다.. OTL

Blend 사용방법은 간단하다.

 

1. XamOutlookBar를 생성한다.

2. XamOutlookBar를 클릭한다.

3. 우클릭 드롭다운 메뉴중에 [템플릿 편집] -> [현재 편집] 을 클릭한다.

4. 전체 화면의 좌측 하단 개체 및 타임라인 탭에 편집 창이 활성화 된다.

5. Template -> [AdornerDecorator] -> [Border] -> [Grid] -> [Border] -> PART_Grid -> PART_SelectedGroupContent 항목의

   속성 탭에 Background 색을 바꿔주면 색이 변경 된다.

 

ps. 나머지 항목들도 한번씩 변경하면 어떤 항목인지 알 수 있다. (추후 업데이트)

Posted by 평강왕자
, |

MFC List Contorl과 비슷한 기능을 하는 컨트롤을 찾아봤다.

아직 WPF를 사용한지 얼마 안돼서 많은 기능을 모르니 그냥 말그대로 사용법만 올려야지;;

본 내용은 구글링검색을 통한 것이고 영어로 나와있는걸 그냥 한국말로 나름대로 간편하게 작성한 것이니 확실한 정보는;;

 

1. ListView를 추가한다.

2. 우측 데이터 탭을 클릭한다.

3. 데이터 탭의 예제 데이터를 클릭한다.

4. 이름을 지정하고 확인을 클릭한다.

5. 생성된 데이터의 Properties을 추가, 삭제, 변경하여 자신의 데이터에 맡게 바꿔준다.

6. ListView를 클릭한 후 마우스 우클릭을 클릭한다.

7. [데이터에 ItemSource 데이터 바인딩...] 항목을 클릭한다.

8. 데이터 필드의 위 3번에서 만들었던 데이터를 클릭한 후 확인을 클릭한다.

9. 우측 속성 탭을 클릭한다.

10. [공용속성]에 있는 View(GridView) 항목에 [새로만들기] 버튼을 클릭한다.

11. 추가된 항목에 Columns(컬렉션) 항목에 [...] 버튼을 클릭한다.

12. 팝업된 창에서 [다른 항목 추가] 버튼을 클릭한다.

13. 추가된 항목을 클릭한 후 우측에 Header항목에 표시하고자 하는 Column명을 입력한다.

 

여기까지 하였으면 ListView에 칼럼이 추가 되었을 것이다.

이제 데이터를 바인딩 하여야 하는데 이것은 UI작업보다 소스코드 수정이 더 편하다. (지극히 개인적인;;)

소스내용은 아래와 같다.

1. 변경 전

<GridViewColumn Header="Column명" /> 

2. 변경 후

<GridViewColumn Header="Column명" DisplayMemberBinding="{Binding 5번에서 만든 Properties명}"/>

 

간단하게 설명하면   5번에서 만든 예제데이터의 Properties 항목의 데이터를 Binding 한다고 생각하면 된다.

 

ps. 참고로 예제 데이터 Properties의 값은 Collection의 예제 값 편집 버튼을 클릭하여 안에 값들을 수정하면 된다.

Posted by 평강왕자
, |

C#에서 Infragistics OutlookBar를 사용하면 background색깔을 바꿀수가 없다.

이경우 스타일을 입혀줘서 변경해야 한다.

기본적으로 아래 소스가 적용 되어야 한다.

xmlns:converters="clr-namespace:Infragistics.Samples.Shared.Converters;assembly=Infragistics.Samples.Shared"
xmlns:UserControl="clr-namespace:Infragistics.Samples.Framework;assembly=Infragistics.Samples.Framework"
xmlns:igPrim="http://schemas.infragistics.com/xaml/primitives"
xmlns:res="clr-namespace:IGOutlookBar.Resources"

Style 소스는 아래와 같다.

전체를 분석 하진 못했다. 차후에 업데이트 해야지;; 주석으로 색깔변경과 각 헤더, 하단, 부분의 스타일 적용부분을 적어 놓았다.

<UserControl.Resources>
  <ResourceDictionary>
            <RadialGradientBrush x:Key="ContentAreaBg" Center="0.500,0.5" GradientOrigin="0.500,0.5" RadiusX="0.500" RadiusY="0.500">
                <RadialGradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Offset="0" Color="Red"/>
                        <GradientStop Offset="1" Color="Red"/>
                    </GradientStopCollection>
                </RadialGradientBrush.GradientStops>
            </RadialGradientBrush>
   <!-- 아이템 글자색-->
            <SolidColorBrush x:Key="NavigationGroupHeaderNormalTextFillKey" Color="#FFFFFF"/>
   <SolidColorBrush x:Key="NavigationGroupHeaderHottrackTextFillKey" Color="Black"/>
            <SolidColorBrush x:Key="NavigationGroupHeaderActiveTextFillKey" Color="Pink"/>
            <SolidColorBrush x:Key="NavigationGroupHeaderNormalCenterFillKey" Color="Pink"/>
            <SolidColorBrush x:Key="NavigationGroupHeaderHottrackCenterFillKey" Color="Pink"/>
            <SolidColorBrush x:Key="NavigationGroupHeaderPressedCenterFillKey" Color="Pink"/>
            <SolidColorBrush x:Key="NavigationGroupHeaderActiveHottrackCenterFillKey" Color="Pink"/>
   <!-- 선택 되었을때 배경색-->
            <SolidColorBrush x:Key="NavigationGroupHeaderActiveCenterFillKey" Color="Pink"/>
            <SolidColorBrush x:Key="NavigationGroupHeaderInnerStrokeFillKey" Color="Pink"/>
            <SolidColorBrush x:Key="NavigationGroupHeaderFocusFillKey" Color="Black"/>
            <Style x:Key="OBGroupStyle" TargetType="ig:OutlookBarGroup">
             <Setter Property="Background" Value="#FF454343"/>
    <Setter Property="Foreground" Value="#FF454343" />
                <Setter Property="Cursor" Value="Hand"/>
                <Setter Property="FontFamily" Value="/Infragistics.Web.SampleBrowser.SilverlightLOB;component/Fonts/SEGOEUI.TTF#Segoe UI"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ig:OutlookBarGroup">
                         <!-- 선택 되지 않았을때 배경-->
                            <Border
                                x:Name="RootBorder"
                                Margin="0,0,0,1"
        Background="#FF454343"
                                BorderBrush="#FF454343"
                                BorderThickness="{TemplateBinding BorderThickness}">
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                        <VisualState x:Name="Normal"/>
                                        <VisualState x:Name="MouseOverGroup">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00" Storyboard.TargetName="BackgroundBorder"  Storyboard.TargetProperty="Background">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{StaticResource ContentAreaBg}"/>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Selected">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="BackgroundBorder"
                                                    Storyboard.TargetProperty="Background">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{StaticResource NavigationGroupHeaderActiveCenterFillKey}"/>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Pressed">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00" Storyboard.TargetName="BackgroundBorder"  Storyboard.TargetProperty="Background">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{StaticResource ContentAreaBg}"/>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                    <VisualStateGroup x:Name="IconAndHeaderStates">
                                        <VisualState x:Name="IconAndHeader"/>
                                        <VisualState x:Name="LargeIconOnly">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="Header"
                                                    Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed"/>
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="SmallIconControl"
                                                    Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed"/>
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="LargeIconControl"
                                                    Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Visible"/>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="SmallIconOnly">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="Header"
                                                    Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed"/>
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="expandGlyph"
                                                    Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed"/>
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="dotRule"
                                                    Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed"/>
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="SmallIconControl"
                                                    Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Visible"/>
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="LargeIconControl"
                                                    Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed"/>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                    <VisualStateGroup x:Name="LargeIconSpaceStates">
                                        <VisualState x:Name="ReserveSpace"/>
                                        <VisualState x:Name="NoSpace">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames
                                                    BeginTime="00:00:00"
                                                    Duration="00:00:00.001"
                                                    Storyboard.TargetName="ImageColumn"
                                                    Storyboard.TargetProperty="Width">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="0"/>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <Grid>
                                    <Border x:Name="BackgroundBorder" Background="Transparent"/>
                                    <Grid Margin="{TemplateBinding Padding}">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition x:Name="ImageColumn" Width="Auto"/>
                                            <ColumnDefinition Width="*"/>
                                        </Grid.ColumnDefinitions>
                                        <ContentControl
                                            x:Name="SmallIconControl"
                                            Width="16"
                                            Height="16"
                                            Grid.Column="0"
                                            Margin="4,7,5,7"
                                            Content="{Binding}"
                                            ContentTemplate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SmallIconTemplateResolved}"
                                            HorizontalContentAlignment="Stretch"
                                            VerticalContentAlignment="Stretch"
                                            Visibility="Collapsed"/>
                                        <ContentControl
                                            x:Name="LargeIconControl"
                                            Width="24"
                                            Height="24"
                                            Grid.Column="0"
                                            Margin="4,4,5,2"
                                            Content="{Binding}"
                                            ContentTemplate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=LargeIconTemplateResolved}"
                                            HorizontalContentAlignment="Stretch"
                                            VerticalContentAlignment="Stretch"/>
                                        <ContentControl
                                            x:Name="Header"
                                            Grid.Column="1"
                                            Margin="4,0,2,1"
                                            VerticalAlignment="Center"
                                            Content="{TemplateBinding Header}"
                                            ContentTemplate="{TemplateBinding HeaderTemplate}"
                                            FontWeight="Bold"
                                            Foreground="{StaticResource NavigationGroupHeaderNormalTextFillKey}"/>
                                        <Rectangle
                                            x:Name="dotRule"
                                            Height="1"
                                            Grid.ColumnSpan="2"
                                            VerticalAlignment="Bottom"
                                            Stroke="#FF454343"
                                            StrokeDashArray="2"/>
                                        <Path
                                            x:Name="expandGlyph"
                                            Width="6"
                                            Height="6"
                                            Grid.Column="1"
                                            HorizontalAlignment="Right"
                                            Margin="0,5,5,0"
                                            VerticalAlignment="Top"
                                            Data="M 2,0 C2,0 2,2 2,2 2,2 0,2 0,2 0,2 0,4 0,4 0,4 2,4 2,4 2,4 2,6 2,6 2,6 4,6 4,6 4,6 4,4 4,4 4,4 6,4 6,4 6,4 6,2 6,2 6,2 4,2 4,2 4,2 4,0 4,0 4,0 2,0 2,0 z"
                                            Fill="#FF454343"/>
                                    </Grid>
                                </Grid>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
   <!-- 헤더 Style -->
            <Style x:Key="GroupHeaderStyle" TargetType="igPrim:SelectedGroupHeader">
             <Setter Property="Background" Value="#FF454343"/>
                <Setter Property="BorderBrush" Value="#FF454343"/>
    <!-- 글자색-->
    <Setter Property="Foreground" Value="#FFFFFF"/>
                <Setter Property="Padding" Value="0"/>
            </Style>
            <Style x:Key="HorizontalSplitterStyleKey" TargetType="Thumb">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Thumb">
                            <Grid VerticalAlignment="Stretch" Height="6" Background="White">
                                <Rectangle Height="4" Stroke="#FFFFFF" StrokeDashArray="2" VerticalAlignment="Center"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
   <!-- 하단스타일 -->
            <Style x:Key="overflowStyle" TargetType="igPrim:GroupOverflowArea">
                <Setter Property="Background" Value="#FF454343"/>
            </Style>
            <Style x:Key="OBStyle" TargetType="ig:XamOutlookBar">
                <Setter Property="Margin" Value="0"/>
                <Setter Property="FontFamily" Value="/Infragistics.Web.SampleBrowser.SilverlightLOB;component/Fonts/SEGOEUI.TTF#Segoe UI"/>
                <Setter Property="HorizontalSplitterStyle" Value="{StaticResource HorizontalSplitterStyleKey}"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ig:XamOutlookBar">
                            <Border x:Name="root" VerticalAlignment="Stretch">
                                <Grid VerticalAlignment="Stretch">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition/>
                                        <ColumnDefinition Width="Auto"/>
                                    </Grid.ColumnDefinitions>
                                    <Border
                                        Grid.Column="1"
                                        VerticalAlignment="Stretch"
                                        Background="#FFFFFF"
                                        BorderBrush="#FFFFFF"
                                        BorderThickness="{TemplateBinding BorderThickness}"
                                        Padding="{TemplateBinding Padding}">
                                        <Grid x:Name="MainGrid">
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="*" MinHeight="{TemplateBinding SelectedAreaMinHeight}"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto" MinHeight="0"/>
                                            </Grid.RowDefinitions>
                                            <StackPanel>
                                                <igPrim:SelectedGroupHeader
                                                    x:Name="SelectedGroupHeader"
                                                    Height="50"
             
                                                    FontWeight="Bold"
                                                    Style="{StaticResource GroupHeaderStyle}"/>
                                            </StackPanel>
           <!-- 중앙 Content  스타일 -->
                                            <igPrim:SelectedGroupContent x:Name="SelectedGroupContent" Background="#FF454343"  Grid.Row="1"/>
                                            <Thumb
                                                x:Name="Splitter"
                                                Grid.Row="2"
                                                Margin="0,1,0,1"
                                                Background="Transparent"
                                                Cursor="SizeNS"
                                                Style="{TemplateBinding HorizontalSplitterStyle}"/>
           <!-- 아이템 스타일 -->
                                            <ItemsControl  x:Name="NavigationArea" Grid.Row="3">
                                                <ItemsControl.ItemsPanel>
                                                    <ItemsPanelTemplate>
                                                        <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top" Orientation="Vertical"/>
                                                    </ItemsPanelTemplate>
                                                </ItemsControl.ItemsPanel>
                                            </ItemsControl>
           <!-- 하단 선택 옵션 메뉴-->
                                            <igPrim:GroupOverflowArea x:Name="OverflowArea" Grid.Row="4" Style="{StaticResource overflowStyle}"/>
                                            <Canvas>
                                                <ig:XamDialogWindow
                                                    x:Name="NavigationPaneOptionsWindow"
                                                    Header="{Binding RelativeSource={RelativeSource Self}, Path=StringsSettings.StringSettings.NavigationPaneOptionsDialogTitle}"
                                                    HorizontalContentAlignment="Stretch"
                                                    IsResizable="False"
                                                    MaximizeButtonVisibility="Collapsed"
                                                    MinimizeButtonVisibility="Collapsed"
                                                    StartupPosition="Center"
                                                    VerticalContentAlignment="Stretch"
                                                    WindowState="Hidden">
                                                    <igPrim:NavigationPaneOptionsControl/>
                                                </ig:XamDialogWindow>
                                            </Canvas>
                                        </Grid>
                                    </Border>
                                </Grid>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary> 
 </UserControl.Resources>

위 스타일을 아래와 같이 적용하면 된다.

<ig:XamOutlookBar Style="{StaticResource OBStyle}"   HorizontalAlignment="Right" Height="978" VerticalAlignment="Top" Width="384" Margin="0">

Posted by 평강왕자
, |

다른프로그램의 창을 활성화 시켜야 할 경우가 있어야 할지도 모른다.
중요한건 윈도우 핸들값을 찾아야 한다.

1) 윈도우 핸들 값을 찾는다.
    1-1.클래스명을 모를경우 NULL을 집어넣고 Title에 흔히 보이는 프로그램 명을 집어넣어주면 된다.
          HWND hwnd = FindWindow(클래스명, Title);

    1-2. CreateProcess로 자신이 실행한 경우 PROCESS_INFORMATION 으로 윈도우 핸들값을 찾아야 한다.
          인터넷으로 콜백함수를 사용하여 프로세스를 뒤진다음 가져오는 함수가 있었다.
HWND m_hwnd;

BOOL CALLBACK EnumChildProc(  HWND hwnd,  LPARAM lParam  )
{
 m_hwnd = NULL;
 TCHAR text[255];
 DWORD dwPID = 0;
 GetWindowText(hwnd,text,sizeof(text));
 GetWindowThreadProcessId(hwnd,&dwPID);
 if(dwPID == (DWORD)lParam)
 {
   m_hwnd = hwnd;
  return FALSE;
 }
 return TRUE;
}

    2-1. 핸들 값을 찾았으면 그핸들값으로 창을 활성화 시킨다.
::BringWindowToTop(hwnd);
 ::SetActiveWindow(hwnd);
 ::SetForegroundWindow(hwnd);
 ::ShowWindow(hwnd, SW_SHOWNORMAL);
 ::UpdateWindow(hwnd);

Posted by 평강왕자
, |

1) 쓰레드 함수를 생성한다.

unsigned int UIUpdate(LPVOID dParam)
{
 CDSPNodeManagerUIDlg* mainDlg = (CDSPNodeManagerUIDlg*) dParam;
 
 return 0;
}

2) 사용할 곳에서 호출해준다.

::AfxBeginThread(UIUpdate, (LPVOID)this);

Posted by 평강왕자
, |


윈도우에 보면 트리에 three status 트리가 있다. 완전체크, 반체크, 해제 MFC 트리컨트롤은 기본적으로 지원하지 않아서 찾아보았다.

1) CTreeCtrl 을 상속받은 클래스 CCustomTreeCtrl을 만든다.

2) 메시지의 CUSTOMDRAW를 오버라이드한다.

3) CustomTreeCtrl 클래스에 체크 여부를 검사하는 BOOL GetStatus(HTREEITEM hItem) 함수를 만들어준고 CustomDraw에서 호출하여 체크 여부를 판단한뒤 색에 변화를 준다.

BOOL CCustomTreeCtrl::GetStatus(HTREEITEM hItem)
{
 HTREEITEM childItem = GetChildItem(hItem);
 while(childItem != NULL)
 {
  if(GetCheck(childItem))
  {
   return TRUE;
  }
  BOOL result = GetStatus(childItem);
  if(result == TRUE)
   return TRUE;

  childItem = GetNextSiblingItem(childItem);
 }
 return FALSE;
}

void CCustomTreeCtrl::CustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
 NMTVCUSTOMDRAW* pcd = (NMTVCUSTOMDRAW*)pNMHDR;
 HTREEITEM hItem;

 switch(pcd->nmcd.dwDrawStage)
 {
 case CDDS_PREPAINT:
  *pResult = CDRF_NOTIFYITEMDRAW;
  break;
 case CDDS_ITEMPREPAINT:
  hItem = (HTREEITEM)pcd->nmcd.dwItemSpec;
  //함수 결과 값이 TRUE면 색변화  
  BOOL result = GetStatus(hItem);
  if(result == TRUE)
  {
   pcd->clrText = RGB(255,0,0);
   pcd->clrTextBk = RGB(255,255,255);
  }
  pResult = CDRF_DODEFAULT;
  break;
 }
}

4) 트리컨트롤을 사용하고자 하는곳에서 CCustomTreeCtrl m_treeCtrl; 선언하여 사용하면 된다.

Posted by 평강왕자
, |


버튼에 이미지를 씌워야 하는데 그림파일이 버튼 크기보다 크면 이미지의 일부만 보인다.
그경우 이미지를 버튼크기에 맞게 다시 재설정을 해줘야 한다.

CString imagePath = _T("..\\picture\\picture.bmp");

CImage img;

img.Load(imagePath);

//버튼 크기에 맞게 이미지 재설정
 CDC dc;
 CRect rect;
 dc.Attach(lpDrawItemStruct->hDC);

 rect = lpDrawItemStruct->rcItem;

 CDC* pMDC = new CDC;

 pMDC->CreateCompatibleDC(&dc);

 CBitmap* pb = new CBitmap;
 pb->CreateCompatibleBitmap(&dc, rect.Width(),rect.Height());

 CBitmap* pob = pMDC->SelectObject(pb);

 pMDC->SetStretchBltMode(HALFTONE);

 img.StretchBlt(pMDC->m_hDC,-1,-1,rect.Width()+2,rect.Height()+2,0,0,img1.GetWidth(),img1.GetHeight(),SRCCOPY);

 pMDC->SelectObject(pob);
 CImage new_image;
 new_image.Attach((HBITMAP)(*pb));

 new_image.BitBlt(dc,rect.left,rect.top,SRCCOPY);

리소스의 버튼 속성의 Bitmap을 TRUE로 해줘야 한다.

p.s 해당 소스는 OnDrawItem을 상속받아 작성한 샘플입니다.

Posted by 평강왕자
, |

CString을 char*로 바꿔야 하는데
그냥 캐스팅을 하면 잘 안된다.

그래서 wcstombs을 사용하여 변환해 주는 방법을 사용 할 수 있다.

CString strCString = _T("TEST 문자열");
int strLen = strCString.GetLength();

char* strChar = new char[2*strLen + 1];
wcstombs(strChar, (wchar_t*)strCString.GetBuffer(0), 2*len + 1);

사용하여 변경할수 있다.
Posted by 평강왕자
, |

1차원 배열 동적 할당과 배열 크기를 알아야 하는경우가 있다.

//할당 new
int* array;
int = arraySize = 10;
array = new int[arraySize];

//할당 malloc
int* arry;
arry = (int*)malloc(sizeof(int)*10);

//배열의 크기
int size =  sizeof(array) / sizeof(array[0]);
Posted by 평강왕자
, |


간혹가다 프로토콜형태로 Char배열에 Byte형태로 전송하고 받아야 하는경우
long short 같은경우 비트 연산이 가능하지만 float 같은경우 비트연산이 불가능하다.

//샘플로 char배열과 float값 설정
char _charArray[4];
 float _floatValue = 12345.6789F;
//변환 전 값 체크
printf( " \n %10.5f " , _floatValue ) ;

//float 값을 unsigned log 으로 변환하여 한바이트씩 비트연산으로 배열에 집어 넣는다.
 _charArray[0] = (char)(*((unsigned long*)&_floatValue ) >> 24);
 _charArray[1] = (char)(*((unsigned long*)&_floatValue ) >> 16);
 _charArray[2] = (char)(*((unsigned long*)&_floatValue ) >> 8);
 _charArray[3] = (char)(*((unsigned long*)&_floatValue ));

//char배열에 집어넣은 값을 unsigned long 에 집어넣는다.
//여기서 & 0xFF를 제거할경우 부호 확장이 발생하여 값이 제대로 출력되지 않는다.
 unsigned long _longValue = (((unsigned long)_charArray[0]&0xFF) << 24);
  _longValue+= (((unsigned long)_charArray[1]&0xFF) << 16) ;
  _longValue+= (((unsigned long)_charArray[2]&0xFF) << 8) ;
  _longValue+= (((unsigned long)_charArray[3]&0xFF));;

//가져온값을 float로 변환한다.
 float fData = *((float*)&_longValue);
//변환후 값 출력
 printf( " \n %10.5f " , fData ) ;

이방법 말고 union을 사용하는 방법도 있다.

//union으로 float와 unsigned log 을 선언한다.
union {
  unsigned long l;
  float f;
 }u1,u2;

//u1구조체의 float에 값 삽입 ( unsigned log 에도 자동으로 값 삽입) 
u1.f = 1234.56789F;

//삽입된 값 출력
 printf( " \n %10.5f " , u1.f ) ;

//위에 예제와 다르게 부호확장을 위해서 unsigned char로 선언했다
//unsigned char일경우 부호가 없기 때문에 부호확장시 전부 0을 채워넣는다. 그래서 &0xFF가 필요 없다.
 unsigned char c[4];
 c[0] = u1.l >> 24;
 c[1] = u1.l >> 16;
 c[2] = u1.l >> 8;
 c[3] = u1.l;

 u2.l = c[0]<< 24;
 u2.l |= c[1]<< 16;
 u2.l |= c[2]<< 8;
 u2.l |= c[3];

  //u2.l = (c[0] & 0xFF) << 24;
 //u2.l |= (c[1] & 0xFF) << 16;
 //u2.l |= (c[2] & 0xFF) << 8;
 //u2.l |= (c[3] & 0xFF);

 printf( " \n %10.5f " , u2.f ) ;

Posted by 평강왕자
, |

최근에 달린 댓글

글 보관함