How can I prevent that the user can make hidden columns visible with a double-click?
The grid always calls the virtual member OnTrackColWidth(nCol) before it will restore hidden columns.
So, you should override this method and return FALSE if you don't want the user to be able to restore the column. OnTrackColWidth(nCol) will also be called for visible columns to determine if the columns width can be changed. By calling IsColHidden(nCol) you can determine whether the columns is visible or hidden.
Example:
BOOL CMyGrid::OnTrackColWidth(ROWCOL nCol)
{
if (IsColHidden(nCol))
return FALSE; // don't allow to restore hidden columns
// ... but allow to resize visible columns
return TRUE;
}