Мне нравится писать простые объяснения для толстых людей, потому что я толстый, поэтому здесь идет ...
У нас есть 5 разделов на странице, каждый с ID ... div1, div2, div3, div4, div5
jQuery может это сделать ...
for (var i=1; i<=5; i++) {
$("#div" + i).click ( function() { alert ($(this).index()) } )
}
Но действительно решая проблему (и медленно ее создавая) ...
for (var i=1; i<=5; i++) {
$("#div" + i).click (
// TODO: Write function to handle click event
)
}
for (var i=1; i<=5; i++) {
$("#div" + i).click (
function(num) {
// A functions variable values are set WHEN THE FUNCTION IS CALLED!
// PLEASE UNDERSTAND THIS AND YOU ARE HOME AND DRY (took me 2 years)!
// Now the click event is expecting a function as a handler so return it
return function() { alert (num) }
}(i) // We call the function here, passing in i
)
}
Если вы не можете опустить голову, тогда это должно быть легче понять и иметь тот же эффект ...
for (var i=1; i<=5; i++) {
function clickHandler(num) {
$("#div" + i).click (
function() { alert (num) }
)
}
clickHandler(i);
}
Это должно быть понятным, если вы помните, что значения переменных функций задаются при вызове функции (но это использует ту же мысль как и раньше)
С помощью дескриптора меню вы можете перемещаться по пунктам меню и вызывать SetMenuItemInfo, указывая, что вы хотите, чтобы владелец рисовал элементы меню. Когда вы это сделаете, окно, в которое подключено меню, получит сообщение WM_MEASUREITEM
, на которое вы ответите, установив необходимые для этого параметры. Здесь вы можете установить свою ширину.
Конечно, это означает, что вы должны подклассифицировать обработчик сообщений Windows для окна, содержащего меню.
Прежде всего, попробуйте получить HWND в меню: (1) WM_DRAWITEM (2) получит HDC (3) WindowFromDC (), тогда вы можете произвольно отрегулировать аспекты меню. ПРИМЕЧАНИЕ. Не отправляйте WM_QUIT WM_CLOSE в меню, иначе вы эффективно отключите компьютер без подсказки.
Это не имеет никакого отношения к WM_MEASUREITEM
Просто используйте внутренние сообщения меню win32
(Win32 FAQ: news: //comp.os.ms-windows.programmer.win32)