📄 micqdlg.cpp
字号:
// MICQDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MICQ.h"
#include "MICQDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define DETASTEP 10
#define IDC_MYLIST 10100
#define ID_QMENU_ITEMS WM_USER+10
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
#include "hyperlink.h"
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
CHyperLink m_HomePage;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
DDX_Control(pDX, IDC_HOMEPAGE, m_HomePage);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMICQDlg dialog
int g_bDlgStatus=0;
BOOL AdjustPos(CRect* lpRect)
{//自动靠边
int iSX=GetSystemMetrics(SM_CXFULLSCREEN);
int iSY=GetSystemMetrics(SM_CYFULLSCREEN);
RECT rWorkArea;
BOOL bResult = SystemParametersInfo(SPI_GETWORKAREA,
sizeof(RECT),
&rWorkArea,
0);
CRect rcWA;
if(!bResult)
{//如果调用不成功就利用GetSystemMetrics获取屏幕面积
rcWA=CRect(0,0,iSX,iSY);
}
else
rcWA=rWorkArea;
int iX=lpRect->left;
int iY=lpRect->top;
if(iX < rcWA.left + DETASTEP && iX!=rcWA.left)
{//调整左
//pWnd->SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);
lpRect->OffsetRect(rcWA.left-iX,0);
AdjustPos(lpRect);
g_bDlgStatus=1;
return TRUE;
}
if(iY < rcWA.top + DETASTEP && iY!=rcWA.top)
{//调整上
//pWnd->SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);
lpRect->OffsetRect(0,rcWA.top-iY);
AdjustPos(lpRect);
g_bDlgStatus=2;
return TRUE;
}
if(iX + lpRect->Width() > rcWA.right - DETASTEP && iX !=rcWA.right-lpRect->Width())
{//调整右
//pWnd->SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);
lpRect->OffsetRect(rcWA.right-lpRect->right,0);
AdjustPos(lpRect);
g_bDlgStatus=3;
return TRUE;
}
if(iY + lpRect->Height() > rcWA.bottom - DETASTEP && iY !=rcWA.bottom-lpRect->Height())
{//调整下
//pWnd->SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);
lpRect->OffsetRect(0,rcWA.bottom-lpRect->bottom);
g_bDlgStatus=4;
return TRUE;
}
g_bDlgStatus=0;
return FALSE;
}
CMICQDlg::CMICQDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMICQDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMICQDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMICQDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMICQDlg)
DDX_Control(pDX, IDC_SEARCH, m_SearchBtn);
DDX_Control(pDX, IDC_NEWS, m_NewsBtn);
DDX_Control(pDX, IDC_MICQ, m_MicqBtn);
DDX_Control(pDX, IDC_MESSAGE, m_MessageBtn);
DDX_Control(pDX, IDC_LOGIN, m_LoginBtn);
DDX_Control(pDX, IDC_IE, m_IeBtn);
DDX_Control(pDX, IDC_HANDTEL, m_HandBtn);
DDX_Control(pDX, IDC_FRIEND, m_FriBtn);
DDX_Control(pDX, IDC_CHAT, m_ChatBtn);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMICQDlg, CDialog)
//{{AFX_MSG_MAP(CMICQDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_MOVING()
ON_BN_CLICKED(IDC_MICQ, OnMicq)
ON_COMMAND(ID_QMENU_ITEMS, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+1, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+2, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+3, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+4, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+5, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+6, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+7, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+8, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+9, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+10, OnMenu)
ON_COMMAND(ID_QMENU_ITEMS+11, OnMenu)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_OUTBAR_NOTIFY, OnOutbarNotify)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMICQDlg message handlers
BOOL CMICQDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
// TODO: Add extra initialization here
DWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups|
CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation
|CGfxOutBarCtrl::fSelHighlight;
wndBar.Create(WS_CHILD|WS_VISIBLE, CRect(0,22,83,272), this,IDC_MYLIST, dwf);
wndBar.SetOwner(this);
imaLarge.Create(IDB_IMAGELIST, 32, 0, RGB(0,130,132));
imaSmall.Create(IDB_SMALL_IMAGELIST, 16, 0, RGB(0,128,128));
wndBar.SetImageList(&imaLarge, CGfxOutBarCtrl::fLargeIcon);
wndBar.SetImageList(&imaSmall, CGfxOutBarCtrl::fSmallIcon);
wndBar.SetAnimationTickCount(20);
wndBar.SetAnimSelHighlight(200);
wndBar.AddFolder("我的好友", 0);
wndBar.AddFolder("mm",1);
wndBar.AddFolder("小妹妹", 2);
wndBar.AddFolder("陌生人", 3);
wndBar.AddFolder("黑名单", 4);
wndBar.InsertItem(0, 0, "mm", 0, 0);
wndBar.InsertItem(0, 1, "angle", 1, 0);
wndBar.InsertItem(0, 2, "格格", 2, 0);
wndBar.InsertItem(0, 3, "丁晶", 3, 0);
wndBar.InsertItem(0, 4, "CoCo", 0, 0);
wndBar.InsertItem(0, 5, "frost", 1, 0);
wndBar.InsertItem(0, 6, "谢朝阳", 2, 0);
wndBar.InsertItem(0, 7, "Kelly", 3, 0);
wndBar.InsertItem(0, 8, "宝贝", 0, 0);
wndBar.InsertItem(0, 9, "雪儿", 1, 0);
wndBar.InsertItem(0, 10, "闭月体花", 2, 0);
wndBar.InsertItem(0, 11, "Love", 3, 0);
wndBar.InsertItem(0, 12, "wife", 0, 0);
wndBar.InsertItem(0, 13, "Yangdd", 1, 0);
wndBar.InsertItem(0, 14, "秋叶子", 2, 0);
wndBar.InsertItem(0, 15, "马世俊", 3, 0);
wndBar.InsertItem(0, 1, "宫立波", 3, 0);
wndBar.InsertItem(0, 17, "大师", 3, 0);
wndBar.InsertItem(2, 0, "我们", 0, 0);
wndBar.InsertItem(2, 1, "测试",0,0);
wndBar.InsertItem(2, 2, "fox", 2, 0);
wndBar.InsertItem(2, 3, "Virus", 3, 0);
wndBar.SetSelFolder(0);
m_openWindow.left =
m_openWindow.top =
m_openWindow.right =
m_openWindow.bottom = 0;
m_SearchBtn.SetIcon(IDR_SEARCH);
m_NewsBtn.SetIcon(IDR_SJ);
m_MicqBtn.SetBitmap(IDB_XICQ,IDB_MICQ);
m_MessageBtn.SetIcon(IDR_MESSAGE);
m_LoginBtn.SetIcon(IDR_MDISABLE,IDR_QQ);
m_IeBtn.SetIcon(IDR_HOMEPAGE);
m_HandBtn.SetIcon(IDR_SJ1);
m_FriBtn.SetIcon(IDR_FRIEND);
m_ChatBtn.SetIcon(IDR_CHAT);
m_resize.Create( this, TRUE,300);
CResizeInfo rInfo[] =
{
// id l t w h
{ IDC_MYLIST, 0, 0, 300, 300 },
{ IDC_CHAT, 0, 300, 0, 0 },
{ IDC_SEARCH, 0, 300, 300, 0 },
{ IDC_IE, 0, 300, 0, 0 },
{ IDC_MESSAGE, 0, 300, 300, 0 },
{ IDC_MICQ, 0, 300, 0, 0 },
{ IDC_LOGIN, 0, 300, 300, 0 },
{ 0 },
};
m_resize.Add( rInfo );
m_resize.SetMinimumTrackingSize();
return TRUE; // return TRUE unless you set the focus to a control
}
void CMICQDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMICQDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMICQDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMICQDlg::OnMoving(UINT fwSide, LPRECT pRect)
{
if (rand()%2) {
CRect r=*pRect;
AdjustPos(&r);
*pRect=(RECT)r;
} else
CDialog::OnMoving(fwSide,pRect);
// TODO: Add your message handler code here
}
long CMICQDlg::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case NM_OB_ITEMCLICK:
// cast the lParam to an integer to get the clicked item
{
int index = (int) lParam;
CString cs, cs1;
cs1 = wndBar.GetItemText(index);
cs.Format("Clicked on %d - <%s>", (int)lParam, cs1);
AfxMessageBox(cs);
}
return 0;
case NM_OB_ONLABELENDEDIT:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited item
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Editing item %d, new text:%s\n", pOI->index, pOI->cText);
}
return 1;
case NM_OB_ONGROUPENDEDIT:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited folder
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Editing folder %d, new text:%s\n", pOI->index, pOI->cText);
}
return 1;
case NM_OB_DRAGITEM:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the dragged items
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Drag item %d at position %d\n", pOI->iDragFrom, pOI->iDragTo);
}
return 1;
}
return 0;
}
struct FOpenInfo
{
CResizeCtrl * resize;
CRect * rect;
};
UINT CALLBACK CMICQDlg::HookProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// subclassing is dont in the first WM_NOTIFY after CDN_INITDONE
if( msg == WM_NOTIFY && lParam )
{
OFNOTIFY * notify = (OFNOTIFY *)lParam;
FOpenInfo * info = reinterpret_cast<FOpenInfo *>(notify->lpOFN->lCustData);
// don't use CDN_INITDONE, because at this time
// the listview is not created
if( notify->hdr.code != CDN_INITDONE &&
info && info->resize == NULL )
{
HWND hWndParent = ::GetParent( hWnd );
CResizeCtrl * resize = new CResizeCtrl( hWndParent );
// save object in lpOFN->lCustData
info->resize = resize;
// Find Toolbar, because its ID = IDOK
HWND hWndToolBar = NULL;
for( HWND hWndCtl = ::GetWindow(hWndParent, GW_CHILD);
hWndToolBar == NULL && ::IsWindow( hWndCtl);
hWndCtl = ::GetWindow( hWndCtl, GW_HWNDNEXT ) )
{
char szBuf[ 64 ];
::GetClassName( hWndCtl, szBuf, sizeof szBuf );
if( ::lstrcmpi( szBuf, TOOLBARCLASSNAME ) == 0 )
hWndToolBar = hWndCtl;
}
if( hWndToolBar )
// toolbar 1
resize->Add(
hWndToolBar, 100, 0, 0, 0 );
// ComboBox
resize->Add( 0x471, 0, 0, 100, 0 );
// ListView 461
resize->Add( 0x461, 0, 0, 100, 100 );
// Edit 480
resize->Add( 0x480, 0, 100, 100, 0 );
// ComboBox 470
resize->Add( 0x470, 0, 100, 100, 0 );
// Mit Schreibschutz 410
resize->Add( 0x410, 0, 100, 0, 0 );
// Dateiname 442
// DateiTyp 441
resize->Add( 0x441, 0, 100, 0, 0 );
resize->Add( 0x442, 0, 100, 0, 0 );
// 謋fnen 1
resize->Add( 1, 100, 100, 0, 0 );
resize->Add( 2, 100, 100, 0, 0 );
resize->SetMinimumTrackingSize();
resize->SetGripEnabled( TRUE );
// restore previous Position
if( info->rect &&
info->rect->Width() > 0 &&
info->rect->Height() > 0 )
{
::MoveWindow( hWndParent, info->rect->left, info->rect->top,
info->rect->Width(), info->rect->Height(), TRUE );
}
}
}
return 0;
}
void CMICQDlg::OnMicq()
{
// TODO: Add your control notification handler code here
//UpdateData(TRUE);
QMenu ezmenu;
CMenu menu;
menu.LoadMenu(IDR_MENU_XICQ);
ezmenu.Attach(menu.GetSubMenu(0)->GetSafeHmenu());
CBitmap bmp;
bmp.LoadBitmap(IDB_MICQLEFT/*The title bitmap*/);
ezmenu.SetTotalItems(11);
ezmenu.SetMenuBitmap((HBITMAP)bmp.Detach());
ezmenu.SetBitmapDimension(CSize(20,230));
//ezmenu.SetLargeIcon(m_bLargeIcons);
ezmenu.SetExtensionColor(RGB(10,10,10));
QMENUITEMDATA lpez[12];
for(int i=0;i<10;++i)
{
if (i%2) {
lpez[i].SetItemIcon(IDR_SJ1);
lpez[i].SetItemText("谢谢评论");
}
else if (i%3) {
lpez[i].SetItemIcon(IDR_SJ);
lpez[i].SetItemText("请你光临");
}
else {
lpez[i].SetItemIcon(IDR_CHAT);
lpez[i].SetItemText("我的免费之家");
}
ezmenu.InsertOwnerDrawnMenuItem(ID_QMENU_ITEMS+i,&lpez[i]);
}
ezmenu.RemoveMenu(ID_MENU_TEMP,MF_BYCOMMAND);
lpez[11].SetSeperator(TRUE);
ezmenu.InsertOwnerDrawnMenuItem(ID_QMENU_ITEMS+11,&lpez[11],1);
CRect rect;
m_MicqBtn.GetWindowRect(&rect);
CSize size=ezmenu.GetMenuSize();
ezmenu.TrackPopupMenu(TPM_RIGHTALIGN,rect.left+size.cx,rect.top-size.cy,this);
// ezmenu.DestroyMenu();
}
void CMICQDlg::OnMenu()
{
ShellExecute(NULL, _T("open"), "http://www.kl.gz.cn/~glb/", NULL,NULL, SW_SHOW);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -