本文整理汇总了C++中GetDlgCtrlID函数的典型用法代码示例。如果您正苦于以下问题:C++ GetDlgCtrlID函数的具体用法?C++ GetDlgCtrlID怎么用?C++ GetDlgCtrlID使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetDlgCtrlID函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DlgProcPageLay
LRESULT CALLBACK DlgProcPageLay(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (CommonDlgPageProcess(hwnd, msg, wParam, lParam))
{
return TRUE;
}
if (msg == WM_INITDIALOG)
{
KeyToDlg(HotKey_ChangeLayoutCycle, IDC_EDIT_K1, hwnd);
KeyToDlg(HotKey_ChangeSetLayout_1, IDC_EDIT_K2, hwnd);
KeyToDlg(HotKey_ChangeSetLayout_2, IDC_EDIT_K3, hwnd);
KeyToDlg(HotKey_ChangeSetLayout_3, IDC_EDIT_K4, hwnd);
FillLayList();
FillCombo(hwnd, IDC_COMBO_K2, SettingsGui::SW_HKL_1);
FillCombo(hwnd, IDC_COMBO_K3, SettingsGui::SW_HKL_2);
FillCombo(hwnd, IDC_COMBO_K4, SettingsGui::SW_HKL_3);
return FALSE;
}
else if (msg == WM_CTLCOLORSTATIC)
{
int id = GetDlgCtrlID((HWND)lParam);
if (id == IDC_EDIT_K1 || id == IDC_EDIT_K2 || id == IDC_EDIT_K3 || id == IDC_EDIT_K4)
return HandleCtlColor(hwnd, lParam, wParam);
return TRUE;
}
else if (msg == WM_COMMAND)
{
if (HIWORD(wParam) == CBN_SELCHANGE)
{
int id = LOWORD(wParam);
ComboChanged(hwnd, id);
}
else if (LOWORD(wParam) == IDC_BUTTON_K1)
{
ChangeHotKey(HotKey_ChangeLayoutCycle, IDC_EDIT_K1, hwnd);
return TRUE;
}
else if (LOWORD(wParam) == IDC_BUTTON_K2)
{
if(ChangeHotKey(HotKey_ChangeSetLayout_1, IDC_EDIT_K2, hwnd))
{
ComboChanged(hwnd, IDC_COMBO_K2);
}
return TRUE;
}
else if (LOWORD(wParam) == IDC_BUTTON_K3)
{
if(ChangeHotKey(HotKey_ChangeSetLayout_2, IDC_EDIT_K3, hwnd))
{
ComboChanged(hwnd, IDC_COMBO_K3);
}
return TRUE;
}
else if (LOWORD(wParam) == IDC_BUTTON_K4)
{
if(ChangeHotKey(HotKey_ChangeSetLayout_3, IDC_EDIT_K4, hwnd))
{
ComboChanged(hwnd, IDC_COMBO_K4);
}
return TRUE;
}
}
return FALSE;
}
示例2: ContactListControlWndProc
LRESULT CALLBACK ContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
ClcData *dat = (ClcData*)GetWindowLongPtr(hwnd, 0);
RECT r;
switch (msg) {
case WM_CREATE:
dat = (ClcData*)mir_calloc( sizeof(ClcData));
SetWindowLongPtr(hwnd, 0, (LONG_PTR) dat);
dat->hwnd_list = CreateWindow(_T("LISTBOX"), _T(""),
(WS_VISIBLE | WS_CHILD | LBS_NOINTEGRALHEIGHT | LBS_NOTIFY | LBS_WANTKEYBOARDINPUT | WS_VSCROLL),
0, 0, 0, 0, hwnd, NULL, g_hInst,0);
dat->need_rebuild = FALSE;
GetClientRect(hwnd, &r);
SetWindowPos(dat->hwnd_list, 0, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOZORDER | SWP_NOACTIVATE);
break;
case WM_SIZE:
GetClientRect(hwnd, &r);
SetWindowPos(dat->hwnd_list, 0, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOZORDER | SWP_NOACTIVATE);
break;
case WM_PRINTCLIENT:
case WM_PAINT:
if (dat->need_rebuild)
RebuildEntireListInternal(hwnd, (ClcData*)dat, FALSE);
// no break
case WM_VSCROLL:
case WM_MOUSEWHEEL:
case WM_KEYDOWN:
return DefWindowProc(hwnd, msg, wParam, lParam);
case INTM_SCROLLBARCHANGED:
return TRUE;
case WM_VKEYTOITEM:
{
int key = LOWORD(wParam);
if (key == VK_LEFT || key == VK_RIGHT || key == VK_RETURN || key == VK_DELETE || key == VK_F2) {
coreCli.pfnContactListControlWndProc(hwnd, WM_KEYDOWN, key, 0);
return dat->selection;
}
NMKEY nmkey;
nmkey.hdr.hwndFrom = hwnd;
nmkey.hdr.idFrom = GetDlgCtrlID(hwnd);
nmkey.hdr.code = NM_KEYDOWN;
nmkey.nVKey = key;
nmkey.uFlags = 0;
if ( SendMessage(GetParent(hwnd), WM_NOTIFY, 0, (LPARAM) & nmkey))
return -2;
}
return -1;
case WM_COMMAND:
if ((HANDLE) lParam != dat->hwnd_list || HIWORD(wParam) != LBN_SELCHANGE)
break;
dat->selection = SendMessage(dat->hwnd_list, LB_GETCURSEL, 0, 0);
KillTimer(hwnd, TIMERID_INFOTIP);
KillTimer(hwnd, TIMERID_RENAME);
dat->szQuickSearch[0] = 0;
pcli->pfnInvalidateRect(hwnd, NULL, FALSE);
pcli->pfnEnsureVisible(hwnd, (ClcData*)dat, dat->selection, 0);
UpdateWindow(hwnd);
break;
case WM_SETFOCUS:
case WM_ENABLE:
SetFocus(dat->hwnd_list);
break;
}
return coreCli.pfnContactListControlWndProc(hwnd, msg, wParam, lParam);
}
示例3: resize_template_hook
static LONG_PTR WINAPI resize_template_hook(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
static RECT initrc, rc;
static int index, count;
static int gotSWP_bottom, gotShowWindow;
HWND parent = GetParent( dlg);
int resize;
#define MAXNRCTRLS 30
static RECT ctrlrcs[MAXNRCTRLS];
static int ctrlids[MAXNRCTRLS];
static HWND ctrls[MAXNRCTRLS];
static int nrctrls;
switch( msg)
{
case WM_INITDIALOG:
{
DWORD style;
index = ((OPENFILENAME*)lParam)->lCustData;
count = 0;
gotSWP_bottom = gotShowWindow = 0;
/* test style */
style = GetWindowLong( parent, GWL_STYLE);
if( resize_testcases[index].flags & OFN_ENABLESIZING)
if( !(style & WS_SIZEBOX)) {
win_skip( "OFN_ENABLESIZING flag not supported.\n");
resizesupported = FALSE;
PostMessage( parent, WM_COMMAND, IDCANCEL, 0);
} else
ok( style & WS_SIZEBOX,
"testid %d: dialog should have a WS_SIZEBOX style.\n", index);
else
ok( !(style & WS_SIZEBOX),
"testid %d: dialog should not have a WS_SIZEBOX style.\n", index);
break;
}
case WM_NOTIFY:
{
if(( (LPNMHDR)lParam)->code == CDN_FOLDERCHANGE){
GetWindowRect( parent, &initrc);
if( (resize = resize_testcases[index].resize_folderchange)){
MoveWindow( parent, initrc.left,initrc.top, initrc.right - initrc.left + resize,
initrc.bottom - initrc.top + resize, TRUE);
}
SetTimer( dlg, 0, 100, 0);
}
break;
}
case WM_TIMER:
{
if( count == 0){
/* store the control rectangles */
if( resize_testcases[index].testcontrols) {
HWND ctrl;
int i;
for( i = 0, ctrl = GetWindow( parent, GW_CHILD);
i < MAXNRCTRLS && ctrl;
i++, ctrl = GetWindow( ctrl, GW_HWNDNEXT)) {
ctrlids[i] = GetDlgCtrlID( ctrl);
GetWindowRect( ctrl, &ctrlrcs[i]);
MapWindowPoints( NULL, parent, (LPPOINT) &ctrlrcs[i], 2);
ctrls[i] = ctrl;
}
nrctrls = i;
}
if( (resize = resize_testcases[index].resize_timer1)){
GetWindowRect( parent, &rc);
MoveWindow( parent, rc.left,rc.top, rc.right - rc.left + resize,
rc.bottom - rc.top + resize, TRUE);
}
} else if( count == 1){
resize = resize_testcases[index].resize_check;
GetWindowRect( parent, &rc);
if( resize_testcases[index].todo){
todo_wine {
ok( resize == rc.right - rc.left - initrc.right + initrc.left,
"testid %d size-x change %d expected %d\n", index,
rc.right - rc.left - initrc.right + initrc.left, resize);
ok( resize == rc.bottom - rc.top - initrc.bottom + initrc.top,
"testid %d size-y change %d expected %d\n", index,
rc.bottom - rc.top - initrc.bottom + initrc.top, resize);
}
}else{
ok( resize == rc.right - rc.left - initrc.right + initrc.left,
"testid %d size-x change %d expected %d\n", index,
rc.right - rc.left - initrc.right + initrc.left, resize);
ok( resize == rc.bottom - rc.top - initrc.bottom + initrc.top,
"testid %d size-y change %d expected %d\n", index,
rc.bottom - rc.top - initrc.bottom + initrc.top, resize);
}
if( resize_testcases[index].testcontrols) {
int i;
RECT rc;
for( i = 0; i < nrctrls; i++) {
GetWindowRect( ctrls[i], &rc);
MapWindowPoints( NULL, parent, (LPPOINT) &rc, 2);
switch( ctrlids[i]){
/* test if RECT R1, moved and sized result in R2 */
//.........这里部分代码省略.........
示例4: ASSERT
void CACEdit::OnChange()
{
CString m_Text;
int pos=0,len;
if(m_iType == -1)
{
ASSERT(0);
return;
}
GetWindowText(m_EditText);
len = m_EditText.GetLength();
//----------------------------------------------
if(m_iMode & _MODE_FILESYSTEM_ || m_iMode & _MODE_FS_START_DIR_)
{
if(!m_CursorMode)
{
if(m_iType == _EDIT_)
pos = LOWORD(((CEdit*)this)->CharFromPos(GetCaretPos()));
if(m_iType == _COMBOBOX_)
pos = m_pEdit->CharFromPos(m_pEdit->GetCaretPos());
if(m_iMode & _MODE_FS_START_DIR_)
{
if(len)
m_Liste.FindString(-1,m_EditText);
else
m_Liste.ShowWindow(false);
}
else
{
if(len > 2 && pos == len)
{
if(_taccess(m_EditText,0) == 0)
{
ReadDirectory(m_EditText);
}
m_Liste.FindString(-1,m_EditText);
}
else
m_Liste.ShowWindow(false);
}
} // m_CursorMode
}
//----------------------------------------------
if(m_iMode & _MODE_SEPARATION_)
{
if(!m_CursorMode)
{
if(m_iType == _EDIT_)
pos = LOWORD(((CEdit*)this)->CharFromPos(GetCaretPos()));
if(m_iType == _COMBOBOX_)
pos = m_pEdit->CharFromPos(m_pEdit->GetCaretPos());
int left,right;
left = FindSepLeftPos(pos-1);
right = FindSepRightPos(pos);
m_Text = m_EditText.Mid(left,right-left);
m_Liste.FindString(-1,m_Text);
}
}
//----------------------------------------------
if(m_iMode & _MODE_STANDARD_)
{
if(!m_CursorMode)
m_Liste.FindString(-1,m_EditText);
}
//----------------------------------------------
GetParent()->SendMessage(ENAC_UPDATE, EN_UPDATE, GetDlgCtrlID());
}
示例5: Author
//.........这里部分代码省略.........
SNUMERICINFO sNumInfo;
SUSERPROGINFO sProgInfo;
CString omStr = STR_EMPTY;
// Got the entry type from the CMap
if( m_omListItemType.Lookup(
lGetMapID(nItem, nSubItem) , sInfo) == TRUE )
{
// Begining of Controls creation
m_bCreating = TRUE;
switch( sInfo.m_eType)
{
// Numeric Edit box with or with out Spin Control
case eNumber:
case eBuddy:
// Get the numeric control parameters
if( m_omNumDetails.Lookup( lGetMapID(nItem, nSubItem),
sNumInfo ) == TRUE )
{
pomNumItem(nItem, nSubItem, sNumInfo);
}
else
{
// Numeric info is not set
ASSERT( FALSE );
// Call with default value
pomNumItem(nItem, nSubItem, sNumInfo);
}
break;
// General Edit control
case eText:
pomEditItem(nItem, nSubItem);
break;
// Editalble Combo Box
case eComboList:
pomComboList(nItem, nSubItem, sInfo.m_omEntries);
break;
// Non - Editable combo box
case eComboItem:
pomComboItem(nItem, nSubItem, sInfo.m_omEntries);
break;
// User function will be executed
case eUser:
// Get the user program pointer and parameter details
if( m_omUserProg.Lookup( lGetMapID(nItem, nSubItem),
sProgInfo ) == TRUE )
{
sProgInfo.m_pfHandler( this,
nItem,
nSubItem,
sProgInfo.m_pUserParam);
}
else
{
// User program information is not set
ASSERT( FALSE );
}
break;
// Toggling type control
case eBool:
// Get the current text
omStr = GetItemText(nItem, nSubItem);
// Compare with the first item
if( sInfo.m_omEntries.GetAt(0).Compare(omStr) == 0 )
{
// Toggle the first with the second item text.
omStr = sInfo.m_omEntries.GetAt(1);
}
// Compare with the Second item
else if( sInfo.m_omEntries.GetAt(1).Compare(omStr) == 0 )
{
// Replace with the first item
omStr = sInfo.m_omEntries.GetAt(0);
}
// If it is not matching with these two items nothing will
// happen. This could be used to disable the control
// For boolean type this is the end of Controls creation
m_bCreating = FALSE;
// For boolean send the EndLAbleEdit message here itself
LV_DISPINFO lvDispInfo;
lvDispInfo.hdr.hwndFrom = m_hWnd;
lvDispInfo.hdr.idFrom = GetDlgCtrlID();
lvDispInfo.hdr.code = LVN_ENDLABELEDIT;
lvDispInfo.item.mask = LVIF_TEXT;
lvDispInfo.item.iItem = nItem;
lvDispInfo.item.iSubItem = nSubItem;
lvDispInfo.item.pszText = LPTSTR((LPCTSTR)omStr);
lvDispInfo.item.cchTextMax = omStr.GetLength();
SendMessage( WM_NOTIFY, GetDlgCtrlID(),(LPARAM)&lvDispInfo);
break;
default:
// Unknown control type
ASSERT( FALSE );
}
// End of Controls
m_bCreating = FALSE;
}
}
}
示例6: ehzListView
// -----------------------------------------------
// List view di lettura (senza sort header)
// -----------------------------------------------
void * ehzListView(struct OBJ *objCalled,EN_MESSAGE cmd,LONG info,void *ptr)
{
EH_DISPEXT *psExt=ptr;
static SINT HdbMovi=-1;
static INT16 iSend;
DWORD dwExStyle;
SINT iLVIndex;
if (fReset)
{
if (cmd!=WS_START) win_infoarg("Inizializzare ehzListView()");
memset(&_arsLv,0,sizeof(EH_LVLIST)*LVMAX);
EhListInizialize();
fReset=FALSE;
return 0;
}
iLVIndex=LVFind(LV_FINDOBJ,objCalled);
if (iLVIndex<0) iLVIndex=LVAlloc(objCalled);
switch(cmd)
{
case WS_INF:
return &_arsLv[iLVIndex];
case WS_OPEN: // Creazione
objCalled->hWnd=CreateListView(objCalled->nome,sys.EhWinInstance,WindowNow());
_arsLv[iLVIndex].hWndList=objCalled->hWnd;
_arsLv[iLVIndex].hWndHeader=ListView_GetHeader(objCalled->hWnd);//GetWindow(objCalled->hWnd, GW_CHILD);
_arsLv[iLVIndex].idHeader=GetDlgCtrlID(_arsLv[iLVIndex].hWndHeader);
_arsLv[iLVIndex].fLeftClick=TRUE;
_arsLv[iLVIndex].fRightClick=TRUE;
_arsLv[iLVIndex].fDoubleClick=FALSE;
break;
case WS_EXTNOTIFY:
switch (info)
{
case 0: _arsLv[iLVIndex].subListNotify=ptr; break;
case 1: _arsLv[iLVIndex].subMessage=ptr; break;
case 2: _arsLv[iLVIndex].subHeaderNotify=ptr; break;
}
break;
case WS_SETFLAG:
if (!strcmp(ptr,"STYLE")) // Setta lo stile della finestra
{
DWORD dwStyle;
dwStyle=GetWindowLong(objCalled->hWnd, GWL_STYLE);
dwStyle|=info;
SetWindowLong(objCalled->hWnd, GWL_STYLE, (DWORD) dwStyle);
}
if (!strcmp(ptr,"!STYLE")) // Setta lo stile della finestra
{
LONG lStyle;
lStyle=GetWindowLong(objCalled->hWnd, GWL_STYLE);
lStyle&=~info;
SetWindowLong(objCalled->hWnd, GWL_STYLE, lStyle);
}
if (!strcmp(ptr,"STYLEMASK")) // Setta lo stile della finestra
{
DWORD dwStyle;
dwStyle=GetWindowLong(objCalled->hWnd, GWL_STYLE);
//win_infoarg("%08x",~LVS_TYPESTYLEMASK);
dwStyle=dwStyle&~LVS_TYPESTYLEMASK|info;
SetWindowLong(objCalled->hWnd, GWL_STYLE, (DWORD) dwStyle);
}
if (!strcmp(ptr,"EXSTYLE")) // Setta lo stile della finestra
{
dwExStyle=ListView_GetExtendedListViewStyle(objCalled->hWnd);
dwExStyle|=info;
ListView_SetExtendedListViewStyle(objCalled->hWnd,dwExStyle);
}
if (!strcmp(ptr,"!EXSTYLE")) // Setta lo stile della finestra
{
dwExStyle=ListView_GetExtendedListViewStyle(objCalled->hWnd);
dwExStyle&=~info;
ListView_SetExtendedListViewStyle(objCalled->hWnd,dwExStyle);
}
if (!strcmp(ptr,"DCLK")) // Setta il Double Click
{
_arsLv[iLVIndex].fDoubleClick=info;
}
break;
case WS_CLOSE: // Distruzione
DestroyWindow(objCalled->hWnd);
break;
case WS_DEL: // Cancella le colonne
//.........这里部分代码省略.........
示例7: ASSERT_VALID
//*********************************************************************************
BOOL CBCGPOutlookBar::SaveState (LPCTSTR lpszProfileName, int nIndex, UINT uiID)
{
CBCGPBaseTabbedBar::SaveState (lpszProfileName, nIndex, uiID);
for (POSITION pos = m_lstCustomPages.GetHeadPosition (); pos != NULL;)
{
CBCGPOutlookBarPane* pPage = (CBCGPOutlookBarPane*)m_lstCustomPages.GetNext (pos);
ASSERT_VALID (pPage);
int nID = pPage->GetDlgCtrlID ();
pPage->SaveState (lpszProfileName, nID, nID);
}
CString strProfileName = ::BCGPGetRegPath (strOutlookBarProfile, lpszProfileName);
if (nIndex == -1)
{
nIndex = GetDlgCtrlID ();
}
CString strSection;
if (uiID == (UINT) -1)
{
strSection.Format (REG_SECTION_FMT, strProfileName, nIndex);
}
else
{
strSection.Format (REG_SECTION_FMT_EX, strProfileName, nIndex, uiID);
}
try
{
CMemFile file;
{
CArchive ar (&file, CArchive::store);
ar << (int) m_lstCustomPages.GetCount ();
for (POSITION pos = m_lstCustomPages.GetHeadPosition (); pos != NULL;)
{
CBCGPOutlookBarPane* pPage = (CBCGPOutlookBarPane*)m_lstCustomPages.GetNext (pos);
ASSERT_VALID (pPage);
ar << pPage->GetDlgCtrlID ();
CString strName;
if (pPage->IsTabbed ())
{
pPage->GetWindowText (strName);
}
else
{
pPage->GetParent ()->GetWindowText (strName);
}
ar << strName;
}
CBCGPOutlookWnd* pOutlookBar = (CBCGPOutlookWnd*) GetUnderlinedWindow ();
if (pOutlookBar != NULL)
{
ar << pOutlookBar->GetVisiblePageButtons ();
}
else
{
ar << -1;
}
ar.Flush ();
}
UINT uiDataSize = (UINT) file.GetLength ();
LPBYTE lpbData = file.Detach ();
if (lpbData != NULL)
{
CBCGPRegistrySP regSP;
CBCGPRegistry& reg = regSP.Create (FALSE, FALSE);
if (reg.CreateKey (strSection))
{
reg.Write (strRegCustomPages, lpbData, uiDataSize);
}
free (lpbData);
}
}
catch (CMemoryException* pEx)
{
pEx->Delete ();
TRACE(_T("Memory exception in CBCGPOutlookBar::SaveState ()!\n"));
}
catch (CArchiveException* pEx)
{
pEx->Delete ();
TRACE(_T("Archive exception in CBCGPOutlookBar::SaveState ()!\n"));
}
return TRUE;
}
示例8: GbaSlotPiano
INT_PTR CALLBACK GbaSlotPiano(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
{
int which = 0;
switch(msg)
{
case WM_INITDIALOG:
{
_OKbutton = TRUE;
SendDlgItemMessage(dialog,IDC_PIANO_C,WM_USER+44,tmp_Piano.C,0);
SendDlgItemMessage(dialog,IDC_PIANO_CS,WM_USER+44,tmp_Piano.CS,0);
SendDlgItemMessage(dialog,IDC_PIANO_D,WM_USER+44,tmp_Piano.D,0);
SendDlgItemMessage(dialog,IDC_PIANO_DS,WM_USER+44,tmp_Piano.DS,0);
SendDlgItemMessage(dialog,IDC_PIANO_E,WM_USER+44,tmp_Piano.E,0);
SendDlgItemMessage(dialog,IDC_PIANO_F,WM_USER+44,tmp_Piano.F,0);
SendDlgItemMessage(dialog,IDC_PIANO_FS,WM_USER+44,tmp_Piano.FS,0);
SendDlgItemMessage(dialog,IDC_PIANO_G,WM_USER+44,tmp_Piano.G,0);
SendDlgItemMessage(dialog,IDC_PIANO_GS,WM_USER+44,tmp_Piano.GS,0);
SendDlgItemMessage(dialog,IDC_PIANO_A,WM_USER+44,tmp_Piano.A,0);
SendDlgItemMessage(dialog,IDC_PIANO_AS,WM_USER+44,tmp_Piano.AS,0);
SendDlgItemMessage(dialog,IDC_PIANO_B,WM_USER+44,tmp_Piano.B,0);
SendDlgItemMessage(dialog,IDC_PIANO_HIC,WM_USER+44,tmp_Piano.HIC,0);
if (temp_type != addon_type)
needReset = true;
else
needReset = false;
return TRUE;
}
case WM_USER+46:
SendDlgItemMessage(dialog,IDC_PIANO_C,WM_USER+44,tmp_Piano.C,0);
SendDlgItemMessage(dialog,IDC_PIANO_CS,WM_USER+44,tmp_Piano.CS,0);
SendDlgItemMessage(dialog,IDC_PIANO_D,WM_USER+44,tmp_Piano.D,0);
SendDlgItemMessage(dialog,IDC_PIANO_DS,WM_USER+44,tmp_Piano.DS,0);
SendDlgItemMessage(dialog,IDC_PIANO_E,WM_USER+44,tmp_Piano.E,0);
SendDlgItemMessage(dialog,IDC_PIANO_F,WM_USER+44,tmp_Piano.F,0);
SendDlgItemMessage(dialog,IDC_PIANO_FS,WM_USER+44,tmp_Piano.FS,0);
SendDlgItemMessage(dialog,IDC_PIANO_G,WM_USER+44,tmp_Piano.G,0);
SendDlgItemMessage(dialog,IDC_PIANO_GS,WM_USER+44,tmp_Piano.GS,0);
SendDlgItemMessage(dialog,IDC_PIANO_A,WM_USER+44,tmp_Piano.A,0);
SendDlgItemMessage(dialog,IDC_PIANO_AS,WM_USER+44,tmp_Piano.AS,0);
SendDlgItemMessage(dialog,IDC_PIANO_B,WM_USER+44,tmp_Piano.B,0);
SendDlgItemMessage(dialog,IDC_PIANO_HIC,WM_USER+44,tmp_Piano.HIC,0);
return TRUE;
case WM_USER+43:
//MessageBox(hDlg,"USER+43 CAUGHT","moo",MB_OK);
which = GetDlgCtrlID((HWND)lparam);
switch(which)
{
case IDC_PIANO_C: tmp_Piano.C = wparam; break;
case IDC_PIANO_CS: tmp_Piano.CS = wparam; break;
case IDC_PIANO_D: tmp_Piano.D = wparam; break;
case IDC_PIANO_DS: tmp_Piano.DS = wparam; break;
case IDC_PIANO_E: tmp_Piano.E = wparam; break;
case IDC_PIANO_F: tmp_Piano.F = wparam; break;
case IDC_PIANO_FS: tmp_Piano.FS = wparam; break;
case IDC_PIANO_G: tmp_Piano.G = wparam; break;
case IDC_PIANO_GS: tmp_Piano.GS = wparam; break;
case IDC_PIANO_A: tmp_Piano.A = wparam; break;
case IDC_PIANO_AS: tmp_Piano.AS = wparam; break;
case IDC_PIANO_B: tmp_Piano.B = wparam; break;
case IDC_PIANO_HIC: tmp_Piano.HIC = wparam; break;
}
SendDlgItemMessage(dialog,IDC_PIANO_C,WM_USER+44,tmp_Piano.C,0);
SendDlgItemMessage(dialog,IDC_PIANO_CS,WM_USER+44,tmp_Piano.CS,0);
SendDlgItemMessage(dialog,IDC_PIANO_D,WM_USER+44,tmp_Piano.D,0);
SendDlgItemMessage(dialog,IDC_PIANO_DS,WM_USER+44,tmp_Piano.DS,0);
SendDlgItemMessage(dialog,IDC_PIANO_E,WM_USER+44,tmp_Piano.E,0);
SendDlgItemMessage(dialog,IDC_PIANO_F,WM_USER+44,tmp_Piano.F,0);
SendDlgItemMessage(dialog,IDC_PIANO_FS,WM_USER+44,tmp_Piano.FS,0);
SendDlgItemMessage(dialog,IDC_PIANO_G,WM_USER+44,tmp_Piano.G,0);
SendDlgItemMessage(dialog,IDC_PIANO_GS,WM_USER+44,tmp_Piano.GS,0);
SendDlgItemMessage(dialog,IDC_PIANO_A,WM_USER+44,tmp_Piano.A,0);
SendDlgItemMessage(dialog,IDC_PIANO_AS,WM_USER+44,tmp_Piano.AS,0);
SendDlgItemMessage(dialog,IDC_PIANO_B,WM_USER+44,tmp_Piano.B,0);
SendDlgItemMessage(dialog,IDC_PIANO_HIC,WM_USER+44,tmp_Piano.HIC,0);
PostMessage(dialog,WM_NEXTDLGCTL,0,0);
return true;
}
return FALSE;
}
示例9: switch
//.........这里部分代码省略.........
dwDllBuild == ~0 ? cMissing.Data : dwDllBuild < DllBuild_Merge7z ? cOutdated.Data : cPresent.Data);
dwDllBuild = FormatVersion(cText.Data, cPlugin.Data, pThis->m_dwVer7zInstalled);
SetDlgItemText(hWnd, 120, *cText.Data ? cText.Data : cNone.Data);
SetDlgItemText(hWnd, 121, cPlugin.Data);
SetDlgItemText(hWnd, 122, *cPlugin.Data == '\0' ? cPlugin.Data :
dwDllBuild == ~0 ? cMissing.Data : dwDllBuild < DllBuild_Merge7z ? cOutdated.Data : cPresent.Data);
dwDllBuild = FormatVersion(cText.Data, cPlugin.Data, pThis->m_dwVer7zLocal);
SetDlgItemText(hWnd, 130, *cText.Data ? cText.Data : cNone.Data);
SetDlgItemText(hWnd, 131, cPlugin.Data);
SetDlgItemText(hWnd, 132, *cPlugin.Data == '\0' ? cPlugin.Data :
dwDllBuild == ~0 ? cMissing.Data : dwDllBuild < DllBuild_Merge7z ? cOutdated.Data : cPresent.Data);
GetModuleFileName(0, cText.Data, MAX_PATH);
PathRemoveFileSpec(cText.Data);
PathAppend(cText.Data, _T("Merge7z*.dll"));
DlgDirListDLLs(hWnd, cText.Data, 105);
if (DWORD cchPath = GetEnvironmentVariable(_T("path"), 0, 0))
{
static const TCHAR cSep[] = _T(";");
LPTSTR pchPath = new TCHAR[cchPath];
GetEnvironmentVariable(_T("PATH"), pchPath, cchPath);
LPTSTR pchItem = pchPath;
while (int cchItem = StrCSpn(pchItem += StrSpn(pchItem, cSep), cSep))
{
if (cchItem < MAX_PATH)
{
CopyMemory(cText.Data, pchItem, cchItem*sizeof*pchItem);
cText.Data[cchItem] = 0;
PathAppend(cText.Data, _T("Merge7z*.dll"));
DlgDirListDLLs(hWnd, cText.Data, 105);
}
pchItem += cchItem;
}
delete[] pchPath;
}
if (SendDlgItemMessage(hWnd, 105, LB_GETCOUNT, 0, 0) == 0)
{
SendDlgItemMessage(hWnd, 105, LB_ADDSTRING, 0, (LPARAM) cNone.Data);
}
HICON hIcon = LoadIcon(0, IDI_EXCLAMATION);
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM) hIcon);
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIcon);
if (pThis->m_bShowAllways)
{
ShowWindow(GetDlgItem(hWnd, 106), SW_HIDE);
}
} return TRUE;
case WM_DRAWITEM:
{
switch (wParam)
{
case 108:
CDrawItemStruct::From(lParam)->DrawWebLinkButton();
break;
}
} return TRUE;
case WM_SETCURSOR:
{
HCURSOR hCursor = 0;
switch (GetDlgCtrlID((HWND)wParam))
{
case 108:
hCursor = CommCtrl_LoadCursor(MAKEINTRESOURCE(108));
break;
}
if (hCursor)
{
SetCursor(hCursor);
SetWindowLongPtr(hWnd, DWLP_MSGRESULT, 1);
return TRUE;
}
} return FALSE;
case WM_COMMAND:
{
switch (wParam)
{
case IDOK:
case IDCANCEL:
{
int nDontShowAgain = SendDlgItemMessage(hWnd, 106, BM_GETCHECK, 0, 0);
EndDialog(hWnd, MAKEWORD(IDOK, nDontShowAgain));
} break;
case 108:
{
HINSTANCE h = ShellExecute(hWnd, _T("open"), m_strDownloadURL, 0, 0, SW_SHOWNORMAL);
if ((UINT)h > 32)
{
LONG lStyle = ::GetWindowLong((HWND)lParam, GWL_STYLE);
::SetWindowLong((HWND)lParam, GWL_STYLE, lStyle|BS_LEFTTEXT);
::InvalidateRect((HWND)lParam, 0, TRUE);
}
else
{
MessageBeep(0);
}
} break;
}
} return TRUE;
}
return FALSE;
}
示例10: NetworkPingWndProc
//.........这里部分代码省略.........
);
if (context->PingGraphHandle)
DestroyWindow(context->PingGraphHandle);
if (context->IconHandle)
DestroyIcon(context->IconHandle);
if (context->FontHandle)
DeleteObject(context->FontHandle);
PhDeleteWorkQueue(&context->PingWorkQueue);
PhDeleteGraphState(&context->PingGraphState);
PhDeleteLayoutManager(&context->LayoutManager);
RemoveProp(hwndDlg, L"Context");
PhFree(context);
}
break;
case WM_SIZE:
PhLayoutManagerLayout(&context->LayoutManager);
break;
case WM_SIZING:
PhResizingMinimumSize((PRECT)lParam, wParam, 420, 250);
break;
case WM_CTLCOLORBTN:
case WM_CTLCOLORDLG:
case WM_CTLCOLORSTATIC:
{
HDC hDC = (HDC)wParam;
HWND hwndChild = (HWND)lParam;
// Check for our static label and change the color.
if (GetDlgCtrlID(hwndChild) == IDC_MAINTEXT)
{
SetTextColor(hDC, RGB(19, 112, 171));
}
// Set a transparent background for the control backcolor.
SetBkMode(hDC, TRANSPARENT);
// set window background color.
return (INT_PTR)GetSysColorBrush(COLOR_WINDOW);
}
break;
case WM_PING_UPDATE:
{
ULONG i = 0;
ULONG maxGraphHeight = 0;
ULONG pingAvgValue = 0;
PhNetworkPingUpdateGraph(context);
for (i = 0; i < context->PingHistory.Count; i++)
{
maxGraphHeight = maxGraphHeight + PhGetItemCircularBuffer_ULONG(&context->PingHistory, i);
pingAvgValue = maxGraphHeight / context->PingHistory.Count;
}
SetDlgItemText(hwndDlg, IDC_ICMP_AVG, PhaFormatString(
L"Average: %lums", pingAvgValue)->Buffer);
SetDlgItemText(hwndDlg, IDC_ICMP_MIN, PhaFormatString(
L"Minimum: %lums", context->PingMinMs)->Buffer);
SetDlgItemText(hwndDlg, IDC_ICMP_MAX, PhaFormatString(
L"Maximum: %lums", context->PingMaxMs)->Buffer);
示例11: PhosphorProc
//.........这里部分代码省略.........
if (bValid) {
nVidFeedbackIntensity = _tcstol(szText, NULL, 0);
if (nVidFeedbackIntensity < 0) {
nVidFeedbackIntensity = 0;
} else {
if (nVidFeedbackIntensity > 255) {
nVidFeedbackIntensity = 255;
}
}
// Set slider to current value
SendDlgItemMessage(hDlg, IDC_PHOSPHOR_1_SLIDER, TBM_SETPOS, (WPARAM)true, (LPARAM)nVidFeedbackIntensity);
}
break;
case IDC_PHOSPHOR_2_EDIT:
if (SendDlgItemMessage(hDlg, IDC_PHOSPHOR_2_EDIT, WM_GETTEXTLENGTH, (WPARAM)0, (LPARAM)0) < 16) {
SendDlgItemMessage(hDlg, IDC_PHOSPHOR_2_EDIT, WM_GETTEXT, (WPARAM)16, (LPARAM)szText);
}
// Scan string in the edit control for illegal characters
for (int i = 0; szText[i]; i++) {
if (!_istdigit(szText[i])) {
bValid = 0;
break;
}
}
if (bValid) {
nVidFeedbackOverSaturation = _tcstol(szText, NULL, 0);
if (nVidFeedbackOverSaturation < 0) {
nVidFeedbackOverSaturation = 0;
} else {
if (nVidFeedbackOverSaturation > 255) {
nVidFeedbackOverSaturation = 255;
}
}
// Set slider to current value
SendDlgItemMessage(hDlg, IDC_PHOSPHOR_2_SLIDER, TBM_SETPOS, (WPARAM)true, (LPARAM)nVidFeedbackOverSaturation);
// Update the screen
if (bVidOkay) {
VidPaint(2);
}
}
break;
}
}
break;
}
}
break;
}
case WM_HSCROLL: {
switch (LOWORD(wParam)) {
case TB_BOTTOM:
case TB_ENDTRACK:
case TB_LINEDOWN:
case TB_LINEUP:
case TB_PAGEDOWN:
case TB_PAGEUP:
case TB_THUMBPOSITION:
case TB_THUMBTRACK:
case TB_TOP: {
if (nExitStatus == 0) {
TCHAR szText[16];
// Update the contents of the edit control
switch (GetDlgCtrlID((HWND)lParam)) {
case IDC_PHOSPHOR_1_SLIDER:
nVidFeedbackIntensity = SendDlgItemMessage(hDlg, IDC_PHOSPHOR_1_SLIDER, TBM_GETPOS, (WPARAM)0, (LPARAM)0);
_stprintf(szText, _T("%i"), nVidFeedbackIntensity);
SendDlgItemMessage(hDlg, IDC_PHOSPHOR_1_EDIT, WM_SETTEXT, (WPARAM)0, (LPARAM)szText);
break;
case IDC_PHOSPHOR_2_SLIDER:
nVidFeedbackOverSaturation = SendDlgItemMessage(hDlg, IDC_PHOSPHOR_2_SLIDER, TBM_GETPOS, (WPARAM)0, (LPARAM)0);
_stprintf(szText, _T("%i"), nVidFeedbackOverSaturation);
SendDlgItemMessage(hDlg, IDC_PHOSPHOR_2_EDIT, WM_SETTEXT, (WPARAM)0, (LPARAM)szText);
break;
}
}
break;
}
}
break;
}
case WM_CLOSE:
if (nExitStatus != 1) {
nVidFeedbackIntensity = nPrevIntensity;
nVidFeedbackOverSaturation = nPrevSaturation;
}
EndDialog(hDlg, 0);
break;
}
return 0;
}
示例12: kwin_command
/*
* Function: Process WM_COMMAND messages
*/
static void
kwin_command(HWND hwnd, int cid, HWND hwndCtl, UINT codeNotify)
{
char name[ANAME_SZ];
char realm[REALM_SZ];
char password[MAX_KPW_LEN];
HCURSOR hcursor;
BOOL blogin;
HMENU hmenu;
char menuitem[MAX_K_NAME_SZ + 3];
char copyright[128];
int id;
#ifdef KRB4
char instance[INST_SZ];
int lifetime;
int krc;
#endif
#ifdef KRB5
long lifetime;
krb5_error_code code;
krb5_principal principal;
krb5_creds creds;
krb5_get_init_creds_opt opts;
gic_data gd;
#endif
#ifdef KRB4
EnableWindow(GetDlgItem(hwnd, IDD_TICKET_DELETE), krb_get_num_cred() > 0);
#endif
#ifdef KRB5
EnableWindow(GetDlgItem(hwnd, IDD_TICKET_DELETE), k5_get_num_cred(1) > 0);
#endif
GetDlgItemText(hwnd, IDD_LOGIN_NAME, name, sizeof(name));
trim(name);
blogin = strlen(name) > 0;
if (blogin) {
GetDlgItemText(hwnd, IDD_LOGIN_REALM, realm, sizeof(realm));
trim(realm);
blogin = strlen(realm) > 0;
}
if (blogin) {
GetDlgItemText(hwnd, IDD_LOGIN_PASSWORD, password, sizeof(password));
blogin = strlen(password) > 0;
}
EnableWindow(GetDlgItem(hwnd, IDD_LOGIN), blogin);
id = (blogin) ? IDD_LOGIN : IDD_PASSWORD_CR2;
SendMessage(hwnd, DM_SETDEFID, id, 0);
if (codeNotify != BN_CLICKED && codeNotify != 0 && codeNotify != 1)
return; /* FALSE */
/*
* Check to see if this item is in a list of the ``recent hosts'' sort
* of list, under the FILE menu.
*/
if (cid >= IDM_FIRST_LOGIN && cid < IDM_FIRST_LOGIN + FILE_MENU_MAX_LOGINS) {
hmenu = GetMenu(hwnd);
assert(hmenu != NULL);
hmenu = GetSubMenu(hmenu, 0);
assert(hmenu != NULL);
if (!GetMenuString(hmenu, cid, menuitem, sizeof(menuitem), MF_BYCOMMAND))
return; /* TRUE */
if (menuitem[0])
kwin_init_name(hwnd, &menuitem[3]);
return; /* TRUE */
}
switch (cid) {
case IDM_EXIT:
if (isblocking)
WSACancelBlockingCall();
WinHelp(hwnd, KERBEROS_HLP, HELP_QUIT, 0);
PostQuitMessage(0);
return; /* TRUE */
case IDD_PASSWORD_CR2: /* Make CR == TAB */
id = GetDlgCtrlID(GetFocus());
assert(id != 0);
if (id == IDD_MAX_EDIT)
PostMessage(hwnd, WM_NEXTDLGCTL,
(WPARAM)GetDlgItem(hwnd, IDD_MIN_EDIT), MAKELONG(1, 0));
else
PostMessage(hwnd, WM_NEXTDLGCTL, 0, 0);
return; /* TRUE */
//.........这里部分代码省略.........
示例13: MainDlg_MusicPlayer_Proc
//.........这里部分代码省略.........
}
}
return TRUE;
/* case ID_QuitApp://该菜单项无意义。
{
EndDialog(GetParent(hwnd), 0);//关闭主窗口。
}
return TRUE;*/
default:
return FALSE;
}
}
return TRUE;//这里TRUE or FALSE已经无所谓了。
case WM_MUSICEND://一首音乐播放完成之后,定时器函数中会发送这个消息给窗口,窗口响应该消息后调用函数播放下一首音乐。
{
MusicMessage::AutoPlayNextMusic();
}
return TRUE;
case WM_SEARCHITEMMSG://接受搜索框传过来的搜索消息。
{
TCHAR szSearchItemMsg[MAX_PATH] = { NULL };
lstrcpy(szSearchItemMsg, (TCHAR*)wParam);//拷贝搜索框传过来的搜索消息。
// MessageBox(hwnd, szSearchItemMsg, TEXT("Message"), MB_OK);
//开始音乐列表的搜索操作。
MusicMessage::FindMusicItemFromMusicList(szSearchItemMsg);
}
return TRUE;
case WM_CONTEXTMENU://The WM_CONTEXTMENU message notifies a window that the user clicked the right mouse button (right-clicked) in the window.
{
HWND hClickWnd = (HWND)wParam;
int iXcoordinate = (int)LOWORD(lParam);//这两个都是点击时的屏幕坐标。
int iYcoordinate = (int)HIWORD(lParam);
//看是来自哪个控件的右键点击操作。
switch (GetDlgCtrlID(hClickWnd))
{
case IDC_LISTMUSIC:
{
HWND hMusicListWnd = GetDlgItem(hwnd, IDC_LISTMUSIC);
HMENU hMenu = LoadMenu((HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDR_MusicList_RightClick_Menu));
hMenu = GetSubMenu(hMenu, 0);
RECT musicListScreenRect;
GetWindowRect(hMusicListWnd, &musicListScreenRect);//获得此时音乐列表的屏幕坐标。
int iTopIndex = SendMessage(hMusicListWnd, LB_GETTOPINDEX, (WPARAM)0, (LPARAM)0);
int iMusicListItemHeight = SendMessage(hMusicListWnd, LB_GETITEMHEIGHT, (WPARAM)iTopIndex, (LPARAM)0);//就先取第零项的高度试一下。
if (iMusicListItemHeight == LB_ERR)
{
MessageBox(hwnd, TEXT("在获取音乐列表的每一项的高度时发生错误!"), TEXT("ERROR"), MB_OK | MB_ICONERROR);
}
int iCurIndex = iTopIndex + (int)((iYcoordinate - musicListScreenRect.top) / iMusicListItemHeight);
SendMessage(hMusicListWnd, LB_SETCURSEL, (WPARAM)iCurIndex, (LPARAM)0);
TrackPopupMenuEx(hMenu, TPM_LEFTALIGN, iXcoordinate, iYcoordinate, hwnd, NULL);
}
return TRUE;
default:
return FALSE;
}
}
return TRUE;
case WM_HSCROLL:
{
switch (GetDlgCtrlID((HWND)lParam))
{
case IDC_MusicSlider:
PlayingSliderChange(hwnd, (HWND)lParam, wParam);
return TRUE;
示例14: ContactListControlWndProc
LRESULT CALLBACK ContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
ClcContact *contact;
ClcGroup *group;
BOOL frameHasTitlebar = FALSE;
if (wndFrameCLC)
frameHasTitlebar = wndFrameCLC->TitleBar.ShowTitleBar;
ClcData *dat = (struct ClcData *) GetWindowLongPtr(hwnd, 0);
if (msg >= CLM_FIRST && msg < CLM_LAST)
return ProcessExternalMessages(hwnd, dat, msg, wParam, lParam);
switch (msg) {
case WM_CREATE:
dat = (struct ClcData *)mir_alloc(sizeof(struct ClcData));
memset(dat, 0, sizeof(struct ClcData));
SetWindowLongPtr(hwnd, 0, (LONG_PTR)dat);
RowHeight::Init(dat);
dat->forceScroll = 0;
dat->lastRepaint = 0;
dat->hwndParent = GetParent(hwnd);
dat->lastSort = GetTickCount();
dat->needsResort = FALSE;
{
CREATESTRUCT *cs = (CREATESTRUCT *)lParam;
if (cs->lpCreateParams == (LPVOID)0xff00ff00) {
dat->bisEmbedded = FALSE;
dat->bHideSubcontacts = TRUE;
cfg::clcdat = dat;
if (cfg::dat.bShowLocalTime)
SetTimer(hwnd, TIMERID_REFRESH, 65000, NULL);
}
else
dat->bisEmbedded = TRUE;
}
break;
case WM_SIZE:
pcli->pfnEndRename(hwnd, dat, 1);
KillTimer(hwnd, TIMERID_INFOTIP);
KillTimer(hwnd, TIMERID_RENAME);
pcli->pfnRecalcScrollBar(hwnd, dat);
LBL_Def:
return DefWindowProc(hwnd, msg, wParam, lParam);
case WM_NCCALCSIZE:
return FrameNCCalcSize(hwnd, DefWindowProc, wParam, lParam, frameHasTitlebar);
/*
* scroll bar handling
*/
case WM_NCPAINT:
return FrameNCPaint(hwnd, DefWindowProc, wParam, lParam, frameHasTitlebar);
case INTM_GROUPCHANGED:
{
WORD iExtraImage[EXTRA_ICON_COUNT];
BYTE flags = 0;
if (!FindItem(hwnd, dat, (HANDLE)wParam, &contact, NULL, NULL))
memset(iExtraImage, 0xFF, sizeof(iExtraImage));
else {
memcpy(iExtraImage, contact->iExtraImage, sizeof(iExtraImage));
flags = contact->flags;
}
pcli->pfnDeleteItemFromTree(hwnd, wParam);
if (GetWindowLongPtr(hwnd, GWL_STYLE) & CLS_SHOWHIDDEN || !CLVM_GetContactHiddenStatus(wParam, NULL, dat)) {
pcli->pfnAddContactToTree(hwnd, dat, wParam, 1, 1);
if (FindItem(hwnd, dat, (HANDLE)wParam, &contact, NULL, NULL)) {
memcpy(contact->iExtraImage, iExtraImage, sizeof(iExtraImage));
if (flags & CONTACTF_CHECKED)
contact->flags |= CONTACTF_CHECKED;
}
NMCLISTCONTROL nm;
nm.hdr.code = CLN_CONTACTMOVED;
nm.hdr.hwndFrom = hwnd;
nm.hdr.idFrom = GetDlgCtrlID(hwnd);
nm.flags = 0;
nm.hItem = (HANDLE)wParam;
SendMessage(GetParent(hwnd), WM_NOTIFY, 0, (LPARAM)&nm);
}
dat->needsResort = TRUE;
PostMessage(hwnd, INTM_SORTCLC, 0, 1);
}
goto LBL_Def;
case INTM_ICONCHANGED:
{
int recalcScrollBar = 0;
MCONTACT hContact = wParam;
WORD status = ID_STATUS_OFFLINE;
int contactRemoved = 0;
MCONTACT hSelItem = NULL;
ClcContact *selcontact = NULL;
char *szProto = GetContactProto(hContact);
if (szProto == NULL)
status = ID_STATUS_OFFLINE;
//.........这里部分代码省略.........
示例15: ContactListSubclassProc
LRESULT CALLBACK ContactListSubclassProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
TVITEM tvi;
CCList *dat = CWndUserData(GetParent(hWnd)).GetCList();
switch (Msg) {
case INTM_CONTACTDELETED: // wParam = (HANDLE)hContact
{
HTREEITEM hItem = dat->FindContact(wParam);
if (hItem)
TreeView_DeleteItem(hWnd, hItem);
}
break;
case INTM_ICONCHANGED: // wParam = (HANDLE)hContact, lParam = IconID
tvi.hItem = dat->FindContact(wParam);
if (tvi.hItem) {
tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvi.iImage = tvi.iSelectedImage = lParam;
TreeView_SetItem(hWnd, &tvi);
dat->SortContacts();
InvalidateRect(hWnd, NULL, false);
}
break;
case INTM_INVALIDATE:
InvalidateRect(hWnd, NULL, true);
break;
case WM_RBUTTONDOWN:
SetFocus(hWnd);
{
TVHITTESTINFO hitTest;
hitTest.pt.x = (short)LOWORD(lParam);
hitTest.pt.y = (short)HIWORD(lParam);
TreeView_HitTest(hWnd, &hitTest);
if (hitTest.hItem && hitTest.flags & TVHT_ONITEM)
TreeView_SelectItem(hWnd, hitTest.hItem);
}
return DefWindowProc(hWnd, Msg, wParam, lParam);
case WM_LBUTTONDOWN:
{
POINT pt = { (short)LOWORD(lParam), (short)HIWORD(lParam) };
DWORD hitFlags;
HTREEITEM hItem = dat->HitTest(&pt, &hitFlags);
if (!hItem)
break;
if (hitFlags & MCLCHT_ONITEMICON) {
if (TreeView_GetChild(hWnd, hItem)) { // if it's a group, then toggle its state
NMTREEVIEW nmtv;
nmtv.hdr.hwndFrom = hWnd;
nmtv.hdr.idFrom = GetDlgCtrlID(hWnd);
nmtv.hdr.code = TVN_ITEMEXPANDING;
nmtv.action = TVE_TOGGLE;
nmtv.itemNew.hItem = hItem;
nmtv.itemNew.mask = TVIF_HANDLE | TVIF_STATE | TVIF_PARAM;
TreeView_GetItem(hWnd, &nmtv.itemNew);
nmtv.ptDrag = pt;
if (SendMessage(GetParent(hWnd), WM_NOTIFY, 0, (LPARAM)&nmtv))
return 0;
HTREEITEM hOldSelItem = TreeView_GetSelection(hWnd);
TreeView_Expand(hWnd, hItem, TVE_TOGGLE);
HTREEITEM hNewSelItem = TreeView_GetSelection(hWnd);
if (hNewSelItem != hOldSelItem) {
TreeView_SetItemState(hWnd, hOldSelItem, (dat->SelectedItems.Find(hOldSelItem) == -1) ? 0 : TVIS_SELECTED, TVIS_SELECTED);
TreeView_SetItemState(hWnd, hNewSelItem, (dat->SelectedItems.Find(hNewSelItem) == -1) ? 0 : TVIS_SELECTED, TVIS_SELECTED);
}
nmtv.hdr.code = TVN_ITEMEXPANDED;
TreeView_GetItem(hWnd, &nmtv.itemNew);
SendMessage(GetParent(hWnd), WM_NOTIFY, 0, (LPARAM)&nmtv);
return 0;
}
}
if (hitFlags & MCLCHT_ONITEM) {
if (wParam & MK_CONTROL) {
SetFocus(hWnd);
TREEITEMARRAY OldSelection = dat->SelectedItems;
int nIndex = dat->SelectedItems.Find(hItem);
if (nIndex == -1) {
TreeView_SetItemState(hWnd, hItem, TVIS_SELECTED, TVIS_SELECTED);
dat->SelectedItems.AddElem(hItem);
}
else {
TreeView_SetItemState(hWnd, hItem, 0, TVIS_SELECTED);
dat->SelectedItems.RemoveElem(nIndex);
}
dat->SelectGroups(hItem, nIndex == -1);
NMCLIST nm;
nm.hdr.code = MCLN_SELCHANGED;
nm.hdr.hwndFrom = hWnd;
nm.hdr.idFrom = GetDlgCtrlID(hWnd);
nm.OldSelection = &OldSelection;
nm.NewSelection = &dat->SelectedItems;
SendMessage(GetParent(hWnd), WM_NOTIFY, 0, (LPARAM)&nm);
return 0;
}
// if it was a click on the selected item and there's need to do something in this case, then send SELCHANGED notification by ourselves, as the tree control doesn't do anything
//.........这里部分代码省略.........