The Humane Interface, by Jef Raskin is worth reading. A dialog box is the last resort, and a sign of poor design. Most are unnecessary, and as you discovered are all ignored by users.
Why is there a dialog box? Solve that problem - don't ask users to confirm an operation, instead make it easy to undo the operation. Don't popup a dialog box announcing an error - do whatever recovery you're going to do anyway (or whatever is possible). Definitely don't show dialog boxes which have only one outcome ('OK' only boxes are the devil), present the information within the app unobtrusively.