수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1694933
  • Today | 678
  • Yesterday | 606

Programming/MFC2007/02/22 10:20

Winamp 처럼 벽에 붙이기

원본 : http://www.debuglab.com/knowledge/winamp.html

1.요약

Winamp 에서 보면 프로그램이 움직이다가 벽에 달라 붙죠? 그걸 구현해 보도록 하겠습니다.


2.본문

윈도우가 움직일때 메세지가 발생합니다. WM_WINDOWPOSCHANGING 이라는 메세지가 발생하죠. 이때 발생하는 메세지에서 윈도우의 위치를 비교해서 적당한 Offset 에 걸렸을때 윈도우를 강제로 옮겨 주면 됩니다.
아래의 소스를 참고하세요.


3.예제

// m_nYOffset 과 m_nXOffset 값을 바꾸어 주시면 됩니다. 



void CSnapDialog::OnWindowPosChanging( WINDOWPOS* lpwndpos ) 

{ 

    CRect wndRect, trayRect; 

    int leftTaskbar = 0, rightTaskbar = 0, topTaskbar = 0, bottomTaskbar = 0; 

    

    GetWindowRect(&wndRect); 

    

    // Screen resolution 

    int screenWidth = GetSystemMetrics(SM_CXSCREEN); 

    int screenHeight = GetSystemMetrics(SM_CYSCREEN); 

    

    // Find the taskbar 

    CWnd* pWnd = FindWindow(_T("Shell_TrayWnd"), _T("")); 

    pWnd->GetWindowRect(&trayRect); 

    

    int wndWidth = wndRect.right - wndRect.left; 

    int wndHeight = wndRect.bottom - wndRect.top; 

    

    if(trayRect.top <= 0 && trayRect.left <= 0 && trayRect.right >= screenWidth) { 

        // top taskbar 

        topTaskbar = trayRect.bottom - trayRect.top; 

    } 

    else if(trayRect.top > 0 && trayRect.left <= 0) { 

        // bottom taskbar 

        bottomTaskbar = trayRect.bottom - trayRect.top; 

    } 

    else if(trayRect.top <= 0 && trayRect.left > 0) { 

        // right taskbar 

        rightTaskbar = trayRect.right - trayRect.left; 

    } 

    else { 

        // left taskbar 

        leftTaskbar = trayRect.right - trayRect.left; 

    } 

    

    // Snap to screen border 

    // Left border 

    if(lpwndpos->x >= -m_nXOffset + leftTaskbar && lpwndpos->x <= leftTaskbar + m_nXOffset) { 

        lpwndpos->x = leftTaskbar; 

    } 

    

    // Top border 

    if(lpwndpos->y >= -m_nYOffset && lpwndpos->y <= topTaskbar + m_nYOffset) { 

        lpwndpos->y = topTaskbar; 

    } 

    

    // Right border 

    if(lpwndpos->x + wndWidth <= screenWidth - rightTaskbar + m_nXOffset && 

        lpwndpos->x + wndWidth >= screenWidth - rightTaskbar - m_nXOffset) { 

        lpwndpos->x = screenWidth - rightTaskbar - wndWidth; 

    } 

    

    // Bottom border 

    if( lpwndpos->y + wndHeight <= screenHeight - bottomTaskbar + m_nYOffset 

        && lpwndpos->y + wndHeight >= screenHeight - bottomTaskbar - m_nYOffset) { 

        lpwndpos->y = screenHeight - bottomTaskbar - wndHeight; 

    } 

} 


- 2001.08.13 Smile Seo -
"MFC" 카테고리의 다른 글
  • 문자열 검색 API (0)2007/02/22
  • Toolbar안에 다른 Control넣기 (0)2007/02/22
  • Winamp 처럼 벽에 붙이기 (0)2007/02/22
  • 윈앰프처럼 TaskBar와 SystemTray 마음대로 주무루기 (0)2007/02/22
  • 일반적인 Child Window 만들기 (0)2007/02/21
2007/02/22 10:20 2007/02/22 10:20
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2625

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 623 624 625 626 627 628 629 630 631 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • proc
  • Worker
  • 연적지
  • Tip
  • 홍보 동영상
  • 시스템 분석
  • Register
  • GCOE X
  • Hangul
  • 메모리 누수
  • 이건희
  • Makefile
  • Solar PHP
  • Session
  • Receive
  • 국가대표
  • OS
  • Edit
  • GDB
  • varchar

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 경청... 너무나 중요한데.......
    webdizen 14:59
  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  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      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Polarux - Linuxing
      • Rodman®
      • 까만 나비
      • 나를 가꾸는 시간.
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.