Что относительно того, чтобы просто добавить пустую ячейку, которая работает распорной деталью? Вы могли использовать тег седла как указано выше, чтобы дать пустым ячейкам определенную ширину
<col/>
<col style="width:20px"/>
<col/>
<col style="width:20px"/>
<col/>
<tr>
<td>Data</td>
<td>& nbsp;</td>
<td>Data</td>
<td>& nbsp;</td>
<td>Data</td>
</tr>
Или если Вы хотите сделать больше с ними, просто добавьте классы к ним вместо того, чтобы использовать встроенное моделирование...
Шаг 1: Создайте ловушку CBT для перехвата создания окна сообщения:
// global hook procedure
HHOOK hhookCBTProc = 0;
LRESULT CALLBACK pfnCBTMsgBoxHook(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HCBT_CREATEWND)
{
CREATESTRUCT *pcs = ((CBT_CREATEWND *)lParam)->lpcs;
if ((pcs->style & WS_DLGFRAME) || (pcs->style & WS_POPUP))
{
HWND hwnd = (HWND)wParam;
// At this point you have the hwnd of the newly created
// message box that so you can position it at will
SetWindowPos(hwnd, ...);
}
}
return (CallNextHookEx(hhookCBTProc, nCode, wParam, lParam));
}
Шаг 2: Установите / удалите ловушку до и после показа окна сообщения :
// set hook to center the message box that follows
hhookCBTProc = SetWindowsHookEx(WH_CBT,
pfnCBTMsgBoxHook,
0, GetCurrentThreadId());
int sResult = MessageBox(hwndParent, pszMsg, pszTitle, usStyle);
// remove the hook
UnhookWindowsHookEx(hhookCBTProc);
Если мне требовалось дополнительное поведение для Messagebox, я всегда создавал свое собственное окно и делал его похожим на стандартный MessageBox. Вы делаете это правильно один раз, и всегда можете повторно использовать это в других проектах.
MessageBox - это в основном набор значений по умолчанию. Они не нравятся? Принести свой собственный. Если вам не нужно настоящее окно со всеми его сложностями, но MessageBox слишком ограничивает, создайте диалог.
Вы можете сделать это с помощью процедуры подключения CBT. В MSDN есть статья о том, как это сделать в VB, но преобразовать ее в C ++ не составит труда.