c#

program.cs의 Main()에 코딩해 주면 될듯 하네요

int thisID = System.Diagnostics.Process.GetCurrentProcess().Id; // 현재 기동한 프로그램 id


//실행중인 프로그램중 현재 기동한 프로그램과 같은 프로그램들 수집
System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("프로그램명");

if (p.Length > 1)
{

    for (int i = 0; i < p.Length; i++)
   {
       if (p[i].Id != thisID) continue; // 프로그램명은 같은데 똑같은 친구가 있다면...

       p[i].Kill(); // 프로그램명도 같고 프로그램 id가 같으면 프로세서 kill 하여 중복 실행을 방지
    }

신고
c#

일반적으로는 폼이 이동중일때마다 근처에 위치한 윈도우나 바탕화면의 경계면 좌표를 계산해서 일정 거리내로 접근하면 해당 좌표로 이동중인 폼의 좌표를 강제로 설정 해 주는 방식을 사용합니다.

생각보다는 어렵지 않구요. 접근 거리만 적당히 지정하면 기존의 자석 효과와 별반 다르지 않은 수준까지 쉽게 개발이 가능합니다.

자신이 작성한 어플리케이션내에서 자석 효과를 구현 할 때에는 각 폼의 좌표만 계산하는 것이 별로 문제 될 것 없지만 바탕화면에서 실행중인 모든 윈도우를 대상으로 자석 효과를 구현한 다면 전체 윈도우의 목록을 얻고 각 윈도우의 특성에 맞게 자석 효과를 구현 해 줘야 합니다.

 

 

GetWindowRect 나 GetClientRect API를 사용하시면 해당 윈도우의 RECT를 알 수 있습니다.

보통은 다른 윈도우와 자석 효과를 내지는 않고 자신의 동료 윈도우나 데스크탑의 경계면하고 자석 효과를 내죠.


====================================

서용혁 (hyuki, mvp, c#)

crazy for .NET

Visual Studio 2005, .NET Framework, C#, MSDN Magazine

신고
c#

부모폼에서... 또다른 부모폼

schedule frm2 = new schedule(ID);

frm2.Owner = ParentForm; // 또다른 부모폼을 부모폼으로 등록

frm2.Show();


자식폼에서 부모폼 함수 호출

Negero negero = (Negero)Owner; // Negero는 자식폼 클래스
negero.View();
신고
c#

BOOL CTestDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
     // TODO: Add extra initialization here

    this->m_ctrCombo1.ResetContent(); //콤보박스내의 모든 문자열 삭제

    this->m_ctrCombo1.AddString(_T("ABCD"));  //문자열을 추가
    this->m_ctrCombo1.AddString(_T("1234"));    //문자열을 추가
    this->m_ctrCombo1.AddString(_T("5678"));    //문자열을 추가
    this->m_ctrCombo1.DeleteString(0);    //첫번째 문자열(ABCD)을 삭제
    this->m_ctrCombo1.SetCurSel(0);       //첫번째 문자열(1234)을 선택
    this->m_ctrCombo1.InsertString(0,"Insert"); //0번문자열(1234) 앞에 새로운문자열 삽입

 

    return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}

 

▷ CComboBox::AddString - 스트링을 더함.
▷ CComboBox::CComboBox - ComboBox 오브젝트를 생성(구성).
▷ CComboBox::Clear -현재 선택을 지움.
▷ CComboBox::CompareItem - 새로운 리스트 항목의 상태적 위치를 결정.
▷ CComboBox::Copy - 현재 선택을 Copy.
▷ CComboBox::Create - CComboBox를 생성.
▷ CComboBox::Cut - 제거된 텍스트를 복사.
▷ CComboBox::DeleteItem - 항목이 Combo 박스에서 제거.
▷ CComboBox::DeleteString - 스트링을 제거.
▷ CComboBox::Dir - 리스트를 더함.
▷ CComboBox::DrawItem - 양상이 변할 때 불려짐.
▷ CComboBox::FindString - 첫 번째 스트링을 찾음.
▷ CComboBox::FindStringExact - 첫 번째 리스트 박스 스트링을 찾음.
▷ CComboBox::GetCount - 항목의 수를 회복.
▷ CComboBox::GetCurSel - 현재 선택된 항목의 색인을 찾음
▷ CComboBox::GetDroppedControlRect - 스크린 좌표를 되찾음.
▷ CComboBox::GetDroppedState - 리스트 박스가 보일지를 결정.
▷ CComboBox::GetEditSel - 시작과 끝나는 문자의 위치를 얻음.
▷ CComboBox::GetExtendedUI - 디폴트, 확장 사용자 인터페이스의 결정.
▷ CComboBox::GetItemData - 항목과 관련된 비트값을 회복.
▷ CComboBox::GetItemDataPtr - 포인터로서 관련된 비트 값을 회복.
▷ CComboBox::GetItemHeight - 리스트 항목의 높이를 회복.
▷ CComboBox::GetLBText - 리스트 박스로부터 스트링을 얻음.
▷ CComboBox::GetLBTextLen - 스트링의 길이를 지정.
▷ CComboBox::InsertString - 스트링의 삽입.
▷ CComboBox::LimitText - 텍스트의 길이를 제한.
▷ CComboBox::MeasureItem - Combo 박스 치수를 결정하기 위해 불려짐.
▷ CComboBox::Paste - 현재 커서 위치에서 편집 제어로 삽입.
▷ CComboBox::ResetContent - 모든 항목의 제거.
▷ CComboBox::SelectString - 스트링을 선택, 복사.
▷ CComboBox::SetCurSel - 스트링을 선택.
▷ CComboBox::SetEditSel - 편집 제어에서 문자들을 선택.
▷ CComboBox::SetExtendedUI - 디폴트, 확장 사용자 인터페이스의 선택.
▷ CComboBox::SetItemData - 항목과 관련된 값을 정함.
▷ CComboBox::SetItemDataPtr - 포인터에 대한 관련된 값을 정함.
▷ CComboBox::SetItemHeight - 높이를 지정.
▷ CComboBox::ShowDropDown - 리스트 박스를 보여주거나 숨김.

신고

+ Recent posts

티스토리 툴바